使用 Nginx#

本文档展示了如何启动多个 vLLM 服务容器,并使用 Nginx 作为服务器之间的负载均衡器。

目录

  1. 构建 Nginx 容器

  2. 创建简单的 Nginx 配置文件

  3. 构建 vLLM 容器

  4. 创建 Docker 网络

  5. 启动 vLLM 容器

  6. 启动 Nginx

  7. 验证 vLLM 服务器已准备就绪

构建 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)