🧱 LLM 项目运行踩坑记录文档:缺失 CUDA 库报错解决方案
🧩 背景
在运行 llm-guard
项目时,遇到多个关于 .so
动态链接库找不到的问题,包括:
libcudnn.so.9
libcusparseLt.so.0
libnccl.so.2
这些库虽然都存在于系统或 Conda 环境中,但系统并不能正确加载它们。问题核心在于:动态链接库路径未被系统或 Python 正确识别。
🚧 报错信息汇总与分析
错误内容 | 原因分析 | 解决方案 |
---|---|---|
ImportError: libcudnn.so.9: cannot open shared object file | 系统环境变量中找不到该库 | 需要添加到 系统级环境变量 |
ImportError: libcusparseLt.so.0: cannot open shared object file | Conda 环境下缺失该库路径 | 只需在当前 Conda 环境中配置 LD_LIBRARY_PATH |
ImportError: libnccl.so.2: cannot open shared object file | 同上 | 同样添加到 当前 Conda 环境中 即可 |
🛠 解决步骤
✅ 步骤一:将 libcudnn.so.9
添加到全局系统环境变量中
查找路径:
find / -name "libcudnn.so.9" 2>/dev/null
示例找到路径:
/home/xugq/anaconda3/envs/llm-guard/lib/python3.11/site-packages/nvidia/cudnn/lib/libcudnn.so.9
操作:添加至 /etc/profile
(全局)
sudo nano /etc/profile
在文件尾部添加:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
⚠️ 确保使用
sudo ln -s
将目标libcudnn.so.9
软链接到/usr/local/lib/
sudo ln -sf /home/xugq/anaconda3/envs/llm-guard/lib/python3.11/site-packages/nvidia/cudnn/lib/libcudnn.so.9 /usr/local/lib/libcudnn.so.9
更新配置:
source /etc/profile
✅ 步骤二:将 libcusparseLt.so.0
和 libnccl.so.2
添加到当前 Conda 环境变量
查找库文件路径:
find / -name "libcusparseLt.so.0" 2>/dev/null
find / -name "libnccl.so.2" 2>/dev/null
示例路径:
libcusparseLt.so.0 ➜ /home/xugq/anaconda3/envs/llm-guard/lib/python3.11/site-packages/cusparselt/lib
libnccl.so.2 ➜ /home/xugq/anaconda3/envs/llm-guard/lib/python3.11/site-packages/nvidia/nccl/lib
创建环境变量激活脚本:
mkdir -p $CONDA_PREFIX/etc/conda/activate.d
nano $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
内容如下:
#!/bin/bash
export LD_LIBRARY_PATH=/home/xugq/anaconda3/envs/llm-guard/lib/python3.11/site-packages/cusparselt/lib:/home/xugq/anaconda3/envs/llm-guard/lib/python3.11/site-packages/nvidia/nccl/lib:$LD_LIBRARY_PATH
使配置生效:
conda deactivate
conda activate llm-guard
echo $LD_LIBRARY_PATH # 确保包含刚才两个路径
✅ 总结与建议
库名称 | 解决方式 | 原因 |
---|---|---|
libcudnn.so.9 | 添加软链接至 /usr/local/lib ,写入 /etc/profile | 系统范围可见 |
libcusparseLt.so.0 | 写入 $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh | 只在当前 Conda 环境中使用 |
libnccl.so.2 | 同上 | 同上 |
🚀 Tips
- 查看环境变量:
echo $LD_LIBRARY_PATH
- 查找库路径:
find / -name "libxxx.so.*" 2>/dev/null
- 验证链接库:
ldd your_binary | grep not
如有后续其他 .so
报错也可以沿用该策略进行处理:
- 找路径;
- 判断是否要全局或仅本环境;
- 添加至对应的
LD_LIBRARY_PATH
; - 激活环境并测试运行。
—