1. 背景??
????????本文分享在華為昇騰機器上部署QwQ-32B模型的實踐。
? ? ? ? 首先華為自己是提供了一套在信創機器(NPU)上部署模型的方案【1】,但是部署之后,測試發現會有輸出截斷的現象。QwQ-32B本身是支持128k的最大上下文長度,定位可能是max-model-len的設置沒有生效,但是華為的啟動參數中只有maxSeqLen以及maxInputTokenLen參數,修改后也不奏效。
? ? ? ? 因此我們希望采用更通用更可靠的部署方案。vllm是一種比較通用可靠的推理框架,我們發現vllm已經可以原生支持Ascend【2,3】。
2. 部署及測試
(1)拉取vllm-ascend鏡像,為了速度快,可以使用國內鏡像地址:
quay.io/ascend/vllm-ascend:v0.8.4rc2-openeuler - 鏡像下載 | quay.io
docker pull https://docker.aityp.com/image/quay.io/ascend/vllm-ascend:v0.8.4rc2-openeuler?platform=linux/arm64
(2)docker啟動命令
拉取完成后,啟動docker鏡像,相關的配置修改如下:
docker run -itd --name vllm-QWQ-32B \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/common \
-v /usr/local/Ascend/driver/lib64/driver:/usr/local/Ascend/driver/lib64/driver \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /etc/vnpu.cfg:/etc/vnpu.cfg \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /data/qwq:/qwq \
--privileged=true \
-e ASCEND_RT_VISIBLE_DEVICES=0,1 \
-p 40928:40928 \
-it swr.cn-north-4.myhuaweicloud.com/ddn-k8s/quay.io/ascend/vllm-ascend:v0.8.4rc2-openeuler-linuxarm64 bash
(3)進入docker鏡像??? ??
docker exec -it vllm-QWQ-32B /bin/bash
(4)鏡像中,配置QwQ-32B模型的啟動腳本
cd /qwq/
vi run_vllm.sh
run_vllm.sh文件腳本如下:
export ASCEND_RT_VISIBLE_DEVICES=0,1
vllm serve "/qwq/model" \
--port 40928 \
--served-model-name QwQ-32B \
--dtype auto \
--kv-cache-dtype auto \
--max-model-len 32768 \
--tensor-parallel-size 2
(5)啟動模型腳本
sh run_vllm.sh
(6)測試腳本(宿主機執行)
curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{
?"model": "QwQ-32B",
?"messages": [{
?"role": "system",
?"content": "幫我寫一首詩"
?}],
?"max_tokens": 8192
?}' 127.0.0.1:40928/v1/chat/completions
3. 參考材料
【1】昇騰鏡像倉庫詳情
【2】Installation — vllm-ascend
【3】Ascend-vLLM