4、vLLM官方镜像初探:拉取vLLM官方镜像、运行第一个vLLM容器、验证服务是否启动

好,咱们进入实战环节了。

前面几章我们把环境搭好了,概念也捋清了。现在该干点真活——拉一个vLLM官方镜像下来,跑个容器,看看它到底能不能动。

说实话,我第一次接触vLLM的时候,也是从这一步开始的。当时心里没底,怕拉不下来,怕跑不起来。结果呢?比想象中简单得多。你跟着我走一遍,十分钟就能搞定。

4.1 拉取vLLM官方镜像

先说说镜像仓库。vLLM官方镜像托管在Docker Hub和NVIDIA NGC上。我个人习惯用Docker Hub,因为不用额外登录,直接拉就行。

打开你的终端(SSH连上服务器),执行这条命令:

docker pull vllm/vllm-openai:latest

等等,别急着敲回车。我建议你指定一个具体版本,别用latest。为什么?

我在项目里吃过亏。有一次生产环境出了bug,想回滚到旧版本,结果latest已经更新了好几轮,根本不知道之前用的是哪个版本。从那以后,我所有镜像都指定版本号。

比如这样:

docker pull vllm/vllm-openai:v0.6.3

这个v0.6.3是我写文章时比较稳定的版本。你可以去vLLM的GitHub Release页面看看最新版是多少。

拉取过程大概长这样:

v0.6.3: Pulling from vllm/vllm-openai
a0d0a0d0a0d0: Pull complete
...
Digest: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Status: Downloaded newer image for vllm/vllm-openai:v0.6.3

看到"Downloaded newer image"就说明拉成功了。镜像大概4-6GB,取决于网络速度,等个几分钟很正常。

小技巧: 如果你在公司内网,记得配好Docker代理。不然拉镜像会卡在等待层数据那一步,干着急。

4.2 运行第一个vLLM容器

镜像拉下来了,接下来跑容器。

先别急着跑大模型。咱们先跑个轻量级的,验证一下容器本身能不能正常启动。

执行这条命令:

docker run --rm -it \
  --gpus all \
  -p 8000:8000 \
  vllm/vllm-openai:v0.6.3 \
  --help

解释一下参数:

  • --rm:容器退出后自动删除,省得你手动清理
  • -it:交互式终端,能看到实时输出
  • --gpus all:把宿主机所有GPU都挂载进容器
  • -p 8000:8000:把容器的8000端口映射到宿主机
  • --help:让vLLM打印帮助信息,不加载模型

如果看到一堆启动参数和选项说明,恭喜你——容器跑起来了,vLLM可执行文件没问题。

嗯,这里要注意:如果你没有NVIDIA GPU,或者没装NVIDIA Container Toolkit,容器会报错说找不到GPU。别慌,回去看看第三章,把驱动和toolkit装好。

4.3 加载一个小模型测试

光看帮助信息不过瘾。咱们真正加载一个模型试试。

选个小的。我推荐Qwen/Qwen2.5-0.5B-Instruct,只有5亿参数,显存占用不到2GB,跑起来飞快。

执行:

docker run --rm -it \
  --gpus all \
  -p 8000:8000 \
  -v /home/yourname/models:/models \
  vllm/vllm-openai:v0.6.3 \
  --model Qwen/Qwen2.5-0.5B-Instruct \
  --max-model-len 2048

这里多了个-v参数,把宿主机的/home/yourname/models目录挂载进容器。vLLM会把下载的模型缓存到这里,下次启动就不用重新下载了。

启动日志会显示:

INFO:     Started server process [1]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000

看到"Uvicorn running on http://0.0.0.0:8000"就说明服务启动成功了。

避坑指南: 我曾经遇到过一个问题——容器启动后一直卡在"Loading model"阶段,等了十分钟都没反应。后来发现是模型下载太慢,因为默认从Hugging Face下载,国内网络不稳定。解决方案:提前用huggingface-cli download把模型下到本地,再用-v挂载进去。

4.4 验证服务是否启动

服务跑起来了,怎么验证它真的在工作?

打开另一个终端窗口(或者用浏览器),访问这个地址:

curl http://localhost:8000/v1/models

如果返回类似这样的JSON:

{
  "object": "list",
  "data": [
    {
      "id": "Qwen/Qwen2.5-0.5B-Instruct",
      "object": "model",
      "created": 1700000000,
      "owned_by": "vllm"
    }
  ]
}

说明服务正常,模型已经加载好了。

再试试真正的推理请求:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen2.5-0.5B-Instruct",
    "messages": [
      {"role": "user", "content": "你好,请介绍一下你自己"}
    ]
  }'

等几秒钟,你会看到模型返回一段回答。虽然0.5B模型回答质量一般,但至少证明整个链路通了。

4.5 本章核心逻辑图

我把整个流程画了张图,方便你理解:

步骤1:拉取镜像 docker pull vllm/vllm-openai 步骤2:运行容器 docker run --gpus all -p 8000:8000 步骤3:加载模型 --model Qwen2.5-0.5B 步骤4:验证服务 curl /v1/models ✅ 服务启动成功 Uvicorn running on :8000 ❌ 启动失败 检查GPU/网络/模型 vLLM容器启动与验证流程

4.6 常见问题速查

问题现象 可能原因 解决办法
docker pull 卡住不动 网络问题,镜像太大 配置Docker代理,或使用国内镜像源
容器启动报错"CUDA error" GPU驱动版本不匹配 检查nvidia-smi输出,升级驱动
模型加载超时 模型下载慢,或显存不足 提前下载模型,或换更小的模型
curl请求返回502 服务还没完全启动 等日志出现"Uvicorn running"再请求

总结一下:

这一章我们干了三件事:拉镜像、跑容器、验证服务。说白了就是让vLLM在容器里转起来。你只要记住一个核心命令——docker run --gpus all -p 8000:8000 vllm/vllm-openai——剩下的都是锦上添花。

我个人建议,第一次跑的时候选个0.5B的小模型,别一上来就上70B。先确保流程走通,再慢慢升级。我在项目里见过太多人一上来就跑大模型,结果卡在显存不够上,排查半天才发现是模型选太大了。

专注资料整理