跳到內容

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