MindSpore 1.8.1在昇腾910上训练自定义Transformer模型时出现"RuntimeError: Memory allocation failed"错误
收藏回复举报
MindSpore 1.8.1在昇腾910上训练自定义Transformer模型时出现"RuntimeError: Memory allocation failed"错误
t('forum.solved') 已解决
发表于2026-03-24 23:28:40
0 查看

MindSpore 1.8.1在昇腾910上训练自定义Transformer模型时出现"RuntimeError: Memory allocation failed"错误

各位社区的大佬们好,我在使用MindSpore进行深度学习模型训练时遇到了一个棘手的问题,已经排查了两天还是没有解决,特来求助。

我正在尝试在昇腾910 NPU上训练一个自定义的Transformer模型(基于MindSpore 1.8.1版本),模型结构相对复杂,包含12层编码器和6层解码器,隐藏维度为1024。在训练到第3个epoch时,程序突然崩溃,报错信息显示内存分配失败。奇怪的是,前两个epoch训练完全正常,loss也在稳步下降。

环境配置:

  • 硬件:华为Atlas 800训练服务器(8×昇腾910 NPU)

  • 操作系统:CentOS 7.6

  • MindSpore版本:1.8.1(Ascend版本)

关键代码片段:

import mindspore as ms
from mindspore import nn, ops
from my_transformer import CustomTransformer

# 模型初始化
model = CustomTransformer(
    src_vocab_size=50000,
    tgt_vocab_size=50000,
    hidden_size=1024,
    num_encoder_layers=12,
    num_decoder_layers=6,
    num_heads=16
)

# 优化器配置
optimizer = nn.Adam(model.trainable_params(), learning_rate=0.0001)

# 训练步骤
def train_step(data, label):
    def forward_fn(data, label):
        logits = model(data)
        loss = loss_fn(logits, label)
        return loss, logits
    
    grad_fn = ms.value_and_grad(forward_fn, None, optimizer.parameters)
    (loss, _), grads = grad_fn(data, label)
    optimizer(grads)
    return loss

错误信息:

[ERROR] DEVICE(123456,ffffffff): RuntimeError: Memory allocation failed at /home/mindspore/mindspore/ccsrc/backend/common/mem_reuse/mem_dynamic_allocator.cc:125
Total memory requested: 15.8 GB
Available memory: 3.2 GB
Batch size: 64
Current epoch: 3, step: 1250

我已经尝试过的解决方案:

  1. 将batch size从64逐步降低到16,但问题依旧出现(只是延迟到第5个epoch)

  2. 使用ms.set_context(max_device_memory="30GB")显式设置内存限制

  3. 检查了数据加载器,确认没有内存泄漏(使用memory_profiler监控)

我的疑问:

  1. 为什么内存问题会在训练中途突然出现,而不是一开始就报错?

  2. MindSpore在昇腾910上是否有特殊的内存管理机制需要配置?

我要发帖子