FAQ
设备指定
Q:为什么我的 NPU 卡没调用起来?
通过
ASCEND_RT_VISIBLE_DEVICES
环境变量指定昇腾 NPU 卡,如ASCEND_RT_VISIBLE_DEVICES=0,1,2,3
指定使用 0,1,2,3四张 NPU 卡进行微调/推理。
提示
昇腾 NPU 卡从 0 开始编号,docker 容器内也是如此; 如映射物理机上的 6,7 号 NPU 卡到容器内使用,其对应的卡号分别为 0,1
检查是否安装 torch-npu,建议通过
pip install -e '.[torch-npu,metrics]'
安装 LLaMA-Factory。
推理报错
Q:使用昇腾 NPU 推理报错 RuntimeError: ACL stream synchronize failed, error code:507018
A:设置 do_sample: false,取消随机抽样策略
关联 issues:
微调/训练报错
Q:使用 ChatGLM 系列模型微调/训练模型时,报错 NotImplementedError: Unknown device for graph fuser
A:在 modelscope 或 huggingface 下载的 repo 里修改 modeling_chatglm.py
代码,取消 torch.jit 装饰器注释
关联 issues:
Q:微调/训练启动后,HCCL 报错,包含如下关键信息:
RuntimeError: [ERROR] HCCL error in: torch_npu/csrc/distributed/ProcessGroupHCCL.cpp:64
[ERROR] 2024-05-21-11:57:54 (PID:927000, Device:3, RankID:3) ERR02200 DIST call hccl api failed.
EJ0001: 2024-05-21-11:57:54.167.645 Failed to initialize the HCCP process. Reason: Maybe the last training process is running.
Solution: Wait for 10s after killing the last training process and try again.
TraceBack (most recent call last):
tsd client wait response fail, device response code[1]. unknown device error.[FUNC:WaitRsp][FILE:process_mode_manager.cpp][LINE:290]
Fail to get sq reg virtual addr, deviceId=3, sqId=40.[FUNC:Setup][FILE:stream.cc][LINE:1102]
stream setup failed, retCode=0x7020010.[FUNC:SyncGetDevMsg][FILE:api_impl.cc][LINE:4643]
Sync get device msg failed, retCode=0x7020010.[FUNC:GetDevErrMsg][FILE:api_impl.cc][LINE:4704]
rtGetDevMsg execute failed, reason=[driver error:internal error][FUNC:FuncErrorReason][FILE:error_message_manage.cc][LINE:53]
A:杀掉 device 侧所有进程,等待 10s 后重新启动训练。
关联 issues:
Q:使用 TeleChat 模型在昇腾 NPU 推理时,报错 AssertionError: Torch not compiled with CUDA enabled
A:此问题一般由代码中包含 cuda 相关硬编码造成,根据报错信息,找到 cuda 硬编码所在位置,对应修改为 NPU 代码。如 .cuda()
替换为 .npu()
; .to("cuda")
替换为 .to("npu")
Q:模型微调遇到报错 DeviceType must be NPU. Actual DeviceType is: cpu,例如下列报错信息
File "/usr/local/pyenv/versions/3.10.13/envs/x/lib/python3.10/site-packages/transformers-4.41.1-py3.10.egg/transformers/generation/utils.py", line 1842, in generate
result = self._sample(
File "/usr/local/pyenv/versions/3.10.13/envs/x/lib/python3.10/site-packages/transformers-4.41.1-py3.10.egg/transformers/generation/utils.py", line 2568, in _sample
next_tokens = next_tokens * unfinished_sequences + \
RuntimeError: t == c10::DeviceType::PrivateUse1 INTERNAL ASSERT FAILED at "third_party/op-plugin/op_plugin/ops/base_ops/opapi/MulKernelNpuOpApi.cpp":26, please report a bug to PyTorch. DeviceType must be NPU. Actual DeviceType is: cpu
[ERROR] 2024-05-29-17:04:48 (PID:70209, Device:0, RankID:-1) ERR00001 PTA invalid parameter
A:此类报错通常为部分 Tensor 未放到 NPU 上,请确保报错中算子所涉及的操作数均在 NPU 上。如上面的报错中,MulKernelNpuOpApi 算子为乘法算子,应确保 next_tokens 和 unfinished_sequences 均已放在 NPU 上。
Q:单卡 NPU 情况下,使用 DeepSpeed 训练模型,报错 AttributeError :'GemmaForCausalLM'obiect has no attribute"save checkpoint",此处 GemmaForCausalLM 还可能为其他模型
A:此问题一般为使用 python src/train.py
启动训练脚本或使用 llamafactory-cli train
的同时设置环境变量 FORCE_TORCHRUN
为 false 或 0 时出现。
由于 DeepSpeed 只对分布式 launcher 启动的程序中的模型用 DeepSpeedEngine
包装,包装后才有 save_checkpoint
等方法。
因此使用 torchrun
启动训练即可解决问题,即:
torchrun --nproc_per_node $NPROC_PER_NODE \
--nnodes $NNODES \
--node_rank $RANK \
--master_addr $MASTER_ADDR \
--master_port $MASTER_PORT \
src/train.py
同时使用 llamafactory-cli train
和 DeepSpeed 时,LLaMA-Factory 将自动设置 FORCE_TORCHRUN
为 1,启动分布式训练。如果您的代码中没有这个功能,请更新 LLaMA-Factory 为最新代码。
关联 issue 及 PR:
问题反馈
如果您遇到任何问题,欢迎在 官方社区 提 issue,或在 LLAMA-Factory × 昇腾交流群 内提问,我们将第一时间进行响应。
持续更新中 ...