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-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集群生产环境 |
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。
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 本章知识体系
为了让你更直观地理解这一章的内容,我画了一张流程图。它展示了从镜像获取到模型挂载的完整链路:
这张图把整个流程串起来了。你从左边开始,先搞定镜像,再配置仓库,最后把模型挂载好。三条线最终汇聚到一起,你的推理环境就准备好了。
好了,这一章的内容就这些。镜像和模型准备好之后,下一章我们就可以把它们部署到Kubernetes上了。到时候我会讲如何编写Deployment和Service,让vLLM真正跑起来。
公众号:蓝海资料掘金营,微信deep3321