4、vLLM镜像与模型准备:vLLM Docker镜像获取、模型下载与挂载策略(HuggingFace/本地)、镜像仓库配置(Harbor/Docker Hub)

好,咱们进入第四章。镜像和模型,说白了就是vLLM推理环境的“食材”。

你想想看,光有Kubernetes这个“厨房”不行,还得有锅(镜像)和菜(模型)。这一章,我就带你搞定这两样东西。我个人习惯先把镜像拉下来,再搞模型,这样心里有底。

4.1 vLLM Docker镜像获取

vLLM官方在Docker Hub上维护了镜像。我建议你直接拉官方版本,别自己从头build,除非你有特殊需求。

拉取命令很简单:

docker pull vllm/vllm-openai:latest

嗯,这里要注意。latest标签虽然方便,但在生产环境里我吃过亏。有一次我部署到一半,发现latest版本更新了,跟我的模型不兼容。所以,我建议你指定版本号:

docker pull vllm/vllm-openai:v0.6.0
我的小习惯: 每次上线前,我都会在本地先跑一下这个镜像,确认它能正常加载模型。别问我为什么,问就是被坑过。

如果你在离线环境,那就得先把镜像导出成tar包,再导入到目标机器。命令如下:

# 导出
docker save vllm/vllm-openai:v0.6.0 -o vllm-image.tar

# 导入
docker load -i vllm-image.tar

4.2 模型下载与挂载策略

模型是推理的核心。vLLM支持从HuggingFace直接拉模型,也支持加载本地模型。我个人更倾向于本地挂载,因为生产环境网络不稳定,你想想看,万一推理到一半网络断了,那可就尴尬了。

4.2.1 从HuggingFace下载模型

如果你网络好,可以直接用vLLM的镜像拉模型。启动容器时指定模型ID就行:

docker run --gpus all \
  -v /path/to/cache:/root/.cache/huggingface \
  -p 8000:8000 \
  vllm/vllm-openai:v0.6.0 \
  --model meta-llama/Llama-2-7b-chat-hf

这里有个关键点:-v /path/to/cache:/root/.cache/huggingface。这个挂载卷是用来缓存模型的。我曾经没加这个参数,结果每次重启容器都要重新下载模型,几十G的模型下载了三次,气得我差点砸键盘。

避坑指南: 我曾经在HuggingFace上下载模型时,遇到认证问题。记得先登录:huggingface-cli login,然后输入你的token。否则有些模型会拒绝访问。

4.2.2 本地模型挂载

对于生产环境,我强烈建议你把模型下载到本地,然后用挂载的方式加载。这样速度快,还稳定。

首先,把模型下载到宿主机的一个目录:

# 假设模型放在 /data/models/llama2-7b
mkdir -p /data/models/llama2-7b
cd /data/models/llama2-7b
# 用 huggingface-cli 下载
huggingface-cli download meta-llama/Llama-2-7b-chat-hf --local-dir ./

然后,启动容器时挂载这个目录:

docker run --gpus all \
  -v /data/models/llama2-7b:/models/llama2-7b \
  -p 8000:8000 \
  vllm/vllm-openai:v0.6.0 \
  --model /models/llama2-7b

你看,这样模型就在本地了,容器启动速度飞快。我一般在Kubernetes里也用这种策略,用hostPath或者PVC挂载模型。

4.2.3 模型挂载策略对比

策略 优点 缺点 适用场景
HuggingFace直接拉取 简单,无需提前下载 依赖网络,启动慢 开发测试、网络好的环境
本地挂载(hostPath) 速度快,稳定 需要提前下载,管理麻烦 生产环境、离线环境
PVC持久卷 可迁移,支持多节点 配置复杂,需要存储后端 Kubernetes集群生产环境
我的建议: 如果你在Kubernetes里跑,用PVC挂载模型是最优雅的方式。我之前的项目里,用NFS做PVC后端,模型放在共享存储上,所有节点都能访问,省心不少。

4.3 镜像仓库配置(Harbor/Docker Hub)

镜像拉下来之后,你得有个地方存它。Docker Hub是公共的,Harbor是私有的。我建议你搭建一个私有仓库,尤其是团队协作时。

4.3.1 配置Docker Hub

Docker Hub默认是公开的。如果你要拉私有镜像,得先登录:

docker login
# 输入你的用户名和密码

在Kubernetes里,你需要创建一个Secret来存储认证信息:

kubectl create secret docker-registry regcred \
  --docker-server=https://index.docker.io/v1/ \
  --docker-username=你的用户名 \
  --docker-password=你的密码 \
  --docker-email=你的邮箱

然后在Pod的YAML里引用这个Secret:

spec:
  imagePullSecrets:
  - name: regcred

4.3.2 搭建Harbor私有仓库

Harbor是我最喜欢的私有仓库。它支持镜像复制、漏洞扫描,还有Web UI。搭建起来也不复杂:

# 下载Harbor离线安装包
wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz
tar -xzf harbor-offline-installer-v2.10.0.tgz
cd harbor

# 修改配置文件
cp harbor.yml.tmpl harbor.yml
# 修改 hostname 和 harbor_admin_password

# 安装
./install.sh

安装完成后,访问 http://你的IP:80,默认账号密码是 admin/Harbor12345

小技巧: 我习惯在Harbor里创建项目,比如叫 vllm-images,然后把镜像推送到这个项目下。这样管理起来清晰。

推送镜像到Harbor:

# 先给镜像打标签
docker tag vllm/vllm-openai:v0.6.0 你的harbor地址/vllm-images/vllm-openai:v0.6.0

# 推送
docker push 你的harbor地址/vllm-images/vllm-openai:v0.6.0

在Kubernetes里拉取Harbor镜像时,同样需要创建Secret:

kubectl create secret docker-registry harbor-regcred \
  --docker-server=你的harbor地址 \
  --docker-username=admin \
  --docker-password=你的密码

4.4 本章知识体系

为了让你更直观地理解这一章的内容,我画了一张流程图。它展示了从镜像获取到模型挂载的完整链路:

vLLM镜像与模型准备流程 1. 获取vLLM镜像 2. 配置镜像仓库 3. 下载模型 获取方式 • Docker Hub拉取 • 离线tar包导入 • 指定版本标签 仓库类型 • Docker Hub(公共) • Harbor(私有) • 配置Secret认证 挂载策略 • HuggingFace直拉 • 本地hostPath挂载 • PVC持久卷挂载 Kubernetes vLLM推理环境就绪 镜像 + 模型 + 仓库配置 = 可部署的推理环境

这张图把整个流程串起来了。你从左边开始,先搞定镜像,再配置仓库,最后把模型挂载好。三条线最终汇聚到一起,你的推理环境就准备好了。

核心要点: 镜像和模型是vLLM推理的基石。镜像决定了运行环境,模型决定了推理能力。两者缺一不可。

好了,这一章的内容就这些。镜像和模型准备好之后,下一章我们就可以把它们部署到Kubernetes上了。到时候我会讲如何编写Deployment和Service,让vLLM真正跑起来。


公众号:蓝海资料掘金营,微信deep3321