跳到內容

使用 Nginx

本文件展示瞭如何啟動多個 vLLM 服務容器,並使用 Nginx 作為這些伺服器之間的負載均衡器。

構建 Nginx 容器

本指南假設您剛剛克隆了 vLLM 專案,並且當前位於 vLLM 的根目錄下。

export vllm_root=`pwd`

建立一個名為 Dockerfile.nginx 的檔案

FROM nginx:latest
RUN rm /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

構建容器

docker build . -f Dockerfile.nginx --tag nginx-lb

建立簡單的 Nginx 配置檔案

建立一個名為 nginx_conf/nginx.conf 的檔案。請注意,您可以根據需要新增任意數量的伺服器。在下面的示例中,我們將從兩個開始。要新增更多,請在 upstream backend 中新增另一個 server vllmN:8000 max_fails=3 fail_timeout=10000s; 條目。

配置
upstream backend {
    least_conn;
    server vllm0:8000 max_fails=3 fail_timeout=10000s;
    server vllm1:8000 max_fails=3 fail_timeout=10000s;
}
server {
    listen 80;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

構建 vLLM 容器

cd $vllm_root
docker build -f docker/Dockerfile . --tag vllm

如果您位於代理後面,可以如下所示將代理設定傳遞給 docker build 命令

cd $vllm_root
docker build \
    -f docker/Dockerfile . \
    --tag vllm \
    --build-arg http_proxy=$http_proxy \
    --build-arg https_proxy=$https_proxy

建立 Docker 網路

docker network create vllm_nginx

啟動 vLLM 容器

注意事項

  • 如果您的 HuggingFace 模型快取位置在其他地方,請更新下方 hf_cache_dir
  • 如果您沒有現有的 HuggingFace 快取,您需要先啟動 vllm0,並等待模型下載完成且伺服器準備就緒。這將確保 vllm1 可以利用您剛剛下載的模型,無需再次下載。
  • 以下示例假設使用了 GPU 後端。如果您使用 CPU 後端,請刪除 --gpus device=ID,新增 VLLM_CPU_KVCACHE_SPACEVLLM_CPU_OMP_THREADS_BIND 環境變數到 docker run 命令中。
  • 如果您不想使用 Llama-2-7b-chat-hf,請調整您希望在 vLLM 伺服器中使用的模型名稱。
命令
mkdir -p ~/.cache/huggingface/hub/
hf_cache_dir=~/.cache/huggingface/
docker run \
    -itd \
    --ipc host \
    --network vllm_nginx \
    --gpus device=0 \
    --shm-size=10.24gb \
    -v $hf_cache_dir:/root/.cache/huggingface/ \
    -p 8081:8000 \
    --name vllm0 vllm \
    --model meta-llama/Llama-2-7b-chat-hf
docker run \
    -itd \
    --ipc host \
    --network vllm_nginx \
    --gpus device=1 \
    --shm-size=10.24gb \
    -v $hf_cache_dir:/root/.cache/huggingface/ \
    -p 8082:8000 \
    --name vllm1 vllm \
    --model meta-llama/Llama-2-7b-chat-hf

注意

如果您位於代理後面,可以透過 -e http_proxy=$http_proxy -e https_proxy=$https_proxy 將代理設定傳遞給 docker run 命令。

啟動 Nginx

docker run \
    -itd \
    -p 8000:80 \
    --network vllm_nginx \
    -v ./nginx_conf/:/etc/nginx/conf.d/ \
    --name nginx-lb nginx-lb:latest

驗證 vLLM 伺服器是否準備就緒

docker logs vllm0 | grep Uvicorn
docker logs vllm1 | grep Uvicorn

兩個輸出都應該如下所示

INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)