在docker中使用vLLM部署大模型_docker部署vllm
目录
- 首次在docker中安装vllm
- 从已有镜像加载vllm
- 使用vllm部署不同量化方式的大模型
-
- QwQ-32B-AWQ
- QwQ-32B-GPTQ-Int4
- QwQ-32B-GPTQ-Int8
- 最终测试结果
- 使用vllm部署多模态大模型
首次在docker中安装vllm
- 首先用docker启动一个容器,需求是将模型所在目录挂在到容器某个路径下,设置gpu的使用数量,设置端口
docker run -dit --gpus all --ipc=host --name vLLM -p 3001:80 -v /mnt/d0/checkpoints:/models python:3.11
- 在新建的容器内部安装vllm
#进入新建容器内部docker exec -it vLLM bash#安装vllmpip install vllm==0.7.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
- 启动VLLM服务
vllm serve /models/qwq-32b --host 0.0.0.0 --port 80 --tensor-parallel-size 4 --gpu-memory-utilization 0.9 --max-num-seqs 80 --max-model-len 65536
- 检查VLLM服务是否启动成功
curl -X POST \"10.20.25.250:3001/v1/chat/completions\" \\ -H \"Content-Type: application/json\" \\ -d \'{ \"model\": \"/models/qwq-32b\", \"messages\": [ { \"role\": \"user\", \"content\": \"介绍一下你自己\" } ], \"temperature\": 0.3, \"stream\": false }\'
注意,如果在启服务的时候遇到了下面这个错误,需要进入到模型所在的文件夹,找到config.json,修改其中的max_position_embeddings字段和你的max_model_len匹配
从已有镜像加载vllm
如果之前在别的服务器上安装过vllm就可以直接打包移植,就不需要再安装了
- 从已有的tar加载docker镜像,里面已经安装好了vllm
docker load -i vllm.tar
- 加载好镜像之后,采用下面的命令启动一个容器,可以将宿主机有模型的路径挂载到容器中的models下
docker run -dit --gpus \'\"device=4,5,6,7\"\' --ipc=host --name vLLM -p 3001:80 -v /home/zhangzichao/checkpoints:/models vllm:1.0
- 启动容器之后,直接从vscode中进入容器内部,也可以在终端执行下面的命令
docker exec -it vLLM bash
- 然后启动vllm服务
vllm serve /models/qwq-32b --host 0.0.0.0 --port 80 --tensor-parallel-size 4 --gpu-memory-utilization 0.9 --max-num-seqs 80 --max-model-len 65536
使用vllm部署不同量化方式的大模型
QwQ-32B-AWQ
官方模型地址
用的是10.20.25.250这台服务器,找到一个安装了modelscope的conda环境,然后进入checkpoints文件夹,执行下载命令
modelscope download --model Qwen/QwQ-32B-AWQ --local_dir ./QwQ-32B-AWQ
然后进入vllm的容器中,启动大模型服务
vllm serve /models/QwQ-32B-AWQ --host 0.0.0.0 --port 80 --tensor-parallel-size 4 --gpu-memory-utilization 0.9 --max-num-seqs 128 --max-model-len 65536
测试结果
QwQ-32B-GPTQ-Int4
由于GPTQ的量化方式官方没有,所以用的是第三方量化模型 第三方模型地址
找到一个安装了modelscope的conda环境,进入checkpoints文件夹,执行下载命令
modelscope download --model tclf90/qwq-32b-gptq-int4 --local_dir ./qwq-32b-gptq-int4
然后进入vllm的容器中,启动大模型服务
vllm serve /models/qwq-32b-gptq-int4 --host 0.0.0.0 --port 80 --tensor-parallel-size 4 --gpu-memory-utilization 0.9 --max-num-seqs 256 --max-model-len 131072
QwQ-32B-GPTQ-Int8
第三方模型地址
找到一个安装了modelscope的conda环境,进入checkpoints文件夹,执行下载命令
modelscope download --model tclf90/qwq-32b-gptq-int8 --local_dir ./qwq-32b-gptq-int8
然后进入vllm的容器中,启动大模型服务
vllm serve /models/qwq-32b-gptq-int8 --host 0.0.0.0 --port 80 --tensor-parallel-size 4 --gpu-memory-utilization 0.8 --max-num-seqs 256 --max-model-len 131072
最终测试结果
使用vllm部署多模态大模型
从modelscope上下载模型
modelscope download --model Qwen/Qwen2.5-VL-3B-Instruct --local_dir ./Qwen2.5-VL-3B-Instruct
有了模型之后就可以在docker里启动服务了
vllm serve /models/Qwen2.5-VL-3B-Instruct --host 0.0.0.0 --port 80 --tensor-parallel-size 4 --gpu-memory-utilization 0.9 --max-num-seqs 128 --max-model-len 65536 --limit-mm-per-prompt image=5
这里注意,–limit-mm-per-prompt参数尽量加上,如果不加的话,一个对话里最多只能有一张图片,多了就会报错400,这里我随便设成了5,一个对话中对于5张图片就会报400
启动之后就可以进行测试了,如果你使用网上的图片,curl需要这样写
curl -X POST \"10.20.25.250:3001/v1/chat/completions\" -H \"Content-Type: application/json\" -d \'{ \"model\": \"/models/Qwen2.5-VL-3B-Instruct\", \"messages\": [ { \"role\": \"user\", \"content\":[ {\"type\": \"text\", \"text\": \"这张图像是什么动物?\"}, {\"type\": \"image_url\",\"image_url\": {\"url\": \"https://n.sinaimg.cn/sinacn15/560/w1080h1080/20180513/9ad1-hamfahx6081487.jpg\"}}] } ], \"temperature\": 0.3, \"stream\": false }\'
如果你想用本地的图片进行测试,首先需要转成base64编码,图片转base64这个网站就可以实现,直接把转换内容替换到上面 “url” 的值就可以了,因为那个编码太长了,贴一张图片作为例子