摘要:昇思已支持在昇騰集群上訓練和推理DeepSeek-V3 671B
近日,基于昇騰AI硬件與昇思MindSpore AI框架版本的DeepSeek-V3完成開發(fā)支持并上線昇思開源社區(qū),面向開發(fā)者提供開箱即用的預訓練和推理能力,并已成功在大規(guī)模集群上預訓練和部署。
應用昇思MindSpore大模型使能套件,依托昇思多維混合分布式能力、自動并行、Dryrun集群內存仿真等技術,天級快速適配DeepSeek V3新增模型結構和分布式并行訓練能力。同時,昇思MindSpore通過深度優(yōu)化MLA、DeepSeekMoE等網絡結構的推理,實現了高效的推理部署性能。
當前,通過獲取昇思MindSpore版DeepSeek V3開源鏡像,開發(fā)者可直接進行DeepSeek-V3的預訓練和推理部署。
開源鏈接
昇思MindSpore開源社區(qū)訓練代碼:
http://www.picoinsstore.com/uploadfile/pic2020/2025/0210/20250210114133108G>
魔樂社區(qū)推理代碼:
http://www.picoinsstore.com/uploadfile/pic2020/2025/0210/20250210114133109G>
以下是完整的手把手教程,助力開發(fā)者開箱即用
【預訓練開箱流程】
MindSpore Transformers支持對DeepSeek-V3進行預訓練。倉庫中提供了一份預訓練配置文件供參考,該配置基于128臺Atlas 800T A2 (64G),使用Wikitext-2數據集進行預訓練,可參考多機教程進行使用:
http://www.picoinsstore.com/uploadfile/pic2020/2025/0210/20250210114133108G>
便于開發(fā)者上手體驗,本章節(jié)基于此配置進行修改,縮小了DeepSeek-V3模型參數量,使其能夠在單臺Atlas 800T A2 (64G)上拉起預訓練流程。
一、環(huán)境介紹
準備一臺Atlas 800T A2 (64G)訓練服務器。MindSpore Transformers的環(huán)境依賴如下:
提供了DeepSeek-V3預訓練專用Docker鏡像,通過如下步驟進行使用。
1.下載Docker鏡像
使用如下命令下載DeepSeek-V3預訓練專用鏡像:
docker pull swr.cn-central-221.ovaijisuan.com/mindformers/deepseek_v3_mindspore2.4.10-train:20250209
2.基于鏡像創(chuàng)建容器
使用如下命令新建容器:
image_name=swr.cn-central-221.ovaijisuan.com/mindformers/deepseek_v3_mindspore2.4.10-train:20250209
docker_name=deepseek_v3
docker run -itd -u root \
--ipc=host --net=host \
--privileged \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /etc/localtime:/etc/localtime \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/bin/hccn_tool \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /var/log/npu:/usr/slog \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /etc/hccn.conf:/etc/hccn.conf \
--name "$docker_name" \
"$image_name" \
/bin/bash
3.進入容器
使用如下命令進入容器,并進入代碼目錄:
docker exec -ti deepseek_v3 bash
cd /home/work/mindformers
二、數據集準備
以Wikitext-2數據集為例,參考如下步驟將數據集處理成Megatron BIN式文件。
1.下載數據集和分詞模型文件
○數據集下載:WikiText2數據集
http://www.picoinsstore.com/uploadfile/pic2020/2025/0210/20250210114134111G>
○分詞模型下載:DeepSeek-V3的tokenizer.json
http://www.picoinsstore.com/uploadfile/pic2020/2025/0210/20250210114258112G.json>
2.生成Megatron BIN格式文件
將數據集文件wiki.train.tokens和分詞模型文件tokenizer.json放置在/home/work/dataset下
使用以下命令轉換數據集文件
cd /home/work/mindformers/research/deepseek3
python wikitext_to_bin.py \
--input /home/work/dataset/wiki.train.tokens \
--output-prefix /home/work/dataset/wiki_4096 \
--vocab-file /home/work/dataset/tokenizer.json \
--seq-length 4096 \
--worker 1
三、單機配置樣例
基于預訓練配置文件pretrain_deepseek3_671b.yaml按照如下步驟操作并保存為pretrain_deepseek3_1b.yaml。
1.修改模型配置
# model config
model:
model_config:
type:DeepseekV3Config
auto_register:deepseek3_config.DeepseekV3Config
seq_length:4096
hidden_size:2048 # 修改為2048
num_layers:&num_layers 3 # 修改為3
num_heads:8 # 修改為8
max_position_embeddings:4096
intermediate_size:6144 # 修改為6144
offset:0 # 修改為0
……
2.修改MoE配置
#moe
moe_config:
expert_num:&expert_num 16 # 修改為16
first_k_dense_replace:1 # 修改為1
……
3.修改并行配置
# parallel config for devices num=8
parallel_config:
data_parallel:2 # 修改為2
model_parallel:2 # 修改為2
pipeline_stage:2 # 修改為2
expert_parallel:2 # 修改為2
micro_batch_num:µ_batch_num 4 # 修改為4
parallel:
parallel_optimizer_config:
optimizer_weight_shard_size: 8 # 修改為8
……
4.修改學習率配置
# lr schedule
lr_schedule:
type: ConstantWarmUpLR
warmup_steps: 20 # 修改為20
5.修改數據集配置
配置數據集路徑:
# dataset
train_dataset:&train_dataset
data_loader:
type:BlendedMegatronDatasetDataLoader
config:
data_path:
- 1
- "/home/work/dataset/wiki_4096_text_document" # 修改此項為數據集路徑
……
配置數據集并行通信配置路徑:
# mindspore context init config
context:
ascend_config:
parallel_speed_up_json_path:
"/home/work/mindformers/research/deepseek3/parallel_speed_up.json" # 修改此項為數據集并行通信配置路徑
四、拉起任務
進入代碼根目錄并執(zhí)行以下命令拉起單臺Atlas 800T A2(64G)預訓練任務:
cd /home/work/mindformers
bash scripts/msrun_launcher.sh "run_mindformer.py \
--register_path research/deepseek3 \
--config research/deepseek3/deepseek3_671b/pretrain_deepseek3_1b.yaml"
啟動腳本執(zhí)行完畢會在后臺拉起任務,日志保存在/home/work/mindformers/output/msrun_log下,使用以下命令查看訓練日志(由于開啟了流水并行pipeline_stage: 2,loss只顯示在最后一張卡的日志worker_7.log中,其他日志顯示loss為0):
tail -f /home/work/mindformers/output/msrun_log/worker_7.log
訓練loss的曲線圖如下
訓練過程中的權重checkpoint將會保存在/home/work/mindformers/output/checkpoint下。
【推理部署開箱流程】
采用BF16格式的模型權重文件,運行DeepSeek-V3推理服務,需要4臺Atlas 800I A2(64G)服務器。為縮短開發(fā)部署周期,昇思MindSpore此次提供了docker容器鏡像,供開發(fā)者快速體驗。其主要操作步驟如下:
●執(zhí)行以下Shell命令,下載昇思MindSpore DeepSeek-V3推理容器鏡像:
docker pull
swr.cn-central-221.ovaijisuan.com/mindformers/deepseek_v3_mindspore2.5.0-infer:20250209
●執(zhí)行以下Shell命令,啟動容器鏡像,后續(xù)操作將均在容器內進行:
docker run -itd --privileged --name=deepseek-v3 --net=host \
--shm-size 500g \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device /dev/devmm_svm \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/local/sbin:/usr/local/sbin \
-v /etc/hccn.conf:/etc/hccn.conf \
deepseek_v3_mindspore2.5.0-infer:20250209 \
bash
●執(zhí)行以下Shell命令,將用于下載存儲DeepSeek-V3權重文件的路徑(開箱示例中為./model_path),添加至白名單:
export HUB_WHITE_LIST_PATHS=./model_path
●使用以下Python腳本,從魔樂社區(qū)下載昇思MindSpore版本的DeepSeek-V3權重文件至指定路徑。完整的權重文件約1.4TB,請確保指定路徑下有充足的可用磁盤空間:
from openmind_hub import snapshot_download
snapshot_download(
repo_,
local_dir="./model_path",
local_dir_use_symlink=False
)
●將./model_path/examples/predict_deepseek3_671B.yaml文件中的load_checkpoint參數配置為權重文件夾絕對路徑,并將tokenizer_file參數和vocab_file參數配置為tokenizer.json文件絕對路徑。
●在第1臺至第4臺服務器上,分別執(zhí)行以下Shell命令,通過msrun_launcher.sh啟動單次推理測試腳本run_deepseekv3_predict.py,完成后將顯示“生抽和老抽的區(qū)別是什么? ”的問題回復。其中,master_ip需修改設置為第1臺服務器的實際IP地址。
# 第1臺服務器(Node 0)
export PYTHONPATH=/root/mindformers/:$PYTHONPATH
export HCCL_OP_EXPANSION_MODE=AIV
export MS_ENABLE_LCCL=off
master_ip=192.168.1.1
cd model_path/DeepSeek-V3/examples
bash msrun_launcher.sh "run_deepseekv3_predict.py" 32 8 $master_ip 8888 0
output/msrun_log False 300
# 第2臺服務器(Node 1)
export PYTHONPATH=/root/mindformers/:$PYTHONPATH
export HCCL_OP_EXPANSION_MODE=AIV
export MS_ENABLE_LCCL=off
master_ip=192.168.1.1
cd model_path/DeepSeek-V3/examples
bash msrun_launcher.sh "run_deepseekv3_predict.py" 32 8 $master_ip 8888 1
output/msrun_log False 300
# 第3臺服務器(Node 2)
export PYTHONPATH=/root/mindformers/:$PYTHONPATH
export HCCL_OP_EXPANSION_MODE=AIVexport MS_ENABLE_LCCL=off
master_ip=192.168.1.1
cd model_path/DeepSeek-V3/examples
bash msrun_launcher.sh "run_deepseekv3_predict.py" 32 8 $master_ip 8888 2 output/msrun_log False 300
# 第4臺服務器(Node 3)
export PYTHONPATH=/root/mindformers/:$PYTHONPATH
export HCCL_OP_EXPANSION_MODE=AIV
export MS_ENABLE_LCCL=off
master_ip=192.168.1.1
cd model_path/DeepSeek-V3/examples
bash msrun_launcher.sh "run_deepseekv3_predict.py" 32 8 $master_ip 8888 3
output/msrun_log False 300
●此外,還可參考魔樂社區(qū)MindSpore-Lab/DeepSeek-V3模型倉的ReadMe指引,進行推理服務化部署,然后通過訪問與OpenAI兼容的RESTful服務端口,體驗多輪對話服務。
1.MindSpore支持DeepSeekV3增量模塊的快速開發(fā)
DeepSeekV3的關鍵網絡結構的支持:
●MTP:在MTP模塊中,MindSpore通過shard()接口對MTP入口處的激活融合結構配置了序列并行,消除不必要的通訊重排。通過set_pipeline_stage()接口實現了embedding矩陣在first_stage和last_stage間的參數共享,即由first_stage負責維護embedding的參數更新,訓練前向時發(fā)送給last_stage,訓練反向時從last_stage回收梯度。
●AuxFreeBalance:MindSpore的MoE模塊中已支持全局的Expert負載統(tǒng)計, AuxFree Balance機制的實現是在callback中新增了根據全局專家負載而更新專家偏置的邏輯,從而達到在每個train step結束后做一次負載均衡調整的目的。
●MoESigmoid激活:在Router score后的激活函數部分新增了可配置項,用戶可以通過yaml文件靈活選擇softmax或sigmoid作為激活函數,支持開發(fā)者靈活選擇。
2.MindSpore對于DeepSeekV3推理網絡的實現和優(yōu)化
MindSpore針對DeepSeek V3的網絡結構特點,高效地實現和優(yōu)化了更高效的推理網絡,最大化地壓縮算子下發(fā)耗時和提升網絡推理性能。
●MLA:將FC、MatMul等超過10個小算子,融合成單個InferAttention-MLA算子,然后將其與已有的PageAttention算子,組合實現MLA模塊功能。同時,在InferAttention-MLA算子內,設計了Key-Value張量存儲復用機制,減少存儲資源占用。
圖1 MLA推理網絡實現原理
●DeepSeekMoE:MindSpore優(yōu)化精簡了MoE的推理代碼實現,并新增實現MoeUnpermuteToken、MoeInitRouting等多個融合大算子,用于組合實現DeepSeek-V3的MoE單元,降低了單個MoE單元的推理時延。
圖2 DeepSeekMoE推理網絡實現原理
●圖編譯:MindSpore推理使用了圖編譯進行加速,通過對整圖進行Pattern匹配,無需修改模型腳本,即可實現整圖的通用融合。以DeepSeekV3為例,在圖編譯過程中實現了Add+RmsNorm、SplitWithSize+SiLU+Mul等眾多Pattern的自動融合。
圖3 圖編譯原理
3.MindSpore框架特性助力DeepSeekV3訓練性能提升
DeepSeek V3的訓推適配過程中,通過MindSpore的MoE模塊優(yōu)化、Dryrun仿真等技術,在優(yōu)化MoE的訓練流程的同時,還實現了更高效的多維混合并行。
●MoE模塊優(yōu)化:在MoE模塊中可支持多種主流結構可配置,如共享專家、路由專家個數、激活函數選擇等,極大地提升了模型的靈活性。在MoE并行方面支持TP-extend-EP、路由序列并行、MoE計算通訊掩蓋、分組AllToAll通訊等多種并行模式和并行優(yōu)化,用戶可在配置中更靈活地使用相關并行加速能力。
●Dryrun集群內存仿真與自動負載均衡:MindSpore的Dryrun工具可以根據訓練任務模擬出集群中每卡的內存占用情況,從而在不實際占用集群的情況下,為訓練的分布式并行策略調優(yōu)提供快捷反饋。自動負載均衡工具SAPP為DeepSeek V3通過精確建模內存和計算負載,在內存約束條件下,求解最優(yōu)的流水線并行的各Stage層數與重計算量,分鐘級開銷內自動獲得最優(yōu)流水線配置。
下一步,昇思MindSpore開源社區(qū)將上線DeepSeek V3微調樣例與R1版本鏡像,為開發(fā)者提供開箱即用的模型。未來,昇思開源社區(qū)將依托豐富的技術能力,持續(xù)優(yōu)化DeepSeek V3系列模型的性能,加速模型從訓練到生產部署端到端的創(chuàng)新效率,為開源開發(fā)者進行大模型創(chuàng)新提供了高效易用的基礎軟件與技術生態(tài),促進千行萬業(yè)智能化轉型升級。
在使用模型中,有任何疑問和建議,均可通過社區(qū)進行反饋。
昇思MindSpore開源社區(qū)DeepSeek V3使用問題討論issue:
http://www.picoinsstore.com/uploadfile/pic2020/2025/0210/20250210114259117G>
昇騰社區(qū)昇思論壇DeepSeek V3使用問題討論帖:
http://www.picoinsstore.com/uploadfile/pic2020/2025/0210/20250210114259118G>
(免責聲明:本網站內容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網站出現的信息,均僅供參考。本網站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
任何單位或個人認為本網站中的網頁或鏈接內容可能涉嫌侵犯其知識產權或存在不實內容時,應及時向本網站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內容或斷開相關鏈接。 )