原帖在 32 位 ARMv7、Ubuntu 16.04 导入非官方 PyTorch 构建,系统 glibc 为 2.23:
ImportError: /lib/arm-linux-gnueabihf/libc.so.6: version `GLIBC_2.28' not found (required by /usr/local/lib/python3.7/site-packages/torch/lib/libtorch_python.so)
系统“最新”与 wheel “最低要求”是两回事
原题的 libc6 2.23 已经是所用系统源的最新版,而非官方 wheel 需要 GLIBC_2.28。该缺口发生在动态链接器加载 libtorch_python.so 时,尚未运行 Python 模型代码。换损失函数、设置 CUDA_HOME 或只升级 pip 都不会补出系统符号。
错误已经明确指出 libtorch_python.so 需要系统没有的 GLIBC_2.28 符号版本。apt 显示 libc6 已是最新,只表示当前发行版软件源内已更新,并不表示满足该 wheel 的最低要求。
torch 还不能导入时,先用标准库确认实际平台:
import sys
import platform
import struct
print("josh050608")
print("python:", sys.executable, sys.version)
print("platform:", platform.machine(), struct.calcsize("P") * 8)
print("libc:", platform.libc_ver())
再在该 ARM 系统的终端运行 ldd --version,并保留 wheel 来源、Python 标签和架构。GLIBCXX 属于 C++ 运行库的另一组符号,升级 libstdc++ 不能补齐这里缺少的 GLIBC 符号。
可行路径取决于设备支持:选择面向现有系统 ABI 构建、且来源可信的包;迁移到设备支持的更新系统;或在目标旧系统/等价构建环境从源代码编译兼容版本。ARMv7 与 aarch64 不能混用,换 Python 虚拟环境也不会替换系统 glibc。
不要手动把新 libc.so.6 覆盖进 /lib,它是系统核心依赖;也不要用任意下载的库文件和软链接伪装成新版本。容器需要匹配设备架构及内核要求,不能靠容器运行不同指令集的 wheel。
完成迁移后,先确认 Python 位数与 wheel 架构一致,再执行 import torch 和 CPU 小张量运算。原帖给出的信息足够确认 ABI 不满足,但不足以保证某个非官方 ARMv7 包可用。
留下能决定迁移路线的最小信息
在故障 ARM 系统执行 ldd --version,再核对 Python 位数和 wheel 文件名中的平台标签。32 位 ARMv7 对应的包不等于 64 位 aarch64;即使 Python 大版本相同,ABI 和平台也要匹配。
| 条件 | 可考虑的路线 |
|---|---|
| 设备可支持更新发行版 | 备份应用后迁移到满足运行库要求的系统,再验证包 |
| 系统必须保留旧 glibc | 使用面向旧 ABI 构建的可信包,或在等价旧环境编译 |
| 只有不同架构的 wheel | 先解决架构支持,不能靠软链接或重命名安装 |
下面是不导入 torch 的平台记录脚本,可与 wheel 来源一起保存给构建者:
import sys
import sysconfig
import platform
print("implementation:", platform.python_implementation())
print("python ABI:", sysconfig.get_config_var("SOABI"))
print("platform tag base:", sysconfig.get_platform())
print("system:", platform.platform())
print("executable:", sys.executable)
不要把 GLIBC_2.28 与 GLIBCXX_3.4.xx 混为一谈。前者来自 glibc,后者通常来自 libstdc++;安装另一个 C++ 库包不能满足这里指定的 libc 符号版本。也不要把新 libc 文件覆盖到系统目录,系统其他程序同样依赖它。
选择新构建后,先在隔离应用环境中验证 import 和小型 CPU 运算,再加载真实模型。原题没有给出可确认兼容的替代 wheel,因此文章不提供一个未经验证的下载地址,也不把“从源编译”说成无需检查工具链和硬件资源的一条命令。
参考:原始求助帖;技术依据:PyTorch 官方安装指南、GNU glibc 手册、Python wheel 平台兼容标签。