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