多张卡部署一个codellama实例

2024-02-18 20:20
文章标签 部署 实例 codellama 张卡

本文主要是介绍多张卡部署一个codellama实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

模型推理过程

使用Transformers框架进行文本生成类任务会经过以下步骤:

  • 加载预训练模型和tokenizer
    主要涉及到网络传输(下载模型参数)、解压缩以及模型参数的初始化,这些过程通常是在 CPU 上执行

  • 文本编码
    对输入文本进行分词、转换为 token ID,并最终将 token ID 转换为 PyTorch 张量。这个过程不涉及模型参数的加载,也不需要进行模型的推理或训练,因此不需要 GPU 资源。

  • 生成文本
    将模型参数需要加载到 GPU 的显存中,把编码后的输入文本作为输入得到输出项,一般会经过以下几个步骤:

  1. 模型推理: 将编码后的输入文本输入到预训练的语言模型中。模型会根据输入文本的上下文信息,预测下一个 token 的概率分布。这个过程通常是在模型的前向传播中完成的。
  2. 采样下一个 token: 根据模型预测的概率分布,从候选 token 中采样一个作为下一个 token。常见的采样方法包括贪婪采样、随机采样和核采样等。
  3. 更新输入文本: 将新采样的 token 添加到输入文本末尾,并丢弃最早的 token,形成新的输入文本序列。
  4. 重复步骤 2-4: 重复进行模型推理和采样,直到生成了指定长度的文本或满足停止条件。
  • 解码
    将生成的 token IDs 解码成文本字符串(人类可读的文本),即生成的文本。

以下是一个文本生成模型的代码示例:

from transformers import AutoModelForCausalLM, AutoTokenizer# 加载预训练模型和 tokenizer
model_name = "gpt2"
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_name)# 从模型中生成文本
input_text = "Once upon a time,"
input_ids = tokenizer(input_text, return_tensors="pt").input_ids
outputs = model.generate(input_ids)# 将生成的文本解码为人类可读的文本
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(generated_text)

模型Layer

在深度学习中,模型通常由多个层(或称为模块)组成,每个层执行特定的功能,并且它们以一种有序的方式连接在一起,构成了整个模型。不同类型的模型可能由不同种类的层组成,每个层都有其特定的功能和作用。

以下是一些常见的模型层及其功能的示例:

  1. 输入层(Input Layer):输入层负责接收原始输入数据,并将其转换为模型可以处理的张量格式。在自然语言处理任务中,输入层通常由词嵌入层组成,用于将文本数据编码成词嵌入向量。

  2. 卷积层(Convolutional Layer):卷积层主要用于处理图像数据,通过卷积操作提取图像的特征。在卷积神经网络(CNN)中,通常会包含多个卷积层,每个卷积层会对输入进行不同尺寸和数量的卷积操作。

  3. 循环层(Recurrent Layer):循环层用于处理序列数据,具有记忆功能,能够捕捉序列数据中的时序信息。循环神经网络(RNN)和长短期记忆网络(LSTM)是常见的循环层结构。

  4. 注意力层(Attention Layer):注意力层用于处理序列数据或序列-序列数据,能够动态地计算输入序列中各个位置的重要性,并将注意力权重应用于相应的位置。Transformer 模型中的自注意力机制就是一种常见的注意力层。

  5. 全连接层(Fully Connected Layer):全连接层通常位于神经网络的最后几层,用于将模型提取的特征映射到最终的输出空间。在分类任务中,全连接层通常用于将特征向量映射到类别概率分布。

  6. 输出层(Output Layer):输出层负责生成模型的最终输出,通常根据任务的不同,输出层可能采用不同的激活函数和损失函数。在分类任务中,输出层通常采用 softmax 激活函数生成类别概率分布。

可以使用以下代码查看某个模型的Layer分布

for name, module in model.named_modules():print(f"模块名称: {name}, 模块对象: {module}")

将Layer分配到不同的显卡上进行计算。每个显卡只负责计算模型的一部分,可以解决单个显卡内存不足的问题。

Layer分散到多卡推理

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, LlamaForCausalLM
from accelerate import dispatch_model
from accelerate.utils import get_balanced_memory, infer_auto_device_mapmodel_name = "codellama/CodeLlama-7b-Instruct-hf"
tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True)no_split_module_classes = LlamaForCausalLM._no_split_modules
max_memory = {1: '5GiB', 2: '5GiB', 3: '7GiB'}
device_map = infer_auto_device_map(model, max_memory=max_memory, no_split_module_classes=no_split_module_classes)
print(device_map)
model = dispatch_model(model, device_map=device_map, offload_dir="tmp")input_text = "def function("
input_ids = tokenizer(input_text, return_tensors="pt").input_ids.cuda()# 生成文本
outputs = model.generate(input_ids, max_length=100)# 将生成的文本解码为人类可读的文本
generated_texts = [tokenizer.decode(output, skip_special_tokens=True) for output in outputs]
print(generated_texts)

这篇关于多张卡部署一个codellama实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/722344

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

实例:如何统计当前主机的连接状态和连接数

统计当前主机的连接状态和连接数 在 Linux 中,可使用 ss 命令来查看主机的网络连接状态。以下是统计当前主机连接状态和连接主机数量的具体操作。 1. 统计当前主机的连接状态 使用 ss 命令结合 grep、cut、sort 和 uniq 命令来统计当前主机的 TCP 连接状态。 ss -nta | grep -v '^State' | cut -d " " -f 1 | sort |

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起

Solr部署如何启动

Solr部署如何启动 Posted on 一月 10, 2013 in:  Solr入门 | 评论关闭 我刚接触solr,我要怎么启动,这是群里的朋友问得比较多的问题, solr最新版本下载地址: http://www.apache.org/dyn/closer.cgi/lucene/solr/ 1、准备环境 建立一个solr目录,把solr压缩包example目录下的内容复制

Java Websocket实例【服务端与客户端实现全双工通讯】

Java Websocket实例【服务端与客户端实现全双工通讯】 现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏 览器需要不断的向服务器发出请求,然而HTTP

Spring Roo 实站( 一 )部署安装 第一个示例程序

转自:http://blog.csdn.net/jun55xiu/article/details/9380213 一:安装 注:可以参与官网spring-roo: static.springsource.org/spring-roo/reference/html/intro.html#intro-exploring-sampleROO_OPTS http://stati

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体