跳到内容

使用 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,并在 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 \
    --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)