在此之前,我们已成功利用Docker与Ollama框架,在内网环境中部署了Qwen2模型。下面我们再来看一下使用Docker与vLLM框架部署Qwen2模型。
准备vLLM镜像
在一台具备网络环境的机器上执行以下命令,拉取vLLM的镜像:
# 官方镜像
docker pull vllm/vllm-openai:latest
# 如果因为墙的原因,以上命令拉取不到,可以去看看下面这些仓库
Docker仓库:https://docker.1panel.live ✅网友自建
Docker仓库:https://docker.agsv.top ✅网友自建
Docker仓库:https://docker.agsvpt.work ✅网友自建
Docker仓库:https://dockerpull.com ✅网友自建
Docker仓库:https://dockerproxy.cn ✅网友自建
下载Qwen2-7B-Instruct模型
我这里下载的是Qwen2-7B-Instruct-GPTQ-Int4的模型。下载地址:
https://huggingface.co/Qwen/Qwen2-7B-Instruct-GPTQ-Int4
编写Dockerfile
我们将Qwen2模型打包上传到服务器,然后编写Dockerfile:
# 基础镜像
FROM vllm/vllm-openai:latest
# 暴露端口
EXPOSE 8000
# 将模型上传到基础镜像
ADD Qwen2-7B-Instruct-GPTQ-Int4 /home/Qwen2-7B-Instruct-GPTQ-Int4
# 容器启动要执行的命令,注意这里一定要是python3
ENTRYPOINT ["python3","-m","vllm.entrypoints.openai.api_server","--served-model-name","Qwen2-7B-Instruct-GPTQ","--model","/home/Qwen2-7B-Instruct-GPTQ-Int4"]
构建镜像
执行docker build
命令,构建docker镜像:
docker build -t vllm_qwen2_7b:1.0 -f Dockerfile .
启动容器
执行以下命令,启动docker容器:
docker run -itd --runtime nvidia --gpus all --name vllm_qwen2 --env "HUGGING_FACE_HUB_TOKEN=<secret>" -p 8000:8000 vllm_qwen2_7b:1.0 --max-model-len 8129
经过启动、测试,模型运行没问题。
然后,我们就可以将镜像导出,提供给内网环境使用了:
# 镜像导出
docker save -o vllm_qwen2.tar vllm_qwen2_7b:1.0
# 镜像导入
docker load -i vllm_qwen2.tar
问题解决
问题1、No CUDA GPUs are available
解决方法:
(1)检查是否正确安装了CUDA驱动,执行nvidia-smi
可查看。
(2)docker run命令中没有添加--runtime nvidia --gpus all。
问题2:unknown or invalid runtime name: nvidia
解决方法:
当Docker容器需要使用GPU时,需要配置Docker的default-runtime
为nvidia
,然后重启Docker。
{
"runtimes":{
"nvidia":{
"path":"nvidia-container-runtime",
"runtimeArgs":[]
}
},
"default-runtime":"nvidia"
}
如果是Windows版Docker,需要在Docker Desktop
中点击右上角的Setting
,然后点击Docker Engine
,在这里设置完上述配置后,点击restart
。
问题3、Try increasing gpu_memory_utilization or decreasing max_model_len when initializing the engine.
解决方法:
因为GPU内存限制而需要调整模型的最大序列长度。在docker run
命令最后加--max-model-len
限制。
--max-model-len 8129