树莓派64位系统导入torch触发libgomp.so.1静态TLS内存分配错误求助
解决方案
- 第一步:先确认libgomp1依赖安装正常,执行命令:
sudo apt update && sudo apt install -y libgomp1
随后找到libgomp.so.1的真实路径,执行:
sudo find / -name "libgomp.so.1" 2>/dev/null
记录输出的路径,通常为/usr/lib/aarch64-linux-gnu/libgomp.so.1或者/lib/aarch64-linux-gnu/libgomp.so.1。
- 第二步:测试临时环境变量生效情况,直接在当前终端执行(替换为上一步查到的真实路径):
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1${LD_PRELOAD:+:$LD_PRELOAD}
注意:原配置写法末尾的:/$LD_PRELOAD会在LD_PRELOAD为空时引入多余冒号,导致加载失败,上述写法可规避该问题
随后直接在当前终端启动python,执行导入语句测试是否报错:
from torch.nn.utils.rnn import pad_sequence
如果临时测试可以正常导入,再进行永久配置。
- 第三步:永久生效配置任选一种即可:
- 单用户生效:将上述正确的export语句写入
~/.profile文件,而非仅~/.bashrc(后者仅在交互式bash终端加载,运行脚本、定时任务等场景不会加载),写入后执行source ~/.profile生效。 - 虚拟环境专用:如果使用conda/venv等虚拟环境,将export语句写入虚拟环境的activate脚本中,每次激活环境时自动加载。
- 全局生效:将libgomp.so.1的完整路径写入
/etc/ld.so.preload文件(需要root权限),全局所有程序都会优先加载该库。
- 单用户生效:将上述正确的export语句写入
- 备用方案:如果上述配置仍无效,可尝试以下操作:
- 启动python前先设置
export OMP_NUM_THREADS=1,降低OpenMP线程数减少TLS内存占用 - 替换为适配aarch64架构的PyTorch版本,优先从conda-forge安装arm版PyTorch,或使用树莓派社区编译好的适配whl包
- 运行脚本时直接前缀指定环境变量,无需修改全局配置:
LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1 python your_script.py - 启动python前先设置
内容的提问来源于stack exchange,提问作者Fakhruddin Babar
相关产品推荐
相关产品推荐

