使用 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 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_SPACE
和VLLM_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)