大语言模子llama-2是基于优化的Transformer架构,是Meta AI正式发布的开源大模子,Chinese-llama-2-7b由LinkSoul.AI团队基于llama-2发布的开源可商用的中文大语言模子,其规模达到了70亿参数。Chinese-llama-2-7b在数据量1000万的中英文SFT数据集上练习得到,输入格式严格遵照llama-2-chat格式,兼容适配全部针对原版llama-2-chat模子的优化。
前排提示,文末有大模子AGI-CSDN独家资料包哦!
1
概念
一样平常来说,参数目越大的模子效果会更好,但相对应的模子运行时产生的费用和微调练习所需要的数据量都会更多。
大语言模子llama-2-7b推理过程如下:
数据准备:下载llama-2-7b-hf模子,可以使用Hugging Face Transformers或PyTorch等库加载模子;准备要输入到模子中的数据,以及tokenizer对文本进行编码,以及将编码后的文本转换为模子所需的张量格式。
模子转换:在练习完成后,将练习时保存好的微调模子文件(Checkpoint Model)转换为可以直接推理的二进制格式文件.
模子推理:模子推理中模子会根据输入的文本生成相应的输出文本。
以上是大语言模子llama-2-7b的推理过程,这个过程需要大量的盘算资源和时间。
2
模子下载
- 模子下载:
在HuggingFace中心(https://huggingface.co/meta-llama)模子列表页中可以看到多个来自差别开源社区的主流模子。在展示中名称中带有hf的模子已转换为Hugging Face检查点,因此无需进一步转换,我们将使用llama-2-7b-hf模子。
图1.1 huggingface模子列表
- # 下载 llama-2-7b-hf模型`` ``git clone https://huggingface.co/meta-llama/Llama-2-7b-hf
复制代码
- tokenizer下载
tokenizer需要下载上述对应模子版本的tokenizer.model,也可以从Hugging Face模子存储库中下载并使用tokenizer。
- # 下载 tokenizer`` ``https://github.com/huggingface/tokenizers.git
复制代码 tokenizer主要完成的工作:
1.分词:将文本数据分词为字或者字符;
2.构建词典:根据数据集分词的结果,构建词典。(这一步并不绝对,如果接纳预练习词向量,词典映射要根据词向量文件进行处置惩罚)。
3.数据转换:根据构建好的词典,将分词处置惩罚后的数据做映射,将文本序列转换为数字序列。数字序列还要变成符合模子需求的tensor格式。
4.数据填充与截断:在以batch输入到模子的方式中,需要对过短的数据进行填充,过长的数据进行截断,保证数据长度符合模子能接受的范围,同时batch内的数据维度巨细一致,否则无法成批次变成tensor张量。
- 模子转换
模子转换指的是将练习时保存好的微调模子文件(Checkpoint Model)转换为可以直接推理的二进制格式文件,以便可以或许直接用于推理。这种二进制格式通常是为了加快推理而计划的,它大概包括模子的优化版本、淘汰冗余数据、固定模子结构等操作。
使用llama-2-7b-hf模子无需进行模子转换,当选择llama-2-7b模子需要将llama-2-7b模子转换为HuggingFace 格式。
使用huggingface transformers提供的脚本convert_llama_weights_to_hf.py,将原版llama模子转换为HuggingFace格式。
同时需要将原版llama-2-7b的tokenizer.model放在–input_dir指定的目录,别的文件放在KaTeX parse error: Expected '}', got 'EOF' at end of input: {input\_dir)/{model_size)下。实行以下命令后,–output_dir中将存放转换好的hf版权重。
注意:transformers版本必须是4.31.0或以上版本,否则会报错。
- # 下载 transformers`` ``git clone gitegithub.com:huggingface/transformers.git`` ` ` ``# 进入到脚本所在目录下`` ``cd transformers/src/transformers/models/llama`` ` ` ``#运行转换脚本`` ``python convert_llama_weights_to_hf.py`` ``--input_dir /llama-2-7b \`` ``--model_size 7B \`` ``--output_dir /users/tgl/Downloads/llama_models/7B_hf/
复制代码 3
模子推理
vLLM是是伯克利大学LMSYS组织开源的大语言模子高速推理框架,一个基于剪枝技术的大模子推理加快工具,通已往除模子中的冗余参数,极大地提升实时场景下的语言模子服务的吞吐与内存使用效率,可以在保证模子性能的同时显著淘汰推理时间。vLLM是一个快速且易于使用的库,用于LLM推理和服务,可以和HuggingFace无缝集成。
图2.1 模子推理流程
vLLM的架构中它的核心组件是LLMEngine类,外层接口类LLM和AsyncLLMEngine都是对LLMEngine的封装。LLMEngine有两个核心组件,分别是负责哀求调度的Scheduler和负责模子推理的Worker,前者从等待队列中选择接下来要处置惩罚的哀求,后者负责使用模子对被调度的哀求进行推理。
图2.2 vllm架构
LLMEngine是整个系统的入口,它接收输入哀求并实行推理过程。在初始化阶段,LLMEngine会调用Worker中的CacheEngine来初始化GPU和CPU内存,并盘算可用的block数目。每个输入哀求会构造一个SequenceGroup,并将其保存到Scheduler中进行进一步的调度和处置惩罚。通过多次实行step操作,LLMEngine会完成全部输入哀求对应的SequenceGroup的生成。
Scheduler负责调度和管理待处置惩罚的SequenceGroup。它维护着三个队列:waiting、running和swapped。当一个SequenceGroup被添加到系统中时,它会被放入waiting队列中。Scheduler会根据调度计谋从差别队列中选择SequenceGroup进行处置惩罚,并维护队列之间的状态。当一个SequenceGroup的推理过程新增了token时,Scheduler会更新该SequenceGroup的状态。
BlockSpaceManager负责维护Cache block和GPU/CPU内存之间的映射关系。它记录了每个Cache block在GPU显存或CPU内存中的物理地点。当一个SequenceGroup被加入Scheduler时,并没有分配具体的Cache block空间。在首次进入running阶段时,SequenceGroup会向BlockSpaceManager申请可用的block空间,并进行相应的分配和管理。
Worker负责缓存更新和LLM推理的实行。它起首实行缓存更新操作,然后准备输入token序列。通过调用LLM模子进行推理,Worker会生成新的token,并将其输出结果更新到对应的SequenceGroup中。最后,多次实行step操作,直到全部输入哀求对应的SequenceGroup都完成生成。
CacheEngine作为Worker的一部门,负责具体的缓存操作。它实行缓存的换入、换出、拷贝等操作,并与BlockSpaceManager协同工作,管理GPU和CPU内存之间的数据传输。
制作镜像
通过dockerfile文件制作环境镜像,可以在差别的云主机上轻松地复制和部署模子练习环境,从而确保全部依赖项和设置都是正确的、进步模子推理的效率。 vLLM框架环境镜像制作dockerfile文件如下:
- # dockerfile``FROM nvidia/cuda:12.1.0-devel-ubuntu22.04 AS dev`` ``RUN apt-get update -y \`` ``&& apt-get install -y python3-pip git`` ``RUN ldconfig /usr/local/cuda-12.1/compat/`` `` ``WORKDIR /workspace`` `` ``COPY requirements-common.txt requirements-common.txt`` ``COPY requirements-cuda.txt requirements-cuda.txt`` ``RUN --mount=type=cache,target=/root/.cache/pip \`` ``pip install -r requirements-cuda.txt`` ` ` ``COPY requirements-dev.txt requirements-dev.txt`` ``RUN --mount=type=cache,target=/root/.cache/pip \`` ``pip install -r requirements-dev.txt`` ` ` ``ARG torch_cuda_arch_list='7.0 7.5 8.0 8.6 8.9 9.0+PTX'`` ``ENV TORCH_CUDA_ARCH_LIST=${torch_cuda_arch_list}
复制代码 快速部署
模子推理指的是运行转换后的二进制格式文件,接收新的、未见过的数据样本,根据其已学习到的特性和模式,生成猜测结果。
下面我们就用yaml文件创建模子推理的服务,起首创建一个目录用来存放模子推理的yaml文件。
- mkdir -p /root/yaml/inference`` ``cd /root/yaml/inference
复制代码- apiVersion: v1``kind: InferenceService``metadata:``name: vllm #实例名称``namespace: aiops-system #命名空间``spec:` `predictor:` `containers:` `- args:` `- --host` `- "0.0.0.0"`` - --port` `- "8080" #推理服务的端口号` `- --model` `- /mnt/models/data/out_put/ #模型转换后的路径` `command:` `- python3` `- -m` `- vllm.entrypoints.api_server` `env:` `- name: STORAGE_URI` `value: pvc://is-pvc-1` `image: vllmserver:latest` `name: kserve-container` `resources:` `limits:` `cpu: "4"` `memory: 20Gi` `nvidia.com/gpu: "4"` `requests:` `cpu: "2"` `memory: 20Gi` `nvidia.com/gpu: "4"
复制代码 通过vllm.yaml文件创建模子推理任务,相关联的pod会对应一起生成,在master节点上实行创建pod命令。
- # k8s创建InferenceService`` ``kubectl create -f vllm.yaml
复制代码 之后就看到pod乐成启动了,检察已创建的pod,以及pod的状态信息。
- # 查看pod`` ``kubectl get pod -n aiops-system
复制代码 图2.3 推理服务pod的状态信息
推理服务启动后检察 pod的ip。
- # 查看pod的ip地址`` ``kubectl get pod vllm-predictor-674d78bdc9-m24d4 -n aiops-system -o wide
复制代码 图2.4 推理服务pod的ip信息
模子推理问答的命令。
- # prompt输入到模型中的数据`` ``curl -X POST -H "Content-Type: application/json" -d '{"prompt":"My name is"}' http://172.19.***.**:8080/generate
复制代码 图2.5 推理服务问答
3
总结
综上所述,llama-2-7b大语言模子推理服务的实战应用展示了其在天然语言处置惩罚领域的强盛实力和应用潜力。通过不停的技术优化和服务改进,我们可以进一步推动天然语言处置惩罚技术的发展,为用户提供更好的体验和代价。未来,我们可以期待更先进的模子、更智能的推理服务以及更广泛的应用场景。
读者福利:如果各人对大模子感兴趣,这套大模子学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模子是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划勤学习计划和方向。
包括:大模子学习线路汇总、学习阶段,大模子实战案例,大模子学习视频,人工智能、机器学习、大模子册本PDF。带你从零基础系统性的学好大模子!
|