使用 MindSpore 训练 DeepSeek-V3 模型
MindeSpore 已经适配 DeepSeek-V3 的训练推理啦,下面是使用 MindSpore 对DeepSeek-V3做训练的过程。
一、环境确认
这里呢我使用的是 8张 910B2 的显卡:

其中 MindSpore Transformers 的环境依赖如下:
| Python | MindSpore | CANN | 固件与驱动 |
|---|---|---|---|
| 3.10 | 2.4.10 | 8.0.RC3.betaq | 24.1.RC3 |
也可以使用为 DeepSeek-V3 预训练专门配置的 Docker 镜像,在容器中已经拉取了 deepseek-V3 仓库的代码
# 下载镜像
docker pull swr.cn-central-221.ovaijisuan.com/mindformers/deepseek_v3_mindspore2.4.10-train:20250209# 创建环境变量
export image_name=swr.cn-central-221.ovaijisuan.com/mindformers/deepseek_v3_mindspore2.4.10-train:20250209
export 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# 进入容器
docker exec -ti deepseek_v3 bash
二、数据集准备
预训练需要用到两个数据集,分别是 wikiText2 和 分词模型
# 下载 WikiText2数据集
wget https://ascend-repo-modelzoo.obs.cn-east-2.myhuaweicloud.com/MindFormers/dataset/wikitext-2/wikitext-2-v1.zip
# 解压数据集
unzip ./wikitext-2-v1.zip# 下载分词模型(需要科学的上网)
wget https://huggingface.co/deepseek-ai/DeepSeek-V3/resolve/main/tokenizer.json # 上传数据集文件 wiki.train.tokens 和分词模型文件tokenizer.json 到服务器的 /root 目录下
scp -P <端口号> wikitext-2/wiki.train.tokens root@<ip地址>:/root
scp -P <端口号> tokenizer.json root@<ip地址>:/root# 从宿主机器复制 数据集文件 wiki.train.tokens 和分词模型文件tokenizer.json 到容器的 /home/work/dataset 目录下# 容器内创建文件夹
mkdir dataset# 宿主机器上执行 docker cp
docker cp tokenizer.json deepseek_v3:/home/work/dataset
docker cp wiki.train.tokens deepseek_v3:/home/work/dataset
在预训练前,我们首先需要处理一下数据集,转换为 Megatron bin 文件
# 在容器中执行
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 \
--workers 2

三、配置文件修改
基于预训练配置文件 pretrain_deepseek3_671b.yaml 按照如下步骤操作并保存为 pretrain_deepseek3_1b.yaml
cd /home/work/mindformers/research/deepseek3/deepseek3_671b
cp pretrain_deepseek3_671b.yaml pretrain_deepseek3_1b.yaml
3.1 修改模型配置
# model config
model:model_config:type: DeepseekV3Configauto_register: deepseek3_config.DeepseekV3Configseq_length: 4096hidden_size: 2048 # 修改为2048num_layers: &num_layers 3 # 修改为3num_heads: 8 # 修改为8max_position_embeddings: 4096intermediate_size: 6144 # 修改为6144offset: 0 # 修改为0
3.2 修改模型配置
#moe
moe_config:expert_num: &expert_num 16 # 修改为16first_k_dense_replace: 1 # 修改为1
3.3 修改并行配置
# parallel config for devices num=8
parallel_config: data_parallel: &dp 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
3.4 修改学习率配置
# lr schedulelr_schedule:type: ConstantWarmUpLRwarmup_steps: 20
3.5 修改数据集配置
配置数据集路径
# datasettrain_dataset: &train_datasetdata_loader:type: BlendedMegatronDatasetDataLoaderconfig:data_path:- 1- "/home/work/dataset/wiki_4096_text_document" # 修改此项为数据集路径
配置数据集并行通信配置路径
# mindspore context init configcontext:ascend_config:parallel_speed_up_json_path: "/home/work/mindformers/research/deepseek3/parallel_speed_up.json" # 修改此项为数据集并行通信配置路径
四、启动训练任务
代码根目录并执行以下命令拉起单台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"
启动脚本执行完毕会在后台拉起任务,日志保存在 /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
训练过程中的权重 checkpoint 将会保存在 /home/work/mindformers/output/checkpoint 下。
开源链接
昇思MindSpore开源社区训练代码
魔乐社区推理代码
开箱即用教程
注: 不同的终端中 \ 符号可能会影响命令的执行,如果相关命令报错可以尝试去掉 \ 进行尝试
相关文章:
使用 MindSpore 训练 DeepSeek-V3 模型
MindeSpore 已经适配 DeepSeek-V3 的训练推理啦,下面是使用 MindSpore 对DeepSeek-V3做训练的过程。 一、环境确认 这里呢我使用的是 8张 910B2 的显卡: 其中 MindSpore Transformers 的环境依赖如下: PythonMindSporeCANN固件与驱动3.1…...
生成对抗网络(GAN)的“对抗“过程解析:从图像合成到药物发现的跨领域应用
技术原理(数学公式示意图) 核心对抗公式 min G max D V ( D , G ) E x ∼ p d a t a [ log D ( x ) ] E z ∼ p z [ log ( 1 − D ( G ( z ) ) ) ] \min_G \max_D V(D,G) \mathbb{E}_{x\sim p_{data}}[\log D(x)] \mathbb{E}_{z\sim p_…...
DeepSeek R1完全本地部署实战教程01-课程大纲
一、课程体系 二、学习目标: 了解基础知识掌握安装部署学会搭建可视化界面能力水平进阶三、课程特点: 案例驱动工程实战完整体系四、课程大纲 1.DeepSeek R1 项目运行演示 【视频课程】 (1)可视化交互 (2)联网搜索 (3)本地知识库 2.环境安装部署 【视频课程】 (1)软…...
redis cluster测试
集群节点信息这时候停掉一个master 172.30.60.31 从集群信息集中我们可以看到172.30.60.31的slave是172.30.60.41,查看41的日志,发现他成为了新的master 这时候我们在将172.30.60.41也杀死,会发现集群异常了 尝试把172.30.60.31启动ÿ…...
跨平台AES/DES加密解密算法【超全】
算法说明 要实现在 WinForm、Android、iOS、Vue3 中使用 相同的算法,确保各平台加密结果互通 一、统一加密参数 算法: AES-256-CBC 密钥: 32字节(示例中使用固定字符串生成) IV: 16字节 填充模式: PKCS7 字符编码: UTF-8 输出格式: Base64二、各平台实现代码...
关于前后端分离跨域问题——使用DeepSeek分析查错
我前端使用ant design vue pro框架,后端使用kratos框架开发。因为之前也解决过跨域问题,正常是在后端的http请求中加入中间件,设置跨域需要通过的字段即可,代码如下所示: func NewHTTPServer(c *conf.Server, s *conf…...
数据恢复-01-机械硬盘的物理与逻辑结构
磁盘存储原理 磁盘存储数据的原理: 磁盘存储数据的原理是利用磁性材料在磁场作用下的磁化性质,通过在磁盘表面上划分成许多小区域,根据不同的磁化方向来表示0和1的二进制数据,通过读写磁头在磁盘上的移动,可以实现数据…...
pytest asyncio 支持插件 pytest-asyncio
pytest 是 Python 测试框架,但其不支持基于 asyncio 的异步程序(例如,测试 FastAPI 异步代码),pytest-asyncio 是一个 pytest 插件,该插件赋予 pytest 可以测试使用 asyncio 库代码的能力。 https://github…...
网络工程师 (35)以太网通道
一、概念与原理 以太网通道,也称为以太端口捆绑、端口聚集或以太链路聚集,是一种将多个物理以太网端口组合成一个逻辑通道的技术。这一技术使得多个端口能够并行工作,共同承担数据传输任务,从而提高了网络的传输能力和可靠性。 二…...
USB2.03.0摄像头区分UVC相机在linux中的常用命令
这里是引用 一. USB2.0 & 3.0接口支持区分 1.1. 颜色判断 USB接口的颜色并不是判断版本的可靠标准,但根据行业常见规范分析如下: USB接口颜色与版本对照表: 接口颜色常见版本内部触点数量传输速度黑色USB2.04触点480 Mbps (60 MB/s)白…...
【推理llm论文精度】DeepSeek-R1:强化学习驱动LLM推理能力飞跃
最近deepseek R1模型大火,正好复习一下他家的技惊四座的论文https://arxiv.org/pdf/2501.12948 近年来,大型语言模型(LLM)在推理能力上取得了显著进展,但如何进一步有效提升仍然是研究热点。DeepSeek-AI发布了 DeepS…...
从零搭建SpringBoot3+Vue3前后端分离项目基座,中小项目可用
文章目录 1. 后端项目搭建 1.1 环境准备1.2 数据表准备1.3 SpringBoot3项目创建1.4 MySql环境整合,使用druid连接池1.5 整合mybatis-plus 1.5.1 引入mybatis-plus1.5.2 配置代码生成器1.5.3 配置分页插件 1.6 整合swagger3(knife4j) 1.6.1 整…...
使用 Python 爬虫和 FFmpeg 爬取 B 站高清视频
以下是一个完整的 Python 爬虫代码示例,用于爬取 B 站视频并使用 FFmpeg 合成高清视频。 1. 准备工作 确保安装了以下 Python 库和工具: bash复制 pip install requests moviepy2. 爬取视频和音频文件 B 站的视频和音频文件通常是分开存储的&#x…...
学习数据结构(9)栈和队列上
1.栈的概念 栈是一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作 的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出(先进先出)的原则 栈的插入操作叫做进栈/压栈/入栈ÿ…...
【ESP32】ESP-IDF开发 | WiFi开发 | HTTP服务器
1. 简介 1.1 HTTP HTTP(Hyper Text Transfer Protocol),全称超文本传输协议,用于从网络服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档…...
hbase合并队列超长问题分析
问题现象 hbase集群合并队列超长,有节点上合并任务已经运行超过1天未结束,合并队列总长不断增加。 问题分析 参数配置: 配置参数默认值含义hbase.hregion.memstore.flush.size128MMemStore达到该值会Flush成StoreFilehbase.hregion.memstore.block.multiplier4当region中…...
【YOLOv11改进- 主干网络】YOLOv11+CSWinTransformer: 交叉窗口注意力Transformer助力YOLOv11有效涨点;
YOLOV11目标检测改进实例与创新改进专栏 专栏地址:YOLOv11目标检测改进专栏,包括backbone、neck、loss、分配策略、组合改进、原创改进等 本文介绍 发paper,毕业皆可使用。 本文给大家带来的改进内容是在YOLOv11中更换主干网络为CSWinTransformer,助力YOLOv11有效涨点,…...
滚动弹幕案例
滚动弹幕案例 一、需求 1.页面上漂浮字体大小不一、颜色不一,从左向右滚动的弹幕; 2.底部中间有一个发送功能,可以发送新的弹幕; 3.底部的发送部分可以向下收起和弹出。 二、html <div class"container"><…...
图像处理篇---基本OpenMV图像处理
文章目录 前言1. 灰度化(Grayscale)2. 二值化(Thresholding)3. 掩膜(Mask)4. 腐蚀(Erosion)5. 膨胀(Dilation)6. 缩放(Scaling)7. 旋转…...
Linux软件编程(2)
一、标准IO 1.fread/fwrite size_t fwrite (const void *ptr,size_t size,size_t nmemb,FILE *stream); 功能:函数从指定的内存位置开始,将一块数据写入到指定的文件流中。 参数: ptr:指向要写入文件的数据块的指针 size:要写入的每个数据…...
vue框架生命周期详细解析
Vue.js 的生命周期钩子函数是理解 Vue 组件行为的关键。每个 Vue 实例在创建、更新和销毁过程中都会经历一系列的生命周期阶段,每个阶段都有对应的钩子函数,开发者可以在这些钩子函数中执行特定的操作。 Vue 生命周期概述 Vue 的生命周期可以分为以下几…...
2010年下半年软件设计师考试上午真题的知识点整理(附真题及答案解析)
以下是2010年下半年软件设计师考试上午真题的知识点分类整理,涉及定义的详细解释,供背诵记忆。 1. 计算机组成原理 CPU与存储器的访问。 Cache的作用: 提高CPU访问主存数据的速度,减少访问延迟。存储器的层次结构: 包括寄存器、Cache、主存和…...
459重复的子字符串(substr)
1、题目描述 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。 2、示例 示例 1: 输入: s "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。示例 2: 输入: s "aba" 输出: false示例 3: 输入: s …...
腿足机器人之五- 粒子滤波
腿足机器人之五粒子滤波 直方图滤波粒子滤波 上一篇博客使用的是高斯分布结合贝叶斯准则来估计机器人状态,本篇是基于直方图和粒子滤波器这两种无参滤波器估计机器人状态。 直方图方法将状态空间分解成有限多个区域,并用直方图表示后验概率。直方图为每个…...
OpenAI 快速入门
文章来源:OpenAI开发者平台 | OpenAI开发文档|OpenAI中文官方文档|ChatGPT中文版|ChatGPT教程 开发人员快速入门 了解如何发出您的第一个 API 请求。 OpenAI API 为最先进的 AI 模型提供了一个简单的接口,用于自然语言处理、图像生成、语义搜索和语音识…...
React通用登录/注销功能实现方案(基于shadcn/ui)
React通用登录/注销功能实现方案(基于shadcn/ui) 一、功能需求分析二、通用功能封装1. 通用登录表单组件2. 认证Hook封装 三、功能使用示例1. 登录页面实现2. 用户菜单实现 四、路由保护实现五、方案优势 一、功能需求分析 需要实现以下核心功能&#x…...
Django中数据库迁移命令
在 Django 中,数据库迁移是确保数据库结构与 Django 模型定义保持一致的重要过程。以下是 Django 中常用的数据库迁移命令: 1. python manage.py makemigrations 功能:此命令用于根据 Django 项目的模型文件(models.pyÿ…...
spring214
spring父子容器: 为什么会有spring父子容器,,因为一般大一点的项目都是分模块的,,不同的人开发不同的模块,,可以在两个不同的模块中,,使用相同的beanName,&a…...
AI 编程工具—Cursor 进阶篇 数据分析
AI 编程工具—Cursor 进阶篇 数据分析 上一节课我们使用Cursor 生成了北京房产的销售数据,这一节我们使用Cursor对这些数据进行分析,也是我们尝试使用Cursor 去帮我们做数据分析,从而进一步发挥Cursor的能力,来帮助我们完成更多的事情 案例一 房产销售数据分析 @北京202…...
搭建Deepseek推理服务
概述: 本文介绍用Open webui ollama搭建一套Deepseek推理服务,可以在web页面上直接进行对话。作为体验搭建的是Deepseek 7b参数版本 首先选择一个云厂商创建一台ubuntu系统的虚拟机,带公网IP,通过shell登录虚拟机完成以下操作&…...
