AES200物理機部署DeepSeek-R1模型
華為官方官宣自己的NPU支持DeepSeek-R1模型部署,華為的大模型推理部署依托于其大模型推理引擎:MindIE,但是根據MindIE的文檔,其只支持以下硬件:
表1 MindIE支持的硬件列表
類型 | 配置參考 |
---|---|
服務器 | Atlas 800I A2 推理產品 |
Atlas 200T A2 Box16 異構子框 | |
推理卡 | Atlas 300I Duo 推理卡+Atlas 800 推理服務器(型號:3000) |
而且根據華為官方發布的支持DeepSeek的docker 鏡像,也需要以下硬件配置:
硬件要求
部署DeepSeek-V3模型用BF16權重進行推理至少需要4臺Atlas 800I A2(864G)服務器,用W8A8量化權重進行推理則至少需要2臺Atlas 800I A2 (864G)
今天我們就嘗試一下,凌華智能科技有限公司發布的基于華為Ascend310P處理芯片的AES200邊緣推理服務器能不能拉動DeepSeek這兩大車! 開搞!!
1. 安裝MindIE推理引擎
雖然根據MindIE的文檔,MindIE只支持Atlas 300I Duo推理卡以上的設備,但是由于AES200采用的Ascend310P處理芯片是和Atlas 300I Duo卡采用的芯片是同一系列的芯片,按理來說MindIE也是應該能跑起來的,我們不防試試,走起!
注意:本次安裝為了簡單方便,我們的安裝用戶和運行用戶都采用root賬號!!!
1.1 安裝方案
此次我們采用如下圖所示的物理機部署方案,完成MindIE開發環境的安裝。
1.2 準備AES200環境
這次我們在AES200上安裝OpenEuler 22.03的系統版本,固件和驅動的版本如下:
軟件名稱 | 分類 | 發布日期 | 說明 |
---|---|---|---|
Ascend-hdk-310p-npu-firmware-soc_7.3.0.1.231.run | NPU | 2024/07/19 | Atlas 200I SOC A1產品固件包(run格式) |
Ascend-hdk-310p-npu-driver-soc-oe2203_24.1.rc2_linux-aarch64.run | NPU | 2024/07/19 | Atlas 200I SOC A1產品ARM架構支持OpenEuler 22.03驅動包(run格式) |
+--------------------------------------------------------------------------------------------------------+
| npu-smi 24.1.rc2 Version: 24.1.rc2 |
+-------------------------------+-----------------+------------------------------------------------------+
| NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page) |
| Chip Device | Bus-Id | AICore(%) Memory-Usage(MB) |
+===============================+=================+======================================================+
| 0 310P1 | OK | NA 27 0 / 0 |
| 0 0 | NA | 80 NA / 43173 |
+===============================+=================+======================================================+
1.3 安裝開發環境
MindIE與CANN版本必須配套使用,其版本配套關系如下表所示。
MindIE版本 | 配套CANN版本 |
---|---|
1.0.0 | 8.0.0 |
軟件安裝前,請下載下表MindIE依賴的軟件包,各軟件包版本號需要保持一致。
依賴 | 軟件包 | 軟件說明 |
---|---|---|
CANN | Ascend-cann-toolkit*_{version}_linux-{arch}*.run | 開發套件包。 |
Ascend-cann-kernels-{chip_type}_{version}_linux-{arch}.run | 二進制算子包。 | |
Ascend-cann-nnal*_{version}_linux-{arch}*.run | 加速庫軟件包。 | |
ATB Models | Ascend-mindie-atb-models_{version}_linux-{arch}py*xxxtorchx.x.x*-{abi}.tar.gz | 模型庫安裝包。使用MindIE Service和MindIE LLM組件時,需要安裝。 |
Ascend Extension for PyTorch | torch_npu-{torch_version}.post{post_id}-cpxxx-cpxxx-manylinux_{arch}.whl | torch_npu插件whl包。 |
apex-{apex_version}_ascend-cpxxx-cpxxx-{arch}.whl | Apex模塊的whl包。 | 請參見《Ascend Extension for PyTorch 配置與安裝》中的“(可選)安裝APEX模塊”章節,根據Python3.10版本自行編譯。 |
torch-{torch_version}+cpu-cpxxx-cpxxx-linux_{arch}.whl | PyTorch框架whl包。說明當前只支持1.11.0和2.1.0版本。 | 請從《Ascend Extension for PyTorch 配置與安裝》中的“安裝PyTorch框架”章節獲取。 |
1.3.1 安裝依賴
根據MindIE的文檔,MindIE依賴下表中的軟件包
軟件 | 版本要求 |
---|---|
glibc | >=2.34,(openEuler22.03系統中glibc版本滿足要求)。 |
gcc、g++ | >=11.4.0,(OpenEuler22.03系統找那個gcc,g++不滿足要求),可以通過conda環境安裝,或者編譯安裝,我這里采用Conda虛擬一個環境進行安裝。 |
Python | 3.10*.x*、3.11.x,OpenEuler22.03默認帶的python版本為3.9,我們這里用Conda來創建一個虛擬環境來滿足對Python版本的要求。建議執行命令pip3 install --upgrade pip進行升級(pip版本需 ≤ 24.0),避免因pip版本過低導致安裝失敗。 |
gevent | 22.10.2 |
python-rapidjson | >=1.6 |
geventhttpclient | 2.0.11 |
urllib3 | 2.1.0 |
greenlet | 3.0.3 |
zope.event | 5.0 |
zope.interface | 6.1 |
prettytable | 3.5.0 |
jsonschema | 4.21.1 |
jsonlines | 4.0.0 |
thefuzz | 0.22.1 |
pyarrow | >=15.0.0 |
pydantic | 2.6.3 |
sacrebleu | 2.4.2 |
rouge_score | 0.1.2 |
pillow | 10.3.0 |
requests | 2.31.0 |
matplotlib | >=1.3.0 |
text_generation | 0.7.0 |
numpy | 1.26.3 |
pandas | 2.1.4 |
transformers | >=4.30.2,請用戶根據模型選擇對應版本。 |
tritonclient[all] | - |
colossalai | 0.4.0 |
安裝Miniconda
$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
$ ./Miniconda3-latest-Linux-aarch64.sh #安裝時選擇缺失配置安裝就行
創建虛擬環境
$ conda create -n mindie python=3.10
$ conda activate mindie
$ pip3 install --upgrade pip==24
$ conda install -c conda-forge gcc=11.4.0 gxx=11.4.0
$ gcc --version #檢查gcc版本
$ pip3 --version #檢查pip3版本呢
安裝依賴pip包
將以下內容添加安裝文件requirements.txt中,樣例如下所示。
gevent==22.10.2
python-rapidjson>=1.6
geventhttpclient==2.0.11
urllib3>=2.1.0
greenlet==3.0.3
zope.event==5.0
zope.interface==6.1
prettytable~=3.5.0
jsonschema~=4.21.1
jsonlines~=4.0.0
thefuzz~=0.22.1
pyarrow~=15.0.0
pydantic~=2.6.3
sacrebleu~=2.4.2
rouge_score~=0.1.2
pillow~=10.3.0
requests~=2.31.0
matplotlib>=1.3.0
text_generation~=0.7.0
numpy~=1.26.3
pandas~=2.1.4
transformers>=4.30.2
tritonclient[all]
colossalai==0.4.0
在創建的mindie虛擬環境中執行以下命令進行安裝
$ pip3 install -r requirements.txt
1.3.2 安裝CANN
詳細過程,請參照華為的《CANN 軟件安裝指南》中的“安裝CANN軟件包”章節,依據設備情況及操作系統支持情況,安裝CANN開發套件包Ascend-cann-toolkit*_{version}_linux-{arch}*.run。
安裝CANN依賴
在創建的conda 虛擬環境mindie下安裝CANN依賴包
$ pip3 install attrs cython numpy==1.24.0 decorator sympy cffi pyyaml pathlib2 psutil protobuf==3.20 scipy requests absl-py cloudpickle ml-dtypes tornado
安裝toolkit
$ ./Ascend-cann-toolkit_8.0.0_linux-aarch64.run --install --install-for-all
# 環境變量設置
$ source /usr/local/Ascend/ascend-toolkit/set_env.sh
根據安裝成功后的提示,添加source /usr/local/Ascend/ascend-toolkit/set_env.sh
到/root/.bashrc中, 設置永久環境變量
安裝二進制算子包
詳細過程,請參照華為的《CANN 軟件安裝指南》中的“安裝CANN軟件包”章節,依據設備情況及操作系統支持情況,安裝CANN二進制算子包Ascend-cann-kernels-{chip_type}_{version}_linux-{arch}.run。
$ ./Ascend-cann-kernels-310p_8.0.0_linux-aarch64.run --install --install-for-all
安裝加速庫
NNAL軟件包中提供了面向大模型領域的ATB(Ascend Transformer Boost)加速庫,實現了基于Transformer結構的神經網絡推理加速引擎庫,提供昇騰親和的融合算子、通信算子、內存優化等,作為算子的公共底座提升了大模型推理性能。
$ ./Ascend-cann-nnal_8.0.0_linux-aarch64.run --install --install-for-all
# 環境變量設置
$ source /usr/local/Ascend/nnal/atb/set_env.sh
將source /usr/local/Ascend/nnal/atb/set_env.sh
添加到/root/.bashrc文件中的最后一行, 設置永久環境變量
1.3.3 安裝Pytorch
- 請參見《Ascend Extension for PyTorch 配置與安裝》中的“安裝PyTorch框架”章節安裝PyTorch框架。
- 請參見《Ascend Extension for PyTorch 配置與安裝》中的“安裝torch_npu插件”章節安裝torch_npu插件。
MindIE中各組件依賴PyTorch框架和torch_npu插件,依賴情況如下表所示,請用戶依據實際使用需求安裝。
組件名稱 | 是否需要安裝PyTorch框架 | 是否需要安裝torch_npu插件 |
---|---|---|
MindIE Torch | 必裝 | 可選 |
MindIE Service | 必裝 | 必裝 |
MindIE LLM | 必裝 | 必裝 |
MindIE SD | 必裝 | 必裝 |
安裝pytorch
# 下載軟件包
$ wget https://download.pytorch.org/whl/cpu/torch-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
# 安裝命令
$ pip3 install torch-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
安裝pytorch擴展
# 下載插件包
$ wget https://gitee.com/ascend/pytorch/releases/download/v6.0.0-pytorch2.1.0/torch_npu-2.1.0.post10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
# 安裝命令
$ pip3 install torch_npu-2.1.0.post10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
執行如下命令,若返回True 則說明安裝成功。
python3 -c "import torch;import torch_npu;print(torch_npu.npu.is_available())"
1.3.4 安裝ATB Models
詳細過程,請參照華為的《MindIE安裝指南》中的“安裝ATB Models”章節。
ATB Models軟件包是集成到了華為提供的MindIE推理鏡像包里面,需要下載推理鏡像包,運行docker啟動鏡像后,從/opt/package目錄提取對應版本的ATB Models包。注意包有兩類接包:abi0,abi1,請在你的mindie虛擬環境中使用以下指令查看abi是0還是1
python -c "import torch; print(torch.compiled_with_cxx11_abi())"
若輸出結果為True表示abi1,False表示abi0,根據輸出結果選擇對應的abi包
$ mkdir /usr/local/Ascend/llm_model
$ tar -xzf Ascend-mindie-atb-models_1.0.0_linux-aarch64_py310_torch2.1.0-abi0.tar.gz -C /usr/local/Ascend/llm_model
# 環境變量設置
$ source /usr/local/Ascend/llm_model/set_env.sh
將source /usr/local/Ascend/llm_model/set_env.sh
添加到/root/.bashrc文件中的最后一行, 設置永久環境變量
安裝atb-llm
$ pip3 install /usr/local/Ascend/llm_model/atb_llm-0.0.1-py3-none-any.whl
1.4 安裝MindIE
1.4.1 準備安裝包
MindIE軟件包
名稱 | 軟件包 | 說明 |
---|---|---|
MindIE軟件包 | Ascend-mindie*_{version}_linux-{arch}*.run | 推理引擎軟件包,主要用于用戶開發基于MindIE的應用。 |
執行安裝前請確保安裝環境滿足硬件環境,支持的操作系統要求,并已參照安裝驅動和固件和安裝開發環境章節完成開發環境的安裝。執行MindIE軟件包的安裝,會依次安裝MindIE RT、MindIE Torch、MindIE Service、MindIE LLM和MindIE SD各組件,組件包的路徑在MindIE的子路徑下。
1.4.2 安裝步驟
執行安裝程序
$ ./Ascend-mindie_1.0.0_linux-aarch64.run --install
# 環境變量設置
$ source /usr/local/Ascend/mindie/set_env.sh
將source /usr/local/Ascend/mindie/set_env.sh
添加到/root/.bashrc文件中的最后一行, 設置永久環境變量
1.5 配置MindIE Server
詳細配置項介紹,請參照華為的《MindIE安裝指南》中的“配置MindIE Server”章節的單機推理。
MindIE Server 對于Python的環境要求為Python3.10. 或者Python3.11. 此處以我的虛擬環境中Python3.10.16為例,如果環境中的Python3.10.16不是默認版本,需要參考如下方法添加環境變量到/root/.bashrc文件中(Python路徑根據實際路徑進行修改)。
conda activate mindie #默認激活虛擬環境
export export LD_LIBRARY_PATH=${HOME}/miniconda3/envs/mindie/lib:${HOME}/miniconda3/envs/mindie/lib/python3.10:$LD_LIBRARY_PATH
在此,我只是添加了Python的環境變量,并沒有更改MindIE Server的配置項文件:config.json。這個文件可以根據不同的模型修改,我們放在模型部署時修改此文件。
2 部署DeepSeek模型
由于AES200的資源有限,肯定是不可能推理滿血的DeepSeek模型的,我們采用一個蒸餾過的模型: DeepSeek-R1-Distill-Qwen-7B測試一下。
2.1 下載模型
由于模型是從huggingface官網下載,我們需要安裝官方的下載工具huggingface_hub,這樣更快的下載模型,注意:這里可能需要科學上網
$ pip3 install -U huggingface_hub
下載模型文件
$ huggingface-cli download --resume-download deepseek-ai/DeepSeek-R1-Distill-Llama-8B --local-dir /home/data/datasets/DeepSeek-R1-Distill-Llama-8B
修改模型權重config.json中torch_dtype
字段為float16
修改文件的屬性:
$ chmod 750 /home/data/datasets/DeepSeek-R1-Distill-Llama-8B/config.json
2.2 服務化推理
打開配置文件
$ vim /usr/local/Ascend/mindie/latest/mindie-service/conf/config.json
更改配置文件
{
...
"ServerConfig" :
{
...
"port" : 1040, #自定義
"managementPort" : 1041, #自定義
"metricsPort" : 1042, #自定義
...
"httpsEnabled" : false, #測試階段可以用開啟https
...
},"BackendConfig": {
...
"npuDeviceIds" : [[0]], #因為AES200只有一個NPU
...
"ModelDeployConfig":
{
"truncation" : false,
"ModelConfig" : [
{
...
"modelName" : "qwen",
"modelWeightPath" : "/home/data/datasets/DeepSeek-R1-Distill-Llama-8B",
"worldSize" : 1, #這里的數字應和NPU的數量對應,我的測試結果結果是:如果不設置成1,執行報錯。
...
}
]
},
}
}
拉起服務化
cd /usr/local/Ascend/mindie/latest/mindie-service/bin
./mindieservice_daemon
當出現Daemon start success!
, 表示成功拉起服務
2025-02-09 14:27:32,109 [INFO] standard_model.py:155 - >>>rank:0 done ibis manager to device
2025-02-09 14:27:32,117 [INFO] npu_compile.py:20 - 310P,some op does not support
2025-02-09 14:27:32,118 [INFO] standard_model.py:172 - >>>rank:0: return initialize success result: {'status': 'ok', 'npuBlockNum': '2602', 'cpuBlockNum': '731', 'maxPositionEmbeddings': '131072'}
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Special tokens have been added in the vocabulary, make sure the associated word embeddings are fine-tuned or trained.
Daemon start success!
2.3 推理請求
當服務化推理成功后,我們就可以通過curl發送推理求來測試是否可以正常推理。
開啟一個新的終端, 并運行一下命令
time curl -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"model": "llama","messages": [{"role": "user","content": "我有三天的假期,我想去長沙玩玩,主要看看橘子洲頭、岳麓山、博物館,請給我做一個攻略"}],"max_tokens": 512,"presence_penalty": 1.03,"frequency_penalty": 1.0,"seed": null,"temperature": 0.5,"top_p": 0.95,"stream": false
}' http://127.0.0.1:1040/v1/chat/completions #其中127.0.0.1以實際ip地址為準
大致的結果如下,但是感覺結果沒有輸出全,估計是curl請求的問題,待確認:
{"id":"endpoint_common_2","object":"chat.completion","created":1739086214,"model":"llama","choices":[{"index":0,"message":{"role":"assistant","content":"<think>\n好,我現在要幫用戶制定一個三天的長沙游攻略,用戶想去橘子洲頭、岳麓山和博物館。首先,我得了解這幾個景點的地理位置和大致門票情況。\n\n橘子洲頭在長沙市中心附近,應該不需要太多時間,可以安排第一天去那里,然后順便看看周邊的商業街,比如IFS城花園,這樣比較充實。第二天可以考慮岳麓山,那里距離市區有點遠,可能需要半程停車,然后坐公交或者打車前往山內景點。第三天可以集中在博物館,比如湖南地方法院舊址和文化宮,這些都是比較著名的地方,而且都靠近市中心,方便安排。\n\n交通方面,長沙的公共交通很發達,但有些景點離市區較遠的話可能需要自駕或包車。我得提醒用戶注意這一點。另外,每個景點的開放時間也要確認,如果有特殊展覽的話會不會影響行程。\n\n住宿的話,如果是短期旅行,可以推薦一些經濟型酒店或民宿,特別是如果預算有限的話,還可以給出一些選擇建議。不過,也有可能用戶希望更高檔,所以我就簡單提一下選項吧。\n\n餐飲部分,每個地方都有一些特色美食,比如湘菜火鍋、燒烤等,要讓用戶知道能吃到當地特色,這樣他們會更滿意行程。此外,還應告知他們安全帶好風衣,因為四季變換時節氣變化較大,不同季節防護措施不同。\n\n最后,把這些內容整合成一份清晰的攻略,讓每一天都有明確的活動安排,并且盡量緊湊時間,以滿足三天之內盡可能多地點游玩。\n</think>\n\n好的!以下是一個詳細的大綱,將幫助你規劃三日之旅:\n\n---\n\n### **第一 天:橘子洲頭與城市體驗**\n**上午:橘子洲頭(Yueh-Lung Mountain)**\n1. **門票價格**:約60-80元 \n2. **游覽路線**:\n - 從入口進入后,可騎電車環島觀光,或步行登山至望云樓(免費)。\n","tool_calls":null},"finish_reason":"length"}],"usage":{"prompt_tokens":39,"completion_tokens":512,"total_tokens":551},"prefill_time":140,"decode_time_arr":[97,103,97,96,96,95,98,96,95,95,102,100,96,96,96,96,95,96,98,95,97,95,97,95,95,96,95,99,97,96,95,96,97,96,97,98,100,101,100,100,100,100,102,100,101,100,101,100,101,101,100,100,99,99,101,95,97,97,95,96,95,96,95,95,96,98,97,97,95,95,96,95,95,96,97,95,95,95,96,95,96,96,102,96,97,97,96,95,98,99,95,99,104,96,95,95,95,98,95,95,96,96,95,95,96,96,95,95,96,96,95,99,95,95,95,97,95,97,96,96,97,95,96,95,95,96,96,95,95,95,95,103,95,96,97,95,97,96,96,95,96,97,97,96,95,97,95,95,95,96,95,97,97,99,97,96,96,96,95,95,100,99,96,95,95,95,95,95,95,96,113,96,96,96,104,95,96,95,97,96,95,96,95,95,95,95,96,96,95,95,104,96,98,95,95,95,96,95,95,95,103,95,95,96,95,96,96,96,96,97,95,95,97,97,95,97,96,98,96,95,95,97,98,95,96,97,96,95,95,97,96,95,95,95,96,95,95,95,95,103,102,96,96,102,97,95,96,95,96,107,95,95,95,99,99,108,99,100,101,103,102,100,100,102,100,102,100,100,102,102,100,100,101,99,101,100,102,100,102,100,95,97,95,95,96,95,96,95,95,95,97,95,96,97,96,100,95,95,97,96,95,96,95,95,95,97,95,95,103,95,96,96,100,97,95,95,97,95,95,95,95,95,102,96,95,95,95,103,96,96,95,103,100,95,95,95,96,95,96,96,95,96,95,96,95,98,96,96,97,96,96,96,96,103,95,95,95,96,95,95,95,96,96,96,96,97,96,95,96,95,96,97,96,95,97,95,95,96,96,97,97,96,96,98,97,96,96,96,95,95,95,97,95,96,98,96,95,95,96,95,96,95,95,107,98,95,95,95,95,95,106,95,97,106,96,96,96,96,96,96,95,97,96,95,95,98,95,95,95,96,95,103,95,96,96,96,96,95,95,96,96,97,95,95,95,95,96,96,95,103,95,96,96,96,95,103,97,96,96,95,96,95,96,96,96,95,95,98,103,96,96,97,96,98,96,96,95,95,95,95,95,95,103,96,95,95,103,96,98,96,95,100,102,95,103,96,95,95,95,95,95,95,95,95,96,96,96,96,97,96,96]}
real 0m49.998s
user 0m0.011s
sys 0m0.017s
性能方面:
第一次開啟新話題比較慢,要思考1分鐘多鐘,后續基于此話題在繼續問問題會快一些,總體而言,也就是AES200也能跑大模型,只是速度方面稍慢,華為的庫支持還需要完善!