更新时间:2024-11-21 GMT+08:00
分享

附录:训练常见问题

问题1:在训练过程中遇到NPU out of memory

解决方法:

  1. 容器内执行以下命令,指定NPU内存分配策略的环境变量,开启动态内存分配,即在需要时动态分配内存,可以提高内存利用率,减少OOM错误的发生。
    export PYTORCH_NPU_ALLOC_CONF = expandable_segments:True
  2. 将yaml文件中的per_device_train_batch_size调小,重新训练如未解决则执行下一步。
  3. 替换深度学习训练加速的工具或增加zero等级,可参考模型NPU卡数、梯度累积值取值表,如原使用Accelerator可替换为Deepspeed-ZeRO-1,Deepspeed-ZeRO-1替换为Deepspeed-ZeRO-2以此类推,重新训练如未解决则执行下一步。
    1. - ZeRO-0 数据分布到不同的NPU
    2. - ZeRO-1 Optimizer States分布到不同的NPU
    3. - ZeRO-2 Optimizer States、Gradient分布到不同的NPU
    4. - ZeRO-3 Optimizer States、Gradient、Model Parameter分布到不同的NPU
  4. 增加卡数重新训练,未解决找相关人员定位。

问题2:访问容器目录时提示Permission denied

解决方法:

由于在容器中没有相应目录的权限,会导致访问时提示Permission denied。可以在宿主机中对相关目录做权限放开,执行命令如下。

chmod 777 -R ${dir}

问题3:训练过程报错:ImportError: XXX not found in your environment: flash_attn

根因:昇腾环境暂时不支持flash_attn接口

规避措施:修改dynamic_module_utils.py文件,将180-184行代码注释掉

vim /home/ma-user/anaconda3/envs/PyTorch-2.1.0/lib/python3.9/site-packages/transformers/dynamic_module_utils.py

问题4:Error waiting on exit barrier错误

错误截图:

报错原因:多线程退出各个节点间超时时间默认为300s,时间设置过短。

解决措施:

修改容器内torch/distributed/elastic/agent/server/api.py文件参数:

vim /home/ma-user/anaconda3/envs/PyTorch-2.2.0/lib/python3.10/site-packages/torch/distributed/elastic/agent/server/api.py

修改def _exit_barrier(self)方法中的barrier_timeout参数,修改后如图1所示。

#修改前
barrier_timeout=self._exit_barrier_timeout
#修改后
barrier_timeout=3000
图1 修改后的barrier_timeout参数

问题5:训练完成使用vllm0.6.0框架推理失败:

错误截图:

报错原因:

训练时transformers版本要求为4.45.0,训练完成后保存的tokenizer.json文件中的“merges”时保存的是拆开的列表不是字符串,导致推理异常

解决措施,以下两种方法任选其一:

  1. 更新transformes和tokenizers版本
    • GLM4-9B模型,容器内执行以下步骤:
      pip install transformers==4.43.2
    • 其它模型,容器内执行以下步骤:
      pip install transformers==4.45.0
      pip install tokenizers==0.20.0
  2. 使用原始hf权重的tokenizer.json覆盖保存的tokenizer.json即可,如llama3-8b_lora具体过程如下:
    # 进入模型tokenizer目录
    cd /home/ma-user/ws/tokenizers/llama3-8b/
    # 替换tokenizer.json文件
    cp -f tokenizer.json /home/ma-user/ws/saves/rm/llama3-8b/lora/tokenizer.json

问题6:训练过程中报依赖包tyro错误:"ModuleNotFoundError: No module named 'tyro'"

错误截图:

报错原因:未指定tyro依赖包版本,导致安装依赖为最新0.9.0版本导致与其他依赖冲突

解决措施:任务前容器内更新'tyro'版本为0.8.14或以下版本

pip install tyro==0.8.14

相关文档