DeepSeekV2-lite 昇腾8卡训练实验指导

举报
yd_25562708 发表于 2025/03/01 21:02:49 2025/03/01
21 0 0
【摘要】 本实验指导共包含实验环境准备、训练数据集准备、模型权重准备和预训练4个部分。1 环境准备1.1 拉取镜像本次实验使用的python环境来自昇腾官网提供的镜像,我们选择2024.rc3-arm版本的镜像环境。点击“立即下载后”,会提示登录昇腾账号,登录后会出现拉取镜像的命令(第一次拉取镜像会提示用户填写申请资料):按照上述截图中的步骤执行命令,结果如下:为了提升实验效率,也可以直接加载实验环境...

本实验指导共包含实验环境准备、训练数据集准备、模型权重准备和预训练4个部分。

1 环境准备

1.1 拉取镜像

本次实验使用的python环境来自昇腾官网提供的镜像,我们选择2024.rc3-arm版本的镜像环境。

图片1.png

点击“立即下载后”,会提示登录昇腾账号,登录后会出现拉取镜像的命令(第一次拉取镜像会提示用户填写申请资料):

图片2.png


按照上述截图中的步骤执行命令,结果如下:

图片3.png


为了提升实验效率,也可以直接加载实验环境中提前准备的镜像:

sudo docker load < deepseek_train_image.tar

图片4.png


1.2 创建镜像容器

拉取镜像后,就可以基于镜像创建容器了,后续我们的实验就在容器环境中进行。创建容器的命令如下:

docker run -dit --ipc=host --network host --name 'jxl_llm_rc3' --privileged -v /usr/local/Ascend/driver:/usr/local/Ascend/driver  -v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware  -v /usr/local/sbin/:/usr/local/sbin/ -v /home/:/home/ swr.cn-south-1.myhuaweicloud.com/ascendhub/mindspeed-llm:2024.rc3-arm

各参数的含义如下:

-dit:-d:后台运行容器;-i:交互模式;-t:分配一个伪终端。

--ipc=host:共享宿主机的 IPC 命名空间,允许容器访问宿主机的共享内存和信号量。

--network host:使用宿主机的网络栈,容器将直接使用宿主机的网络接口,无需网络隔离。

--name 'jxl_llm_rc3':为容器指定名称 jxl_llm_rc3,方便后续管理。

--privileged:以特权模式运行容器,赋予容器几乎与宿主机相同的权限。

-v(挂载卷):/usr/local/Ascend/driver:/usr/local/Ascend/driver:将宿主机的 /usr/local/Ascend/driver 挂载到容器中。

最后传的是镜像地址。

1.3 登录容器

docker exec -it jxl_llm_rc3 /bin/bash                           

图片5.png


最下面的fail不影响实验。

1.4 下载依赖三方件和源码仓

我们训练deepseekv2-lite所需要的脚本在mindspeed-llm仓库中,所以需要下载mindspeed-llm的代码。又因为mindspeed-llm依赖megatron-llm的代码和mindspeed的加速特性,所以还需要下载megatron-llm的和mindspeed的代码。

首先下载mindspeed-llm的代码:

git clone https://gitee.com/ascend/MindSpeed-LLM.git

然后下载megatron-llm的代码,并且复制megatron目录文件到mindspeed-llm中:

git clone https://github.com/NVIDIA/Megatron-LM.git  # 如果git下载失败,可以手动从github下载
cd Megatron-LM
git checkout core_r0.8.0
cp -r megatron ../MindSpeed-LLM/

最后下载mindspeed代码,并且在容器环境中用pip源码安装

git clone https://gitee.com/ascend/MindSpeed.git
cd MindSpeed
git checkout 9b3ad3fd928  # checkout commit from MindSpeed core_r0.8.0 in 2024.12.25
pip3 install -e .

2 训练数据集准备

由于hugging face下载网速较慢,我们选择从魔乐社区下载训练数据和权重。本实验选择用wiki数据集,下载页面如下:

图片6.png


由于需要使用git lfs下载,而镜像中又没有git lfs,所以我们需要手动安装。

2.1 安装git lfs

wget https://github.com/git-lfs/git-lfs/releases/download/v3.6.1/git-lfs-linux-arm64-v3.6.1.tar.gz

或者本地下载后上传到服务器。

tar xzf git-lfs-linux-arm64-v3.6.1.tar.gz
cd git-lfs-v3.3.0
sudo ./install.sh

图片7.png


2.2 下载wiki数据集

git clone https://modelers.cn/hold-ryue-in-hand/wikipedia.git

下载完的wiki数据集非常大,有134G,而我们实验只选用其中的一部分:wikipedia /20231101.ab/ train-00000-of-00001. parquet。

2.3 数据转换

我们还需要把parquet格式的数据转成mindspeed能够处理的数据格式,转换脚本在mindspeed-llm的这个目录: examples/mcore/deepseek2_lite/data_convert_deepseek2_lite_pretrain.sh

根据实际情况配置脚本中的input和tokenizer-name-or-path以及output-prefix,示例内容如下:

图片8.png


执行 bash examples/mcore/deepseek2_lite/data_convert_deepseek2_lite_pretrain.sh,结果如下:

图片9.png


可以看到转换后得到的数据格式包括bin和idx后缀:

图片10.png


.idx 文件是用于快速定位和索引 wiki 数据的结构,而 .bin 文件则包含实际的数据内容,例如经过编码的文本或嵌入向量等。这种格式的转换通常是为了优化数据的存储和读取效率,尤其是在处理大规模数据集时。

3 模型权重准备

3.1 下载权重

我们从魔乐社区下载deepseekv2-lite的权重:

git clone https://modelers.cn/edge-sky/DeepSeek-V2-Lite.git

图片11.png


3.2 权重转换

由于上面下载的权重是hugging face格式的,还需要转化成mindspeed-llm处理的格式。

由于用到了三方件tensordict,所以还需要安装:pip install tensordict

转换命令在 mindspeed-llm的examples/mcore/deepseek2_lite/convert_ckpt_deepseek2_lite_hf2mcore.sh 路径。需要根据实际情况修改load-dir、save-dir、tokenizer-model的值:

图片12.png


执行结果如下:

图片13.png


查看生成的权重文件夹,可以看到权重已经被切分了:

图片14.png


4 预训练

准备好训练数据和权重后,我们就可以执行预训练了,预训练脚本在mindspeed-llm的examples/mcore/deepseek2_lite/pretrain_deepseek2_lite_16b_ptd_8p.sh 路径下,需要根据实际情况填写CKPT_SAVE_DIR、DATA_PATH、TOKENIZER_MODEL、CKPT_LOAD_DIR,注意DATA_PATH要填写到bin文件和idx文件的前缀,TOKENIZER_MODE在转换之前的权重目录里面:

图片15.png


执行后,可以看到训练日志:

图片16.png


至此,deepseekv2-lite的8卡训练实验完成。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。