vLLM 模型存储:NVMe、块存储与对象存储配置
说明如何把模型放在本地 NVMe、多节点共用的块存储路径或 S3 对象存储中;相关文档没有 NVMe 或块存储专用开关,并给出加载格式、权限、缓存与验证方法。
对 vLLM 来说,本地 NVMe 应先挂载为服务进程可见的目录;多节点使用块存储时,应让每个节点在同一路径看到模型,这也符合并行与扩展文档的路径建议。对象存储可按 Run:ai Model Streamer 文档使用 S3 URI;若权重已经由 Tensorizer 序列化,也可按 Tensorizer 文档加载。快速入门给出了 /v1/models 检查端点;这些页面没有为 NVMe 或块存储定义独立加载开关,权限、凭据和挂载参数应按实际环境核对。
开始前:固定运行环境与读取边界
先按快速入门创建 Python 3.12 虚拟环境并安装基础包:
uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto
其中 --torch-backend=auto 会检查已安装的 CUDA 驱动版本并选择相应的 PyTorch 索引。部署前确认运行服务的账号能够进入挂载目录、列出文件并读取每个模型分片;如果放在容器中,宿主机上的 NVMe 或块存储目录也必须挂载到容器内相同路径。
对象存储则要确认 URI 与加载器匹配。相关页面没有规定统一的凭据变量或角色名称,因此不要自行套用未经当前文档确认的环境变量,应检查对象存储提供商和项目文档。
本地 NVMe:让 vLLM 读取挂载目录
NVMe 不是单独的加载器名称,文档也没有提供 NVMe 专用开关。使用 Run:ai Model Streamer 时,先安装可选依赖:
pip3 install vllm[runai]
官方本地路径示例为:
vllm serve /home/meta-llama/Llama-3.2-3B-Instruct \
--load-format runai_streamer
这里的模型目录只是文档示例。你的 NVMe 应先挂载,再把运行时可见的实际目录作为模型路径,而不是为挂载盘虚构一个加载参数。
另一条路径是 fastsafetensors。相关加载说明称它通过 GPU direct storage 将权重载入 GPU 内存,启用参数为:
--load-format fastsafetensors
该说明没有把这一参数表述为对所有 NVMe 环境的保证;本地目录、权重格式、驱动和存储链路仍需满足当前文档要求。
块存储:多节点统一挂载路径
网络块存储应在操作系统或云平台层完成挂载,再让服务读取挂载目录。多节点部署不要只在发起节点准备模型;并行文档建议提前下载模型,并让每个节点使用相同路径。
启动前逐项检查:
- 每个节点的挂载点是否一致;
- 服务账号是否能读取全部分片;
- 节点重启或重新调度后,路径是否会自动恢复;
- 块存储不可用时,是否误把远端设备当作本地目录。
对于 tensor parallel 或 pipeline parallel 模型,Run:ai 还提供 runai_streamer_sharded,让每个 worker 只读取自己的分片,而不是整个 checkpoint。它仍然属于模型加载方式,不是块存储挂载协议。官方页面没有给出通用块设备 URI 或挂载参数,具体命令应以所用平台文档为准。
对象存储:用 S3 URI 选择加载器
Run:ai Model Streamer
安装前述可选依赖后,可以直接从 S3 URI 启动:
vllm serve s3://core-llm/Llama-3-8b \
--load-format runai_streamer
该加载器并发读取张量并将其传入 GPU 内存。文档分别给出了并发数和 CPU 缓冲区上限的配置示例:
--model-loader-extra-config '{"concurrency":16}'
--model-loader-extra-config '{"memory_limit":5368709120}'
concurrency 用于调节加载并发,memory_limit 用于限制读取期间的 CPU 缓冲区。文档没有说明两个示例如何组合,因此同时配置时应核对当前页面的 JSON 结构。
Tensorizer
先安装额外依赖:
pip install vllm[tensorizer]
模型必须先由 Tensorizer 序列化,之后才能从 S3 加载:
vllm serve s3://my-bucket/vllm/facebook/opt-125m/v1 --load-format tensorizer
Tensorizer 还支持从磁盘、HTTP/HTTPS 或 S3 读取已序列化张量并直接送入 GPU。不要把普通未序列化 checkpoint 目录直接当成 Tensorizer 产物,也不要假设普通 S3 下载权限配置必然适用于该加载器。
把模型目录与编译缓存分开
优化文档说明,torch.compile 产物保存在 VLLM_CACHE_ROOT 下,默认路径是:
~/.cache/vllm
该缓存可以在机器之间复制,也可以写入容器镜像,但它不是文档定义的模型权重目录。模型卷只读时,应把编译缓存放到另一个可写路径;不要只把权重放进 VLLM_CACHE_ROOT 后期待服务自动发现。
启动后:检查端点与排查路径问题
默认服务地址是 http://localhost:8000,可用 --host 和 --port 修改;一个服务进程当前承载一个模型。启动后执行:
curl http://localhost:8000/v1/models
响应中列出预期模型,说明服务已启动并对外提供该模型。若检查失败,先按错误位置排查:
- 端点无法访问:检查监听地址、端口和运行环境。
- 模型未列出:检查挂载路径、读取权限及
--load-format。 - Tensorizer 加载失败:确认 URI 指向已序列化的完整产物。
- 多节点结果不一致:分别检查每台节点上的路径和分片。
- 缓存写入失败:确认
VLLM_CACHE_ROOT指向可写目录。
以上步骤按正文链接的官方文档整理,未做运行或测量;使用前应按当前版本核对。