使用 Nginx¶
本文件展示瞭如何啟動多個 vLLM 服務容器,並使用 Nginx 作為這些伺服器之間的負載均衡器。
構建 Nginx 容器¶
本指南假設您剛剛克隆了 vLLM 專案,並且當前位於 vLLM 的根目錄下。
建立一個名為 Dockerfile.nginx
的檔案
FROM nginx:latest
RUN rm /etc/nginx/conf.d/default.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
構建容器
建立簡單的 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 容器¶
如果您位於代理後面,可以如下所示將代理設定傳遞給 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 網路¶
啟動 vLLM 容器¶
注意事項
- 如果您的 HuggingFace 模型快取位置在其他地方,請更新下方
hf_cache_dir
。 - 如果您沒有現有的 HuggingFace 快取,您需要先啟動
vllm0
,並等待模型下載完成且伺服器準備就緒。這將確保vllm1
可以利用您剛剛下載的模型,無需再次下載。 - 以下示例假設使用了 GPU 後端。如果您使用 CPU 後端,請刪除
--gpus device=ID
,新增VLLM_CPU_KVCACHE_SPACE
和VLLM_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 伺服器是否準備就緒¶
兩個輸出都應該如下所示