DeepSeekV2-lite 昇腾 8 卡训练实验指导
本实验指导共包含实验环境准备、训练数据集准备、模型权重准备和预训练 4 个部分。
1 环境准备
1.1 拉取镜像
本次实验使用的 python 环境来自昇腾官网提供的镜像,下载地址为 https://www.hiascend.com/developer/ascendhub/detail/e26da9266559438b93354792f25b2f4a
我们选择 2024.rc3-arm 版本的镜像环境。

添加图片注释,不超过 140 字(可选)
点击“立即下载后”,会提示登录昇腾账号,登录后会出现拉取镜像的命令(第一次拉取镜像会提示用户填写申请资料):

添加图片注释,不超过 140 字(可选)
按照上述截图中的步骤执行命令,结果如下:

添加图片注释,不超过 140 字(可选)
为了提升实验效率,也可以直接加载实验环境中提前准备的镜像:

添加图片注释,不超过 140 字(可选)
1.2 创建镜像容器
拉取镜像后,就可以基于镜像创建容器了,后续我们的实验就在容器环境中进行。创建容器的命令如下:
各参数的含义如下:
-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 登录容器

添加图片注释,不超过 140 字(可选)
最下面的 fail 不影响实验。
1.4 下载依赖三方件和源码仓
我们训练 deepseekv2-lite 所需要的脚本在 mindspeed-llm 仓库中,所以需要下载 mindspeed-llm 的代码。又因为 mindspeed-llm 依赖 megatron-llm 的代码和 mindspeed 的加速特性,所以还需要下载 megatron-llm 的和 mindspeed 的代码。
首先下载 mindspeed-llm 的代码:
然后下载 megatron-llm 的代码,并且复制 megatron 目录文件到 mindspeed-llm 中:
最后下载 mindspeed 代码,并且在容器环境中用 pip 源码安装
2 训练数据集准备
由于 hugging face 下载网速较慢,我们选择从魔乐社区下载训练数据和权重。本实验选择用 wiki 数据集,下载页面如下:

添加图片注释,不超过 140 字(可选)
由于需要使用 git lfs 下载,而镜像中又没有 git lfs,所以我们需要手动安装。
2.1 安装 git lfs
或者本地下载后上传到服务器。

添加图片注释,不超过 140 字(可选)
2.2 下载 wiki 数据集
下载完的 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,示例内容如下:

添加图片注释,不超过 140 字(可选)
执行 bash examples/mcore/deepseek2_lite/data_convert_deepseek2_lite_pretrain.sh,结果如下:

添加图片注释,不超过 140 字(可选)
可以看到转换后得到的数据格式包括 bin 和 idx 后缀:

添加图片注释,不超过 140 字(可选)
.idx 文件是用于快速定位和索引 wiki 数据的结构,而 .bin 文件则包含实际的数据内容,例如经过编码的文本或嵌入向量等。这种格式的转换通常是为了优化数据的存储和读取效率,尤其是在处理大规模数据集时。
3 模型权重准备
3.1 下载权重
我们从魔乐社区下载 deepseekv2-lite 的权重:

添加图片注释,不超过 140 字(可选)
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 的值:

添加图片注释,不超过 140 字(可选)
执行结果如下:

添加图片注释,不超过 140 字(可选)
查看生成的权重文件夹,可以看到权重已经被切分了:

添加图片注释,不超过 140 字(可选)
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 在转换之前的权重目录里面:

添加图片注释,不超过 140 字(可选)
执行后,可以看到训练日志:

添加图片注释,不超过 140 字(可选)
至此,deepseekv2-lite 的 8 卡训练实验完成。
评论