做网站视频的赚钱吗,广告公司名字,哈尔滨做网站需要多少钱,在国外做热情网站的风险1. 引言
最近在部署Qwen模型时#xff0c;文档上有提到强烈建议用vLLM来部署模型#xff0c;按照公开的性能测试数据#xff0c;用vLLM部署Qwen模型的文本推理速度要比transformers部署快3~4倍。带着这个好奇就开始安装尝试#xff0c;但试下来这个安装过程并没有那么顺利…1. 引言
最近在部署Qwen模型时文档上有提到强烈建议用vLLM来部署模型按照公开的性能测试数据用vLLM部署Qwen模型的文本推理速度要比transformers部署快3~4倍。带着这个好奇就开始安装尝试但试下来这个安装过程并没有那么顺利便有了此文来记录整个环境搭建的过程。 vLLM是伯克利大学LMSYS组织开源的大语言模型高速推理框架利用了全新的注意力算法「PagedAttention」有效地管理Attention中的K和V。在吞吐量方面vLLM的性能比HuggingFace Transformers(HF)高出 24 倍文本生成推理TGI高出3.5倍。 2. vLLM环境要求
vLLM的安装指导说明上对python和cuda有着明确的版本要求如下面截图所示 vLLM安装指导地址https://docs.vllm.ai/en/latest/getting_started/installation.html 首先是python由于前面在不知情的情况下已经安装了最新的python3.12版本那就只能新创建一个3.10的虚拟环境。 conda及虚拟环境的创建请参考conda环境搭建笔记 其次是cudavLLM是拿12.1版本编译的但本地机器装的cuda为12.0尝试过向下兼容的方式后无果最终选择按照官方建议的cuda-12.1来重新安装这意味着不仅仅是vLLM机器上已经安装的pytorch、cuda都需要重新安装。 安装说明上有提供cuda-11.8的版本正好之前pytorch安装时选择的也是cuda-11.8所以尝试过取巧直接安装11.8但最终没有成功报一些cuda.C的一些.so动态库找不到具体信息未能保留下来就放弃了。 由于cuda是pytorch和vLLM的基础依赖首先需要重装cuda。
3. CUDA安装
3.1 下载安装包
下载网址https://developer.nvidia.com/cuda-toolkit-archive
首先选择自己要安装的版本12.1 逐个勾选自己的环境信息勾选完后下面会自动出现与所选环境匹配的安装指令 先复制上面的wget指令下载文件文件有4G需要下一段时间。
3.2 安装
下载完后执行如下命令开始安装。
sudo sh cuda_12.1.0_530.30.02_linux.run安装程序正式开始复制文件之前可能会有两个小插曲具体与本地环境有关旧环境兼容性检测和GPU是否在使用的检查。
3.2.1 旧环境兼容性检测
刚启动安装时会执行对本地旧环境的兼容性检测如果发现本地机器的nvidia驱动与要安装的cuda版本不一致安装程序会强烈建议你将已经存在的nvidia驱动卸载命令如下面所示。
apt-get remove --purge nvidia-driver-530
apt-get autoremove需要注意的是此命令的用途它会将机器上已经存在的nvidia驱动删除个人猜测目的可能是为了保持cuda与的nvidia驱动的版本一致。 这里尝试过不卸载但没有成功cuda与nvidia版本不一致可能会导致驱动无法工作运行nvidia-smi命令报如下截图中错误最后还是乖乖按照指示进行了删除操作。
3.2.2 GPU是否在使用的检查
安装程序会检测GPU是否在使用中如果在使用中会提示退出所有GPU之后才能继续安装。
如果此时nvidia-smi命令可用可以从命令输出结果中看到哪个进程在使用GPU: 查到被占用的GPU序号上面截图中是0则可以用如下命令来释放GPU:
sudo nvidia-smi --gpu-reset -i 0GPU 00000000:3E:00.0 was successfully reset.
All done.上面的方法是基于nvidia-smi存在的情况下但是如果前面已经卸载了nvidia驱动程序nvidia-smi命令也会被删除那用什么方法查看GPU的状态呢
用fuser命令能够列出哪些进程在使用GPU然后使用kill命令将这些进程结束就行。
# 查找所有使用GPU的进程
sudo fuser -v /dev/nvidia*
sudo kill -9 PID3.2.3 主流程安装
之后会提示你去勾选要安装的功能清单用默认就好。 安装过程中如果前面卸载了nvidia驱动程序此时会自动安装与cuda版本配套的nvidia驱动程序而cuda则会被安装到/usr/local/cuda-12.1目录下安装完后的磁盘位置如下图所示
3.3 配置环境变量
将cuda的库和命令添加到环境变量中。
echo export PATH/usr/local/cuda-12.1/bin:$PATH ~/.bashrc
echo export LD_LIBRARY_PATH/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH ~/.bashrc
source ~/.bashrc验证cuda安装结果
nvcc --versionnvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Tue_Feb__7_19:32:13_PST_2023
Cuda compilation tools, release 12.1, V12.1.66
Build cuda_12.1.r12.1/compiler.32415258_0验证nvidia驱动程序安装结果 可以看到这里显示的cuda version和上面nvcc命令显示的版本是一致的。 4. 重装pytorch
之前pytorch是基于cuda-11.8安装的当上面cuda版本变更后需要重新选择能适配cuda-12.1的pytorch版本重新安装。 注pytorch一定要先于vllm来安装因为vllm安装时会检测本地机器的cuda和pytorch是否满足版本要求如果没有匹配的依赖vllm是无法安装的。 具体过程这里就不细列详情见 condapytorch环境搭建笔记
5. vllm
5.1 安装vllm
前面的cuda和pytorch都使用官方建议的版本后安装vllm的命令就和正常库的安装命令一样但是由于下载的软件包很多这个过程也会比较长。
pip install vllm安装完成后如下图所示 验证vllm的安装结果:
!pip show vllmWARNING: Ignoring invalid distribution -orch (/data2/anaconda3/envs/python3_10/lib/python3.10/site-packages)
Name: vllm
Version: 0.5.3.post1
Summary: A high-throughput and memory-efficient inference and serving engine for LLMs
Home-page: https://github.com/vllm-project/vllm
Author: vLLM Team
Author-email:
License: Apache 2.0
Location: /data2/anaconda3/envs/python3_10/lib/python3.10/site-packages
Requires: aiohttp, cmake, fastapi, filelock, lm-format-enforcer, ninja, numpy, nvidia-ml-py, openai, outlines, pillow, prometheus-client, prometheus-fastapi-instrumentator, psutil, py-cpuinfo, pydantic, pyzmq, ray, requests, sentencepiece, tiktoken, tokenizers, torch, torchvision, tqdm, transformers, typing-extensions, uvicorn, vllm-flash-attn, xformers
Required-by: 5.2 验证vllm功能
在jupyter里贴一段加载模型的代码尝试将本地下载好的模型Load进来
from transformers import AutoTokenizer
from vllm import LLM, SamplingParamsmodel_dir /data2/anti_fraud/models/modelscope/hub/Qwen/Qwen2-0___5B-Instruct
# Initialize the tokenizer
tokenizer AutoTokenizer.from_pretrained(model_dir)# max_tokens is for the maximum length for generation.
sampling_params SamplingParams(temperature0.7, top_p0.8, repetition_penalty1.05, max_tokens512)# Input the model name or path. Can be GPTQ or AWQ models.
llm LLM(modelmodel_dir)再贴一段代码来测试模型是否能正常推理
# Prepare your prompts
prompt Tell me something about large language models.
messages [{role: system, content: You are a helpful assistant.},{role: user, content: prompt}
]
text tokenizer.apply_chat_template(messages,tokenizeFalse,add_generation_promptTrue
)# generate outputs
outputs llm.generate([text], sampling_params)# Print the outputs.
for output in outputs:prompt output.promptgenerated_text output.outputs[0].textprint(fPrompt: {prompt!r}, Generated text: {generated_text!r})生成的文本如下
参考资料
condapytorch环境搭建笔记cuda-tool 官方下载地址vllm部署Qwen说明文档