使用 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 Dockerfile . --tag vllm

如果您位于代理之后,可以将代理设置传递给 docker build 命令,如下所示

cd $vllm_root
docker build -f 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 all,并向 docker run 命令添加 VLLM_CPU_KVCACHE_SPACEVLLM_CPU_OMP_THREADS_BIND 环境变量。

  • 如果您不想使用 Llama-2-7b-chat-hf,请调整要在 vLLM 服务器中使用的模型名称。

mkdir -p ~/.cache/huggingface/hub/
hf_cache_dir=~/.cache/huggingface/
docker run -itd --ipc host --privileged --network vllm_nginx --gpus all --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 --privileged --network vllm_nginx --gpus all --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)