已关闭
Qwen2.5-7B 单机预训练报错:NPU out of memory #1110
subendong创建于  1月14日关闭于  2月12日
subendong
subendong
1月14日 创建

环境信息:
服务器:Atlas800T A2 8*32G 单台
NPU驱动:25.3.rc1
固件:7.8.0.2.212
CANN:8.3.RC2
Pytorch:torch-2.7.1+cpu-cp310-cp310-manylinux_2_28_aarch64.whl
Torch-npu:torch_npu-2.7.1-cp310-cp310-manylinux_2_28_aarch64.whl
Apex:apex-0.1+ascend-cp310-cp310-linux_aarch64.whl
MindSpeed:master和2.3.0_core_r0.12.1分支,都执行了命令:pip3 install -e .
Megatron-LM:core_v0.12.1
MindSpeed-LLM:master

训练脚本部分配置:
`CKPT_LOAD_DIR="./model_weights/qwen2.5_mcore/" # 权重加载路径,填入权重转换时保存的权重路径
CKPT_SAVE_DIR="./ckpt/qwen25-7b" # 训练完成后的权重保存路径
DATA_PATH="./dataset/alpaca_text_document" # 数据集路径,填入数据预处理时保存的数据路径,注意需要添加后缀
TOKENIZER_PATH="./model_from_hf/qwen2.5_7b_hf/" # 词表路径,填入下载的开源权重词表路径

TP=1
PP=1
SEQ_LEN=1024
MBS=1
GBS=8`

报错信息:
[rank2]: RuntimeError: NPU out of memory. Tried to allocate 28.37 GiB (NPU 7; 29.49 GiB total capacity; 14.19 GiB already allocated; 14.19 GiB current active; 14.49 GiB free; 14.20 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.
image.png

麻烦看下什么原因,期待回复。

likedislike
subendongsubendong
1月14日 修改了issue 的描述
subendongsubendong
1月14日 修改了issue 的描述
subendongsubendong
1月14日 修改了issue 的描述
LinShua成员
1月15日 评论:

您好,该报错为OOM,即内存不足,建议减小当前运行的模型层数/规模,或增加运行卡数或设备数。

likedislike
LLinShua成员
1月15日 添加了label:resolved
subendong
subendong
1月15日 评论:

训练脚本默认TP=4,PP=2;文档上写的是TP=1,PP=4。完全按照文档上的来导致了OOM问题。按照默认值是可以的。
你们提供文档的时候,可否做个详细说明,比如NPU卡的规格。

likedislike
LinShua成员
1月16日 评论:

您好,已收到您的反馈,我们正在复现定位中,如有结果将第一时间告知您。

likedislike
LLinShua成员
1月16日 添加了label:bug
LLinShua成员
1月19日 删除了label:resolved
LLinShua成员
1月20日 将 LinShua 设为负责人
LinShua成员
1月27日 评论:

训练脚本默认TP=4,PP=2;文档上写的是TP=1,PP=4。完全按照文档上的来导致了OOM问题。按照默认值是可以的。
你们提供文档的时候,可否做个详细说明,比如NPU卡的规格。

@subendong

你好,按照文档来,修改成TP=1,PP=4,对应的SEQ_LEN也得修改为4096,否则会OOM;完全按文档来或者完全按照默认值都可以正常运行的。

likedislike
LLinShua成员
1月27日 添加了label:resolved
ascend-robot
ascend-robot成员
2月4日 评论:

当前Issue标记为resolved且有一段时间未进一步更新,因此我们将其标记为'stale'(闲置)状态。若你认为这是误操作,可通过添加任意评论来去除'stale'标签。标记为stale的Issue在4天内无更新活动将自动关闭。

likedislike
ascend-robotascend-robot成员
2月4日 添加了label:stale
subendong
subendong
2月6日 评论:

你好,按照文档来,修改成TP=1,PP=4,对应的SEQ_LEN也得修改为4096,否则会OOM;完全按文档来或者完全按照默认值都可以正常运行的。

@LinShua
您好,按照这个又操作了一边,还是会报OOM错误;转换和训练保持一致:TP=1,PP=4;再说明下是8*32G哦;
image.png
image.png

是我哪里没配置对吗?

likedislike
ascend-robotascend-robot成员
2月6日 删除了label:resolvedstale
tichang
tichang成员
2月12日 评论:

非常抱歉给您带来不便。目前仓库中提供的示例脚本是基于 Atlas 900 A2 PoDc / Atlas 900 A3 SuperPoD 等机型 开发和验证的,这些设备配备的是 910B 系列 64GB 显存的 NPU 卡,因此脚本中的并行配置均以此硬件条件为前提进行调优。
您当前使用的 910B4-32G 卡显存为 32GB,资源相对受限,直接沿用原脚本的配置可能会因显存不足(OOM)而无法正常运行。我们不能保证该机型能正常跑下仓上的example脚本。
针对您的机型特点,给出如下调试建议:

  1. 如果能够接受更小的序列长度,减小序列长度可以节省更多的显存
  2. 进一步进行切分,将切分策略改为TP2 PP4 或 TP8 PP1 或 TP1 PP8,从而进一步节省显存
  3. 如果您只是想要尝试拉起训练,可以更换参数量更小的模型进行训练的拉起。

希望我的回答有帮到您!

likedislike
tichang
tichang成员
2月12日 评论:

如果您目前没有其他问题,我们将根据流程关闭此 issue。
如后续有新的疑问或补充内容,欢迎随时重新打开本 issue,或另起一个新的 issue 进行提问。
感谢您的理解与支持!

likedislike
tichangtichang成员
2月12日 添加了label:resolved
tichangtichang成员
2月12日 issue状态由 TODO 改变为 DONE
tichangtichang成员
2月12日 关闭了 issue
subendong
subendong
2月13日 评论:

好的,关闭吧。感谢您的回复。

likedislike
tichang
tichang成员
2月14日 评论:

您好,这边检查了一下仓上的pretrain_qwen25_7b_32k_ptd.sh脚本,发现脚本参数中未开启冲计算,建议您也可参考重计算相关文档
https://gitcode.com/Ascend/MindSpeed-LLM/blob/master/docs/pytorch/features/recompute_relative.md
在代码中加入如下参数

    --recompute-granularity full \
    --recompute-method uniform \
    --recompute-num-layers 1 \

开启重计算,可大幅优化现存,应该能让32G机型顺利跑下跑下该脚本。

likedislike