问题描述
Traceback (most recent call last):
File "/root/CLIP-EBC/trainer.py", line 4, in <module>
import torch_npu
File "/root/miniconda3/envs/ebc/lib/python3.9/site-packages/torch_npu/__init__.py", line 43, in <module>
from torch_npu.utils._error_code import ErrCode, pta_error
File "/root/miniconda3/envs/ebc/lib/python3.9/site-packages/torch_npu/utils/__init__.py", line 4, in <module>
from torch_npu import _C
ImportError: libhccl.so: cannot open shared object file: No such file or directory
解决方法
解决 libhccl.so 找不到的问题
您已经找到了 libhccl.so
文件的位置,这很好!问题在于系统在运行时找不到这个库文件。虽然文件存在于文件系统中,但动态链接器不知道在哪里查找它。
解决方案
1. 设置 LD_LIBRARY_PATH 环境变量
将包含 libhccl.so
的目录添加到 LD_LIBRARY_PATH
环境变量中:
# 设置主要的库路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/lib64:/usr/local/Ascend/ascend-toolkit/latest/fwkacllib/lib64:/usr/local/Ascend/ascend-toolkit/latest/hccl/lib64
# 验证设置是否成功
echo $LD_LIBRARY_PATH
2. 验证 libhccl.so 是否可访问
# 检查库文件是否存在
ls -l /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/lib64/libhccl.so
ls -l /usr/local/Ascend/ascend-toolkit/latest/hccl/lib64/libhccl.so
# 检查是否可以被动态链接器找到
ldconfig -p | grep libhccl
3. 重新运行程序
设置好环境变量后,再次尝试运行您的程序:
python /root/CLIP-EBC/trainer.py
4. 永久设置环境变量(推荐)
要使设置永久生效,将以下内容添加到 ~/.bashrc
文件中:
# 添加到 ~/.bashrc
echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/lib64:/usr/local/Ascend/ascend-toolkit/latest/fwkacllib/lib64:/usr/local/Ascend/ascend-toolkit/latest/hccl/lib64' >> ~/.bashrc
source ~/.bashrc
5. 额外检查(如果问题仍然存在)
如果仍然遇到问题,可能还需要设置其他环境变量:
# 设置 ASCEND_HOME
export ASCEND_HOME=/usr/local/Ascend/ascend-toolkit/latest
# 设置 PYTHONPATH
export PYTHONPATH=$PYTHONPATH:/usr/local/Ascend/ascend-toolkit/latest/python/site-packages
# 重新加载环境变量
source ~/.bashrc
为什么需要这样做?
当程序运行时,它需要加载共享库(如 libhccl.so
)。系统会在预定义的路径中搜索这些库,而 /usr/local/Ascend/
不在默认搜索路径中。通过设置 LD_LIBRARY_PATH
,我们告诉系统在哪里可以找到这些必要的库文件。
验证是否解决
创建一个简单的 Python 脚本验证 torch_npu
是否可以正确导入:
import torch
import torch_npu
print(f"NPU devices available: {torch_npu.npu.device_count()}")
print(f"NPU available: {torch_npu.npu.is_available()}")
如果一切正常,应该能成功导入 torch_npu
并显示 NPU 设备信息。
注意:您需要有华为昇腾 NPU 硬件才能实际使用这些功能。如果您的服务器没有 NPU 硬件,即使解决了库路径问题,您也无法使用 NPU 加速。在这种情况下,建议使用标准的 PyTorch 安装(CPU 或 CUDA 版本)并修改代码以移除对 torch_npu
的依赖。