BigDL容器化部署:Docker一键启动vLLM服务全指南
BigDL是一个强大的开源项目,提供了基于Docker的vLLM服务一键部署方案,让用户能够轻松在Intel CPU和GPU上运行高效的大语言模型推理服务。本文将详细介绍如何通过Docker快速部署vLLM服务,无论你是新手还是有经验的开发者,都能按照本指南轻松完成部署。
为什么选择BigDL容器化部署vLLM服务?
容器化部署已成为现代应用开发和部署的标准方式,尤其对于大语言模型这样的复杂应用。BigDL提供的Docker解决方案具有以下优势:
- 简化部署流程:无需手动配置复杂的依赖环境,Docker镜像包含所有必要组件
- 跨平台兼容性:同时支持Intel CPU和GPU,满足不同硬件环境需求
- 优化性能:针对Intel硬件进行深度优化,充分发挥硬件性能
- 灵活扩展:支持多种模型和量化方案,适应不同场景需求
准备工作:安装Docker环境
在开始部署vLLM服务之前,需要确保你的系统已经安装了Docker。根据你的操作系统,按照Docker官方指南进行安装。
对于Linux系统,安装完成后,建议将当前用户添加到docker组以避免每次使用sudo:
sudo usermod -aG docker $USER安装完成后,可以通过以下命令验证Docker是否正常工作:
docker --version docker run hello-world部署方案一:Intel GPU环境部署vLLM服务
步骤1:获取Docker镜像
BigDL提供了预构建的Docker镜像,你可以直接从DockerHub拉取:
# 对于Intel Arc A770 GPUs docker pull intelanalytics/ipex-llm-serving-xpu:0.8.3-b19 # 对于Intel Arc BMG GPUs docker pull intelanalytics/ipex-llm-serving-xpu:0.2.0-b2如果你需要自定义镜像,也可以从源码构建:
cd docker/llm/serving/xpu/docker docker build \ --build-arg http_proxy=... \ --build-arg https_proxy=... \ --build-arg no_proxy=... \ --rm --no-cache -t vllm-serving:test .步骤2:启动Docker容器
使用以下命令启动容器,确保GPU设备被正确映射:
export DOCKER_IMAGE=intelanalytics/ipex-llm-serving-xpu:latest export CONTAINER_NAME=multi-arc-container export MODEL_PATH=/path/to/your/models sudo docker run -itd \ --net=host \ --privileged \ --device=/dev/dri \ -v $MODEL_PATH:/llm/models \ -e no_proxy=localhost,127.0.0.1 \ -e http_proxy=$HTTP_PROXY \ -e https_proxy=$HTTPS_PROXY \ --name=$CONTAINER_NAME \ --shm-size="16g" \ --entrypoint /bin/bash \ $DOCKER_IMAGE进入容器:
docker exec -it $CONTAINER_NAME /bin/bash步骤3:验证GPU访问
在容器内运行以下命令验证GPU是否被正确识别:
sycl-ls成功的输出应显示类似以下内容:
[level_zero:gpu][level_zero:0] Intel(R) oneAPI Unified Runtime over Level-Zero, Intel(R) Arc(TM) A770 Graphics 12.55.8 [1.6.32224.500000] [level_zero:gpu][level_zero:1] Intel(R) oneAPI Unified Runtime over Level-Zero, Intel(R) Arc(TM) A770 Graphics 12.55.8 [1.6.32224.500000] ...步骤4:启动vLLM服务
容器中已包含启动脚本,你可以直接修改并使用:
# 修改配置参数 vi /llm/start-vllm-service.sh # 启动服务 bash /llm/start-vllm-service.sh成功启动后,你将看到类似以下的日志输出:
步骤5:测试vLLM服务
使用curl发送测试请求:
curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "llama2-7b-chat", "prompt": "San Francisco is a", "max_tokens": 128 }'部署方案二:Intel CPU环境部署vLLM服务
步骤1:构建CPU Docker镜像
cd docker/llm/serving/cpu/docker docker build \ --build-arg http_proxy=.. \ --build-arg https_proxy=.. \ --build-arg no_proxy=.. \ --rm --no-cache -t intelanalytics/ipex-llm-serving-cpu:latest .步骤2:启动CPU容器
export DOCKER_IMAGE=intelanalytics/ipex-llm-serving-cpu:latest export CONTAINER_NAME=ipex-llm-serving-cpu-container export MODEL_PATH=/path/to/your/models sudo docker run -itd \ --net=host \ --cpuset-cpus="0-47" \ # 根据你的CPU核心数调整 --cpuset-mems="0" \ -v $MODEL_PATH:/llm/models \ -e no_proxy=localhost,127.0.0.1 \ --memory="64G" \ --name=$CONTAINER_NAME \ --shm-size="16g" \ $DOCKER_IMAGE进入容器:
docker exec -it $CONTAINER_NAME /bin/bash步骤3:启动CPU上的vLLM服务
# 修改配置参数 vi /llm/start-vllm-service.sh # 启动服务 bash /llm/start-vllm-service.sh步骤4:验证CPU服务
curl http://localhost:8000/v1/completions \ -H "Content-Type: application/json" \ -d '{ "model": "YOUR_MODEL", "prompt": "San Francisco is a", "max_tokens": 128, "temperature": 0 }' | jq '.choices[0].text'成功响应示例:
模型量化与性能优化
BigDL vLLM服务支持多种量化方案,以在性能和精度之间取得平衡:
支持的量化方案
sym_int4:对称4位整数量化asym_int4:非对称4位整数量化fp6:6位浮点数量化fp8:8位浮点数量化(默认)fp16:16位浮点数
修改量化参数
在启动脚本中修改以下参数:
export LOAD_IN_LOW_BIT="fp8" # 可替换为其他量化方案性能调优参数
--max-model-len:模型上下文长度--max-num-batched-token:每轮迭代的最大批处理token数--max-num-seq:每轮迭代的最大序列数
详细参数说明可参考官方文档
基准测试
在线基准测试
cd /llm # 预热 wrk -t4 -c4 -d3m -s payload-1024.lua http://localhost:8000/v1/completions --timeout 1h # 正式测试 wrk -t8 -c8 -d15m -s payload-1024.lua http://localhost:8000/v1/completions --timeout 1h离线基准测试
cd /llm wget https://huggingface.co/datasets/anon8231489123/ShareGPT_Vicuna_unfiltered/resolve/main/ShareGPT_V3_unfiltered_cleaned_split.json source ipex-llm-init -t export MODEL="YOUR_MODEL" python3 ./benchmark_vllm_throughput.py \ --backend vllm \ --dataset ./ShareGPT_V3_unfiltered_cleaned_split.json \ --model $MODEL \ --num-prompts 1000 \ --seed 42 \ --trust-remote-code \ --enforce-eager \ --dtype bfloat16 \ --device cpu \ --load-in-low-bit bf16支持的模型列表
BigDL vLLM服务已验证支持多种流行模型:
| 模型 (fp8) | GPU数量 |
|---|---|
| llama-3-8b | 1 |
| Llama-2-7B | 1 |
| Qwen2-7B | 1 |
| Qwen1.5-7B | 1 |
| GLM4-9B | 1 |
| chatglm3-6b | 1 |
| Baichuan2-7B | 1 |
| Codegeex4-all-9b | 1 |
| Llama-2-13B | 2 |
| Qwen1.5-14b | 2 |
| TeleChat-13B | 2 |
| Qwen1.5-32b | 4 |
| Yi-1.5-34B | 4 |
| CodeLlama-34B | 4 |
高级功能
多模态模型支持
BigDL vLLM服务支持多模态模型,如MiniCPM-V-2_6(视觉模型)和whisper系列(音频模型),可以处理图像和音频输入。
Prefix Caching
启用Prefix Caching可以缓存查询的KV缓存,当新查询与现有查询共享前缀时,可以直接重用KV缓存,大大提高性能:
llm = LLM(model='/llm/models/Llama-2-7b-chat-hf', ... enable_prefix_caching=True)LoRA适配器
支持在基础模型上使用LoRA适配器,实现高效的模型微调:
python -m ipex_llm.vllm.xpu.entrypoints.openai.api_server \ ... --enable-lora \ --lora-modules sql-lora=$SQL_LOARA总结
通过BigDL提供的Docker容器化方案,你可以轻松在Intel CPU或GPU上部署高性能的vLLM服务。无论是开发环境测试还是生产环境部署,这种方式都能为你节省大量配置时间,让你专注于模型应用而非环境搭建。
想要了解更多细节,可以参考项目中的官方文档:
- GPU部署详细指南
- CPU部署详细指南
- vLLM快速入门
现在,你已经掌握了BigDL容器化部署vLLM服务的全部流程,立即尝试部署你自己的大语言模型服务吧!🚀
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考