Docker+vLLM内网离线部署Qwen3教程,大模型入门到精通,收藏这篇就足够了!

vllm的优势

  • 环境隔离:Docker通过容器隔离技术为VLLM提供独立的运行环境,避免系统库版本冲突和依赖错误问题。
  • 便捷的跨平台迁移:使用Docker部署的VLLM容器可以轻松迁移到不同的服务器、数据中心或云平台上,大大降低了环境搭建和维护的成本。
  • 轻松扩展:借助容器化,VLLM可以轻松进行水平扩展,通过在多节点上运行多个容器实例实现高并发的推理服务。
  • 统一管理:容器化部署后,可以使用Docker Compose、Kubernetes等容器编排工具进行自动化管理,包括负载均衡、故障转移等操作,极大地简化了多实例部署的管理难度。

二、环境准备

  1. Nvidia显卡驱动、CUDA、nvidia-container安装
  2. Docker环境安装

注意:在进行VLLM容器化部署之前,需要确保已在服务器上安装了Docker 和 Nvidia显卡驱动、CUDA、nvidia-container。

三、vllm内网离线部署Qwen3-32B

系统环境

  • 操作系统:Ubuntu22.04
  • Docker:28.0.4
  • Docker-Compose:v2.34.0
  • 显卡驱动:550.144.03
  • CUDA:12.4
  • 显卡:NVIDIA RTX A5000 * 4

01 拉取vllm/vllm-openai镜像

vllm官方地址:https://github.com/vllm-project/vllm.git

在能联网的机器上拉取vllm/vllm-openai镜像,然后导出镜像,再导入到内网的服务器上,我导入的目录是 /data (根据个人习惯导入对应的目录即可),对应的操作命令如下:

# 1. docker拉取vllm/vllm-openai镜像, 20G 需要等一会。
docker pull vllm/vllm-openai:latest

# 2. 导出镜像为本地文件
docker save -o /data/vllm-openai.tar vllm/vllm-openai:latest

# 3. 将导出的镜像文件复制到内网服务器(例如使用scp)
# scp /data/vllm-openai.tar user@内网服务器IP:/data/

# 4. 在内网服务器上导入镜像
docker load -i /data/vllm-openai.tar

到这一步vllm/vllm-openai镜像就安装成功了。

02 下载Qwen/Qwen3-32B模型文件

常用模型下载地址

我是在魔塔社区下载的模型源文件:
下载命令:魔塔社区提供多种下载方式,我是用git下载的:

#Git下载
git lfs install
git clone https://www.modelscope.cn/qwen/Qwen3-32B.git

先在联网的电脑上把模型下载到本地,然后复制模型文件到内网的服务器的/data/目录中。

03 vllm内网部署Qwen/Qwen3-32B

直接运行下面命令即可将Qwen/Qwen3-32B模型运行起来,注意模型文件的路径需要换成自己的,模型的参数根据自己的显卡情况进行调参。

docker run -d --privileged --gpus all \
  --restart unless-stopped \
  --network host \
  -v /data/Qwen3-32B:/app/model \
  --shm-size 32G \
  --name vllm-qwen3 \
  vllm/vllm-openai:latest \
  --model /app/model \
  --served-model-name qwen3:32b \
  --dtype half \
  --kv-cache-dtype=fp8_e4m3 \
  --calculate-kv-scales \
  --port 8008 \
  --tensor-parallel-size 4 \
  --trust-remote-code \
  --max-model-len 32000 \
  --max-num-batched-tokens 64000 \
  --max-num-seqs 4 \
  --gpu-memory-utilization 0.95 \
  --api-key OPENWEBUl123 \
  --reasoning-parser deepseek_r1

运行成功后,查看容器日志(我这里用的是8008端口,APIKey用的是OPENWEBUl123,需要换成自己的):

docker logs -f vllm-qwen3

看见下面日志,则模型启动成功:

Uvicorn running on http://0.0.0.0:8008 (Press CTRL+C to quit)

docker run 命令中关于 vLLM 部署的各个参数:

容器运行参数:

  1. -d:让容器在后台运行,也就是以守护进程模式启动。
  2. --privileged:赋予容器近乎宿主机的 root 权限,这样容器才能访问特殊设备,比如 GPU。
  3. --gpus all:使容器能够使用宿主机上的所有 GPU 资源。
  4. --restart unless-stopped:设定容器的重启策略,除非手动停止,否则容器会在各种情况下自动重启。
  5. --network host:容器会直接使用宿主机的网络栈,这样容器内的服务可以通过宿主机的 IP 地址直接访问。
  6. -v /data/Qwen3-32B:/app/model:将宿主机的/data/Qwen3-32B目录挂载到容器内的/app/model目录,方便容器读取模型文件。
  7. --shm-size 32G:把容器的共享内存大小增加到 32GB,这对多进程间的高效通信很有帮助。
  8. --name vllm-qwen3:给运行的容器命名为vllm-qwen3,便于后续的管理和操作。

vLLM 服务参数:

  1. --model /app/model:指定容器内模型文件所在的路径,也就是之前挂载的目录。
  2. --served-model-name qwen3:32b:设置对外提供服务时模型的名称。
  3. --dtype half:将模型参数的数据类型设置为半精度浮点数(FP16),以此来减少内存占用。
  4. --kv-cache-dtype=fp8_e4m3:使用 E4M3 格式的 FP8 数据类型来存储键值缓存,进一步优化内存使用。
  5. --calculate-kv-scales:开启对键值缓存动态缩放因子的计算,有助于提升量化的精度。
  6. --port 8008:设置服务监听的端口为 8008。
  7. --tensor-parallel-size 4:将模型在 4 个 GPU 上进行张量并行处理,加快推理的速度。
  8. --trust-remote-code:允许执行模型附带的自定义代码,使用时需要注意安全问题。
  9. --max-model-len 32000:把模型支持的最大输入长度限制为16000 个 token。
  10. --max-num-batched-tokens 64000:设置批处理时允许的最大 token 数量为 32000,这影响着吞吐量。
  11. --max-num-seqs 8:限制同时处理的最大序列数为 8。
  12. --gpu-memory-utilization 0.95:将 GPU 内存的使用率上限设置为 95%,防止出现内存溢出的情况。
  13. --api-key OPENWEBUl123:设置 API 访问的密钥为OPENWEBUl123,用于身份验证。
  14. --enable-reasoning:开启推理功能,这可能涉及到多轮对话或者复杂问题的解决。
  15. --reasoning-parser deepseek_r1:指定使用 DeepSeek-R1 模型的推理解析器,用于处理特定格式的推理任务。

API调用示例:

vLLM 提供实现了 OpenAI Completions API, Chat API 等接口的 HTTP 调用服务,调用服务时,可使用官方 OpenAI Python 客户端或任意 HTTP 客户端:

from openai import OpenAI

client = OpenAI(
    api_key="OPENWEBUl123", # 替换为启动服务时设置的api-key
    base_url="http://localhost:8008/v1"
)

response = client.chat.completions.create(
    model="qwen3:32b", # 替换为启动服务时设置的served-model-name
    messages=[
        {"role": "user", "content": "你好,请介绍一下你自己。"}
    ],
    max_tokens=100
)

print(response.choices[0].message.content)

提示
vLLM支持部分OpenAI未包含的参数(如top_k),可通过在请求的extra_body参数中传递,例如:extra_body={"top_k": 50}

重要信息:
默认情况下,服务器会加载 Hugging Face 模型仓库中的generation_config.json文件(若存在)。这意味着某些采样参数的默认值可能被模型创建者推荐的配置覆盖。如需禁用此行为,请在启动服务时添加--generation-config vllm参数。

作者:Jeebiz  创建时间:2025-12-13 14:09
最后编辑:Jeebiz  更新时间:2025-12-13 14:09