跳到內容

使用 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。