實戰Xinference:打造高性能私有AI推理服務
隨著大模型應用的普及,越來越多的企業開始關注私有化部署。今天我們聊聊如何在??海光DCU K100-AI?
?計算卡上部署Xinference推理框架,構建一套完整的私有AI推理服務。
為什么選擇Xinference?
Xinference是一個功能強大的開源推理平臺,可以理解為"本地版的OpenAI API"。它的優勢在于:
統一接口:無論是大語言模型、多模態模型還是嵌入模型,都提供統一的調用方式。
硬件兼容性強:支持CPU、NVIDIA GPU、海光DCU等多種硬件平臺。
自動優化:能夠根據模型特征自動選擇最優的推理引擎,比如vLLM。
簡單易用:提供Web UI和命令行工具,部署和管理都很方便。
vLLM加速的秘密
在滿足特定條件時,Xinference會自動啟用vLLM作為后端推理引擎。vLLM的核心創新是PagedAttention機制,能夠顯著提升并發處理能力。
自動啟用vLLM的條件:
? 模型格式:pytorch、gptq或awq
? 量化配置:pytorch需要無量化,awq需要Int4量化,gptq支持Int3/Int4/Int8量化
? 運行環境:Linux系統 + DCU設備
? 模型兼容性:必須在vLLM支持列表中
部署實踐
?? 海光DCU實戰項目來了!助您輕松駕馭大模型與HPC開發 ??
為幫助開發者更便捷在海光DCU上進行大模型(訓練、微調、推理)及科學計算,我依托海光DCU開發者社區,精心打造了一個開箱即用的實戰項目 —— “dcu-in-action”!
旨在為您提供:
? ??直接上手的代碼示例與實踐指南
? ?加速您在海光DCU上的開發與部署流程
歡迎各位開發者:
? 訪問項目GitHub倉庫,深入體驗、參與貢獻,共同完善: https://github.com/FlyAIBox/dcu-in-action
? 如果項目對您有幫助,請我們點亮一個寶貴的Star??
方案一:手動部署(適合學習)
如果你希望了解每個部署細節,可以選擇手動方式:
# 1. 啟動配置容器
docker run -it \
--name xinference-service-setup \
-e XINFERENCE_MODEL_SRC=modelscope \
-p 9998:9997 \
--shm-size=16G \
--device=/dev/kfd \
--device=/dev/mkfd \
--device=/dev/dri \
-v /opt/hyhal:/opt/hyhal \
-v /root/.cache/huggingface/hub:/home/.cache/huggingface/hub \
--group-add video \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
image.sourcefind.cn:5000/dcu/admin/base/custom:vllm0.8.5-ubuntu22.04-dtk25.04-rc7-das1.5-py3.10-20250514-fixpy-rocblas0513-alpha \
/bin/bash
# 2. 容器內安裝依賴
pip install "xinference[vllm]==1.5.1"
pip uninstall -y xoscar
pip install xoscar==0.6.2
# 3. 保存鏡像
exit
docker commit xinference-service-setup dcu-xinference:1.0
# 4. 啟動服務
docker run -d \
--name xinference-service \
--restart always \
-e XINFERENCE_MODEL_SRC=modelscope \
-p 9998:9997 \
--shm-size=16G \
--device=/dev/kfd \
--device=/dev/mkfd \
--device=/dev/dri \
-v /opt/hyhal:/opt/hyhal \
-v /root/.cache/huggingface/hub:/home/.cache/huggingface/hub \
--group-add video \
--cap-add=SYS_PTRACE \
--security-opt seccomp=unconfined \
dcu-xinference:1.0 \
xinference-local -H 0.0.0.0 --log-level debug
方案二:自動化腳本(推薦)
對于生產環境,我們更推薦使用自動化腳本。將以下代碼保存為??deploy_xinference_dcu.sh?
?:
deploy_xinference_dcu.sh腳本路徑[1]
#!/bin/bash
set -e
# 配置變量
BASE_IMAGE="image.sourcefind.cn:5000/dcu/admin/base/custom:vllm0.8.5-ubuntu22.04-dtk25.04-rc7-das1.5-py3.10-20250514-fixpy-rocblas0513-alpha"
FINAL_IMAGE_NAME="dcu-xinference:1.0"
SERVICE_CONTAINER_NAME="xinference-service"
HOST_PORT="9998"
HOST_CACHE_DIR="$HOME/.cache/huggingface/hub"
echo"?? 開始自動化部署 Xinference on DCU..."
# 創建緩存目錄
if [ ! -d "$HOST_CACHE_DIR" ]; then
mkdir -p "$HOST_CACHE_DIR"
fi
# 生成Dockerfile
cat <<EOF > Dockerfile.xinference
FROM ${BASE_IMAGE}
ENV PIP_NO_CACHE_DIR=off
ENV PIP_DISABLE_PIP_VERSION_CHECK=on
WORKDIR /app
RUN pip install "xinference[vllm]==1.5.1" && \
pip uninstall -y xoscar && \
pip install xoscar==0.6.2
ENTRYPOINT ["/bin/sh"]
CMD ["-c", "exec xinference-local -H 0.0.0.0 --log-level info"]
EOF
# 構建鏡像
docker build -t ${FINAL_IMAGE_NAME} -f Dockerfile.xinference .
rm Dockerfile.xinference
# 清理舊容器
if [ "$(docker ps -a -q -f name=^/${SERVICE_CONTAINER_NAME}$)" ]; then
docker stop ${SERVICE_CONTAINER_NAME}
docker rm${SERVICE_CONTAINER_NAME}
fi
# 啟動服務
docker run \
-d \
--name ${SERVICE_CONTAINER_NAME} \
--restart always \
-e XINFERENCE_MODEL_SRC=modelscope \
-p ${HOST_PORT}:9997 \
--shm-size=16G \
--device=/dev/kfd --device=/dev/mkfd --device=/dev/dri \
-v /opt/hyhal:/opt/hyhal -v ${HOST_CACHE_DIR}:/home/.cache/huggingface/hub \
--group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
${FINAL_IMAGE_NAME} \
-c "exec xinference-local -H 0.0.0.0 --log-level debug"
echo"?? Xinference 服務已成功啟動!"
echo "訪問地址: http://localhost:${HOST_PORT}"
運行腳本:
chmod +x deploy_xinference_dcu.sh
./deploy_xinference_dcu.sh
常見問題解決
在實際部署中,可能會遇到一些問題,這里分享兩個常見的:
問題1:xoscar版本兼容性
錯誤信息:??TypeError: MainActorPool.append_sub_pool() got an unexpected keyword argument 'start_method'?
?
解決方案:
pip uninstall -y xoscar
pip install xoscar==0.6.2
這個問題是因為xinference調用了新版xoscar的API,但實際安裝的版本太舊。
問題2:并行數與模型架構不匹配
錯誤信息:??ValueError: Total number of attention heads (e.g., 40) must be divisible by tensor parallel size (e.g., 7)?
?
解決方案:調整??n_gpu?
?參數,確保它是模型注意力頭數的約數。
比如模型有40個注意力頭,那么??n_gpu?
?可以設置為1、2、4、5、8、10、20、40中的任意一個。
環境配置優化
幾個重要的環境變量:
? ??XINFERENCE_MODEL_SRC?
??:設置為??modelscope?
?使用國內源
? ??XINFERENCE_ENDPOINT?
?:服務訪問地址
? ??XINFERENCE_HOME?
?:數據存儲目錄
性能監控
部署完成后,可以通過以下方式監控服務狀態:
# 查看服務日志
docker logs -f xinference-service
# 進入容器調試
docker exec -it xinference-service /bin/bash
# 檢查GPU使用情況
rocm-smi
模型部署與配置
Xinference服務啟動后,訪問 ??http://localhost:9998?
? 進入Web管理界面。以DeepSeek-R1-Distill-Qwen-32B模型為例,演示完整的部署流程。
DeepSeek-R1-Distill-Qwen-32B
模型參數詳解
在Web界面中,我們需要配置以下關鍵參數:
基礎配置:
?模型ID:deepseek-r1-distill-qwen(系統自動生成的唯一標識)
?推理引擎:vLLM(滿足條件時自動選擇)
?模型格式:pytorch(原生PyTorch格式,性能最佳)
?規格:32B(模型參數量32B)
?量化:none(不使用量化,保持原始精度)
資源配置:
?Worker進程CPU核數:auto(自動檢測并分配)
?GPU數量:0,1,2,3,4,5,6,7(使用8張DCU卡)
LoRA配置:
? 如果需要使用LoRA適配器,可以在此配置
? 支持本地路徑和遠程倉庫地址
模型調用示例
模型部署成功后,可以通過API進行調用:
import openai
# 配置客戶端
client = openai.OpenAI(
api_key="不需要真實key",
base_url="http://localhost:9998/v1"
)
# 發起對話請求
response = client.chat.completions.create(
model="deepseek-r1-distill-qwen",
messages=[
{"role": "user", "content": "解釋一下什么是Transformer架構"}
],
temperature=0.7,
max_tokens=1000
)
print(response.choices[0].message.content)
也可以使用curl命令測試:
curl -X POST http://localhost:9998/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-r1-distill-qwen",
"messages": [
{"role": "user", "content": "你好"}
],
"temperature": 0.7
}'
總結
通過以上步驟,我們成功在海光DCU上部署了Xinference推理框架并完成了模型的部署配置。這套方案的優勢在于:
1.完全私有化:數據不出機房,安全可控
2.性能優異:自動選擇vLLM等高性能引擎
3.易于管理:統一的API接口,簡化開發
4.擴展性強:支持多模型并行運行
5.配置靈活:豐富的參數可以滿足不同場景需求
對于企業級應用,建議進一步考慮負載均衡、高可用性等方面的優化。海光DCU作為國產計算卡,在大模型推理場景下表現不錯,是值得關注的解決方案。
引用鏈接
??[1]?
?? deploy_xinference_dcu.sh腳本路徑: ??https://github.com/FlyAIBox/dcu-in-action/blob/main/examples/llm-inference/xiference/deploy_xinference_dcu.sh??
本文轉載自 ???????螢火AI百寶箱????????,作者: 螢火AI百寶箱
