1、问题说明
序号 | 基础软件 | 版本信息 |
---|---|---|
1 | 操作系统及版本 | redhat 8.8 |
2 | CPU架构 | x86 |
3 | GPU | 8*4090 |
本地化部署大模型满足AIChat使用,前期使用ollama方式部署的模型qwen72b在调用时一直返回为空白(AIChat需要大模型至少为 qwen2.5-72b-instrut),需要定位并给出解决方案。
...
经调研后发现ollama 下载的模型默认情况下都是经过量化的,比如我们通过如下命令下载qwen2.5-72b-instrut,但是其本质下载的是通过Q4方式量化后的模型,如果对模型精度要求不高则不会受太大影响,AIChat这类对模型要求比较高的则会出现类似的问题。
#ollama run qwen2.5:72b-instruct |
---|
经测试发现使下载了qwen2且经项目现场多次测试发现即使下载了qwen2.5:72b-instruct-fp16(ollama中量化程度最大的) 模型也不满足AIChat需求,且ollama部署方式的大模型在并发上性能不好,决定使用vllm方式进行本地大模型的部署。需求,ollama部署方式的大模型在并发上性能不好,项目中不推荐使用ollama的方式进行模型部署。
3、使用vllm方式部署本地大模型
使用vllm方式部署大模型,因为版本的原因遇到的坑还是比较多的,现把完整的部署文档整理如下:使用vllm方式部署大模型是目前业界比较通用的部署方案,但是因为版本的原因导致实际部署过程中遇到的坑还是比较多的,现把完整的部署文档整理如下,供项目参考:
环境名称 | 版本信息 |
---|---|
miniconda | python 3.9 pip 25 |
CUDA | 12.4 |
PyTorch | 2.6 |
flashinfer | 0.2.5+cu124torch2.6 |
Flash Attention | 2.7.4.post1 |
vllm | 0.8.2 |
注:以下方式为服务器可以联通网络情况下直接安装的,如果是没有联通情况下的服务器,可以考虑找一台一样的可以联网的服务器创建一个python虚拟环境,把相关组件进行下载后拷贝到不能联网服务器进行安装。
...
Miniconda3-py39_25.1.1-2-Linux-x86_64.sh
3.1.2 安装minconda
#mkdir /smartbi #cd /smartbi #wget https://repo.anaconda.com/miniconda/Miniconda3-py39_25.1.1-2-Linux-x86_64.sh #bash Miniconda3-py39_25.1.1-2-Linux-x86_64.sh -p /smartbi/conda_base |
---|
3.1.3. 配置conda环境变量
#echo 'export PATH="/smartbi/conda_base/bin:$PATH"' >> ~/.bashrc #source ~/.bashrc #bash |
---|
3.1.4. 查看环境
#python --version #pip --version |
---|
3.1.5. 添加清华pip源
#pip config list #pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple |
---|
3.2 安装CUDA(可选)
如果系统已经安装了CUDA则不用再重复安装了,本章节针对没有安装CUDA环境进行的,判断是否安装了CUDA,可以运行以下命令进行判断。
...
根据操作系统进行安装后会生成对应的安装命令执行即可。
3.2.3. 配置环境变量
#echo 'export LD_LIBRARY_PATH="/usr/local/cuda/lib"' >> ~/.bashrc #echo 'export PATH="$PATH:/usr/local/cuda/bin"' >> ~/.bashrc #source ~/.bashrc |
---|
3.2.4. 查看环境
#nvcc --version |
---|
3.3 关闭ECC(可选)
"ECC" 全称为 Error Checking and Correcting,表示是否开启错误检查和纠错技术,"0" 代表关闭,"1" 代表开启。
...
ECC好处很多,但是会占用部分显存,在某些情况下可以进行关闭以释放。
4090显卡,24g | 开启ECC,能使用最大显存 | 关闭ECC,能使用最大显存 |
---|---|---|
24576MB | 23028MB | 24564MB |
3.3.1. 查看ECC开启状态
#nvidia-smi -q -d ECC|grep -a2 "ECC Mode" |
---|
3.3.2. 关闭/开启ECC
#nvidia-smi -e 0 |
---|
3.3.3. 重启服务器
#reboot |
---|
3.3.4. 查看ECC开启状态
#nvidia-smi -q -d ECC|grep -a2 "ECC Mode" |
---|
3.4 安装vllm及相关组件(必选)
3.4.1. 创建python虚拟环境
#cd /smartbi #python3 -m venv vllm_env #source vllm_env/bin/activate |
---|
3.4.2. 安装pytorch
在https://pytorch.org/ 根据操作系统、CUDA12.4版本等相关信息找到对应的版本的pytorch的安装命令
#pip3 install torch torchvision torchaudio |
---|
3.4.3. 安装 flashinfer
在https://flashinfer.ai/whl/中根据cuda12.4版本和pytorch2.6版本找到flashinfer对应的版本
#pip install flashinfer-python -i https://flashinfer.ai/whl/cu124/torch2.6/ |
---|
3.4.4. 安装 Flash Attention(可选)
...
https://github.com/Dao-AILab/flash-attention/releases
#cd /smartbi #pip install flash_attn-2.7.4.post1+cu12torch2.6cxx11abiFALSE-cp39-cp39-linux_x86_64.whl |
---|
3.4.5. 安装 vllm
#pip install vllm |
---|
4、部署大模型
4.1. 下载模型
在阿里云魔塔社区找到需要的大模型(下方以Qwen2.5-0.5B-Instruct为例,现场实际下载的为Qwen2.5-72B-Instruct)
#pip install modelscope #测试模型 #modelscope download --model Qwen/Qwen2.5-0.5B-Instruct #现场实际下载模型 #modelscope download --model Qwen/Qwen2.5-72B-Instruct |
---|
默认会下载到 /root/.cache/modelscope/hub/models/
4.2. 配置VLLM环境变量
#echo 'export CUDA_VISIBLE_DEVICES=0' >> ~/.bashrc #echo 'export VLLM_USE_V1=0' >> ~/.bashrc #source ~/.bashrc |
---|
CUDA_VISIBLE_DEVICES 是一个环境变量,它用于控制哪些 GPU 设备对 CUDA 应用程序可见,通常需要把所有GPU都配置上,以上样例中只配置了1个做验证,比如有8个GPU配置成
...
VLLM_USE_V1 高版本vllm默认启用V1引擎,性能更好,但是对内存要求更高,如果需要运行高质量大模型需要配置VLLM_USE_V1=0,使用V0引擎,否则会导致无法启动模型。
4.3. 启动大模型
#python -m vllm.entrypoints.openai.api_server --model="/root/.cache/modelscope/hub/models/Qwen/Qwen2.5-0.5B-Instruct" --tensor-parallel-size 1 --gpu-memory-utilization 0.9 --max-model-len 30000 |
---|
--model="/root/.cache/modelscope/hub/models/Qwen/Qwen2.5-0.5B-Instruct" :指定模型路径
...
大模型部署完毕之后,相关参数如何调整才能确定为当前环境最优就需要使用压测手段进行测试验证,vllm自带压测脚本是目前比较通用的基准测试方案,下方为基于vllm自带测试脚本的压测方案。
5.1. 下载基准测试脚本
#cd /smartbi #git clone https://github.com/vllm-project/vllm.git |
---|
5.2. 下载测试数据集
#cd /smartbi |
---|
5.3. 基准测试
#pip install pandas #pip install datasets #pip install nvitop |
---|
5.3.1 GPU资源消耗监控
运行nvitop查看GPU资源消耗情况统计
5.3.2 基准测试
#python3 vllm/benchmarks/benchmark_serving.py --backend vllm --model="/root/.cache/modelscope/hub/models/Qwen/Qwen2.5-0.5B-Instruct" --dataset-name sharegpt --dataset-path /smartbi/ShareGPT_V3_unfiltered_cleaned_split.json --request-rate inf --num-prompts 10 |
---|
--num-prompts 10 指的是10并发,压测后会生成对应的测试结果,可以进行横向对比。
...