【pytorch_lightning适配避坑指南】CodonTransformer模型Lightning框架NPU迁移训练全记录
收藏回复举报
【pytorch_lightning适配避坑指南】CodonTransformer模型Lightning框架NPU迁移训练全记录
新人帖
发表于2025-06-18 17:22:27
0 查看
 

 一、背景说明 

在使用昇腾910A芯片对CodonTransformer模型进行迁移训练时,遇到PyTorch Lightning框架与NPU设备的适配问题。本文详细记录从环境配置到解决各类报错的完整过程,为同类场景迁移提供参考。 

 

 二、环境配置 

python3.10.0
pytorch-lightning1.9.5 
torch2.1.0
torch-npu2.1.0.post12
torchvision0.16.0

 三、关键资源链接 

- 原始代码:[https://github.com/Adibvafa/CodonTransformer](https://github.com/Adibvafa/CodonTransformer) 

- 模型地址:[https://huggingface.co/adibvafa/CodonTransformer](https://huggingface.co/adibvafa/CodonTransformer) 

- 数据集地址:[https://huggingface.co/datasets/adibvafa/CodonTransformer](https://huggingface.co/datasets/adibvafa/CodonTransformer) 

- NPU适配参考代码:[https://gitee.com/xiaoloongfang/lightning_npu](https://gitee.com/xiaoloongfang/lightning_npu) 

- 最终执行成功的训练代码:[https://github.com/zhoutiezhu/CodonTransformer_NPU.git]

 

 四、核心问题与解决方案 

 

 1. 报错:ImportError: cannot import name 'torch_device_guard' 

-错误位置:lightning_npu/core/maxins/device_dtype_mixin.py 

-解决方案: 

  python 

  # 修改前 

  from torch_npu.utils.tensor_methods import torch_device_guard 

   

  # 修改后 

  from torch_npu.utils.tensor_methods import npu_device_patch 

   

 

 2. 报错:ImportError: cannot import name '_DEVICE' 

- 错误位置:lightning_npu/accelerators/npu.py 

- 解决方案: 

  python 

  # 修改前 

  from pytorch_lightning.utilities.types import _DEVICE 

   

  # 修改后 

  import torch_npu 

 

 3. 报错:ImportError: cannot import name '_PATH' 

- 错误位置:lightning_npu/accelerators/npu.py 

- 解决方案: 

  python 

  # 修改前 

  from pytorch_lightning.utilities.types import _PATH 

   

  # 修改后 

  from typing import Union 

 

 4. 报错:TypeError: Can't instantiate abstract class NPUAccelerator 

- 错误原因:NPUAccelerator类缺少抽象方法 

- 解决方案: 

  python 

  # 在NPUAccelerator类中补充以下方法 

  def setup_device(self, device): 

      torch_npu.npu.set_device(device) 

       

  def teardown(self): 

      pass 

 

 5. 报错:Precision '16-mixed' is invalid 

-解决方案:取消混合精度训练,移除相关配置并采用“bf16”精度进行训练 

 

 6. 报错:AttributeError: module 'torch_npu.npu' has no attribute 'native_device' 

- 错误位置:lightning_npu/core/maxins/device_dtype_mixin.py 

- 解决方案: 

  python 

  # 删除以下代码 

  native_device = str(self.device).replace("npu", torch_npu.npu.native_device) 

   

  # 替换为 

  torch_npu.npu.set_device(device_str) 

 

 7. 报错:ValueError: Expected positive integer total_steps, but got -1 

- 错误原因:学习率调度器total_steps计算错误 

- 解决方案: 

  python 

  # 手动计算steps_per_epoch 

  steps_per_epoch = self.samples_count // self.batch_size 

  total_steps = steps_per_epoch * self.trainer.max_epochs 

 

 8. 报错:RuntimeError: Cannot re-initialize NPU in forked subprocess 

- 解决方案: 

  python 

  # 训练前将数据置于CPU,训练时加载到NPU 

  # 避免多进程直接操作NPU张量 

 

 五、训练命令示例 

bash 

python finetune.py \ 

--dataset_dir 'dataset/training_data.jsonl' \ 

--checkpoint_dir './ckpt' \ 

--checkpoint_filename 'finetune.ckpt' \ 

--batch_size 6 \ 

--max_epochs 15 \ 

--num_workers 5 \ 

--accumulate_grad_batches 1 \ 

--num_gpus 1 \ 

--learning_rate 0.00005 \ 

--warmup_fraction 0.1 \ 

--save_every_n_steps 512 \ 

--seed 23 

 

 六、训练效果展示 

 模型参数统计 

| Name      | Type               | Params 

--------------------------------------------- 

0 | model | BigBirdForMaskedLM | 89.6 M 

--------------------------------------------- 

89.6 M    Trainable params 

0         Non-trainable params 

89.6 M    Total params 

358.318   Total estimated model params size (MB) 

 NPU资源使用 

+---------------------------+---------------+----------------------------------------------------+ 

| NPU     Chip              | Process id    | Process name             | Process memory(MB)      | 

+===========================+===============+====================================================+ 

| 0       0                 | 48988         | python                   | 13330                   | 

+===========================+===============+====================================================+ 

 

 训练日志片段 

Epoch 0:  12%|█████████▌                                                                       | 2/17 [14:17<1:47:13, 428.87s/it, loss=0.977, v_num=3, lr=2e-6] 

训练成功截图

%E8%AE%AD%E7%BB%83%E6%88%90%E5%8A%9F%E6%88%AA%E5%9B%BE.jpg

 

 七、总结建议 

1. NPU迁移需重点关注设备初始化、多进程管理及数据加载流程 

2. 遇到框架适配问题时,优先查看官方适配库(如lightning_npu) 

3. 混合精度训练在NPU上需谨慎配置,建议从纯精度模式开始调试 

4. 数据加载时避免直接在多进程中操作NPU张量,采用CPU中转策略 

 

希望本文能帮助更多开发者在昇腾平台上顺利完成模型迁移训练!欢迎留言交流其他适配技巧~ 

我要发帖子