跳到内容

使用 Docker

使用 vLLM 官方 Docker 镜像

vLLM 提供了一个用于部署的官方 Docker 镜像。该镜像可用于运行兼容 OpenAI 的服务器,并在 Docker Hub 上以 vllm/vllm-openai 的形式提供。

docker run --runtime nvidia --gpus all \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    --env "HUGGING_FACE_HUB_TOKEN=<secret>" \
    -p 8000:8000 \
    --ipc=host \
    vllm/vllm-openai:latest \
    --model mistralai/Mistral-7B-v0.1

此镜像也可与其他容器引擎(例如 Podman)一起使用。

podman run --gpus all \
  -v ~/.cache/huggingface:/root/.cache/huggingface \
  --env "HUGGING_FACE_HUB_TOKEN=$HF_TOKEN" \
  -p 8000:8000 \
  --ipc=host \
  vllm/vllm-openai:latest \
  --model mistralai/Mistral-7B-v0.1

您可以在镜像标签(vllm/vllm-openai:latest)之后添加您需要的任何其他 engine-args

注意

您可以使用 ipc=host 标志或 --shm-size 标志来允许容器访问主机的共享内存。vLLM 使用 PyTorch,它在底层使用共享内存来在进程之间共享数据,特别是对于张量并行推理。

注意

为避免许可问题(例如 Issue #8030),未包含可选依赖项。

如果您需要使用这些依赖项(已接受许可条款),请在基础镜像之上创建一个自定义 Dockerfile,并添加一个额外层来安装它们。

FROM vllm/vllm-openai:v0.9.0

# e.g. install the `audio` optional dependencies
# NOTE: Make sure the version of vLLM matches the base image!
RUN uv pip install --system vllm[audio]==0.9.0

提示

一些新模型可能只在 HF Transformers 的主分支上可用。

要使用 transformers 的开发版本,请在基础镜像之上创建一个自定义 Dockerfile,并添加一个额外层来从源代码安装它们的S代码。

FROM vllm/vllm-openai:latest

RUN uv pip install --system git+https://github.com/huggingface/transformers.git

从源代码构建 vLLM Docker 镜像

您可以通过提供的 docker/Dockerfile 从源代码构建并运行 vLLM。要构建 vLLM,

# optionally specifies: --build-arg max_jobs=8 --build-arg nvcc_threads=2
DOCKER_BUILDKIT=1 docker build . \
    --target vllm-openai \
    --tag vllm/vllm-openai \
    --file docker/Dockerfile

注意

默认情况下,vLLM 将为所有 GPU 类型进行构建,以实现最广泛的分发。如果您仅为机器当前运行的 GPU 类型构建,您可以添加参数 --build-arg torch_cuda_arch_list="",让 vLLM 查找当前 GPU 类型并为其构建。

如果您使用 Podman 而不是 Docker,在运行 podman build 命令时,您可能需要通过添加 --security-opt label=disable 来禁用 SELinux 标签,以避免某些 现有问题

为 Arm64/aarch64 构建

可以为 Nvidia Grace-Hopper 等 aarch64 系统构建 Docker 容器。在撰写本文时,这需要使用 PyTorch Nightly,应被视为实验性功能。使用标志 --platform "linux/arm64" 将尝试为 arm64 构建。

注意

必须编译多个模块,因此此过程可能需要一些时间。建议使用 --build-arg max_jobs=--build-arg nvcc_threads= 标志来加快构建过程。但是,请确保您的 max_jobs 远大于 nvcc_threads 以获得最大收益。请密切关注并行作业的内存使用情况,因为其可能很大(参见下面的示例)。

命令
# Example of building on Nvidia GH200 server. (Memory usage: ~15GB, Build time: ~1475s / ~25 min, Image size: 6.93GB)
python3 use_existing_torch.py
DOCKER_BUILDKIT=1 docker build . \
--file docker/Dockerfile \
--target vllm-openai \
--platform "linux/arm64" \
-t vllm/vllm-gh200-openai:latest \
--build-arg max_jobs=66 \
--build-arg nvcc_threads=2 \
--build-arg torch_cuda_arch_list="9.0 10.0+PTX" \
--build-arg vllm_fa_cmake_gpu_arches="90-real"

注意

如果您正在非 ARM 主机(例如 x86_64 机器)上构建 linux/arm64 镜像,您需要确保您的系统已设置为使用 QEMU 进行交叉编译。这使得您的主机能够模拟 ARM64 执行。

在您的主机上运行以下命令以注册 QEMU 用户静态处理程序

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

设置 QEMU 后,您可以在 docker build 命令中使用 --platform "linux/arm64" 标志。

使用自定义构建的 vLLM Docker 镜像

要使用自定义构建的 Docker 镜像运行 vLLM

docker run --runtime nvidia --gpus all \
    -v ~/.cache/huggingface:/root/.cache/huggingface \
    -p 8000:8000 \
    --env "HUGGING_FACE_HUB_TOKEN=<secret>" \
    vllm/vllm-openai <args...>

参数 vllm/vllm-openai 指定要运行的镜像,应替换为自定义构建镜像的名称(来自构建命令的 -t 标签)。

注意

仅适用于 0.4.1 和 0.4.2 版本 - 这些版本下的 vLLM docker 镜像应该在 root 用户下运行,因为运行时需要加载 root 用户主目录下的一个库,即 /root/.config/vllm/nccl/cu12/libnccl.so.2.18.1。如果您在其他用户下运行容器,您可能需要先更改该库(以及所有父目录)的权限以允许该用户访问它,然后使用环境变量 VLLM_NCCL_SO_PATH=/root/.config/vllm/nccl/cu12/libnccl.so.2.18.1 运行 vLLM。