# Mindformers模型启动时因为host侧OOM导致任务被kill

**1. 系统环境**

硬件环境\(Ascend/GPU/CPU\): Ascend

软件环境: MindSpore 版本: 2.5.0、MindFormers版本：1.3.0

执行模式： 不限

Python 版本: 3.7.6

操作系统平台: linux

**2. 报错信息**

2.1 问题描述

基于Mindformers进行Telechat2 35B模型SFT训练，模型拉起训练任务时进行权重自动转换阶段失败，提示

2.2 报错信息

```
[ERROR] TBE Subprocess(task distribute] raise error[], main process disappeared!
```

**3. 根因分析**

参考错误提示，并没有CANN或者mindformers侧相关的报错，提示信息表示进程是强行结束的。

报错是发生在权重转换阶段，客户提供的权重文件是使用64卡训练出来的分布式权重文件，并进行了合并，合并后的ckpt权重大小约到130G。

当前需要使用8卡来跑训练，预期每个卡的权重大小是23G左右，客户开启了权重自动转换，mindformers拉起模型时的yaml里面配置为：

```
# 打开权重自动转换开关
auto_trans_ckpt: True
```

自动转换时，每个卡都会单独加载ckpt权重文件，相当于host侧需要把8个ckpt文件都加载host侧的内存里面，合计需要约1T的内存空间。

重新拉起一次任务，并通过top命令监控内存的使用信息，发现内存的free值逐渐减少，最后可用内存不足，然后进程被kill掉，问题复现。

针对这种打大权重文件需要进行转换的场景，建议使用离线转换方式：

[https://gitee.com/mindspore/mindformers/blob/r1.3.0/docs/feature\_cards/Transform\_Ckpt.md](https://gitee.com/mindspore/mindformers/blob/r1.3.0/docs/feature_cards/Transform_Ckpt.md)

然后mindformers使用的yaml文件直接使用转换后的权重，并将自动转换关闭

```
# 打开权重自动转换开关
auto_trans_ckpt: False
```

重新拉起模型，本次host侧没有因为内存耗尽导致触发kill进程，任务顺利拉起。

权重加载时，需要将权重文件从服务器硬盘上读到host的内存中，然后再从host内存下发到NPU的显存，在权重文件从硬盘往host内存中加载时，服务器侧内存不足导致操作系统将进程kill。

**4. 解决方案**

需要对大的权重文件进行转换时，需要评估host的可用内存是否足够，可用free -g来检查可用内存大小。如果内存不够，建议采用离线转换方式：

[https://gitee.com/mindspore/mindformers/blob/r1.3.0/docs/feature\_cards/Transform\_Ckpt.md](https://gitee.com/mindspore/mindformers/blob/r1.3.0/docs/feature_cards/Transform_Ckpt.md)

然后mindformers使用的yaml文件直接使用转换后的权重，并将自动转换关闭。

