WinError 126 加载 fbgemm.dll 失败:文件存在时查它的依赖 DLL

简介: 该报错表明fbgemm.dll虽存在,但其某级依赖(如VC++运行库、libomp140等)缺失或架构不匹配。需用`dumpbin /DEPENDENTS`逐级分析依赖树,结合Python位数与torch包元数据精准定位,严禁随意下载DLL替换。

原帖确认 fbgemm.dll 存在,但 import torch 仍提示“or one of its dependencies”:

OSError: [WinError 126] can't find this module. Error loading "d:\anaconda3\envs\RN\lib\site-packages\torch\lib\fbgemm.dll" or one of its dependencies.

主 DLL 存在,不代表依赖树完整

原题 fbgemm.dll 已在磁盘上,报错也明确说“或其依赖”。应查真正无法加载的依赖与架构,而不是重复下载主 DLL。某些 CSDN 文章建议从 DLL 下载站补文件,不能据此采用未经来源核验的系统库替换。

Windows 的加载错误也可能指向依赖缺失或架构不匹配。先记录 Python 与包元数据,不要在 torch 尚不能导入时依赖它来诊断。

import sys
import struct
from importlib.metadata import distribution
print("josh050608")
print("python:", sys.executable, sys.version, struct.calcsize("P") * 8)
dist = distribution("torch")
print("torch package:", dist.version, dist.locate_file("torch/lib/fbgemm.dll"))

使用 Visual Studio 开发者命令提示符中的 dumpbin /DEPENDENTS 检查报错路径下的 fbgemm.dll;它列出直接依赖,缺失项还需沿依赖树继续检查。记录真正缺的是哪个 DLL,不能因为主文件存在就反复复制同一个文件。

若缺 MSVC 运行库,按 Microsoft 官方支持说明安装/修复与 Python 架构匹配的运行库。若定位到特定 PyTorch Windows 构建的 OpenMP 依赖问题,应查该构建的官方 issue/修复版本,使用官方安装器或匹配的已修复包。单装 VC Redistributable 不保证补齐所有 OpenMP 组件。

不要从随机 DLL 下载站取文件放进 System32;应从对应开发工具或包的官方分发来源恢复依赖。在独立环境验证兼容包,比随意修改系统搜索路径更易定位。

最后关闭所有 Python/Notebook 进程,在同一解释器测试 import torch 和 CPU 小张量运算。原帖没有完整版本和依赖扫描结果,因此不能断言一定缺 libomp140。

把直接依赖与间接依赖逐级核对

在 Visual Studio 开发者命令提示符中,对原错误里的确切路径运行下面命令。示例路径来自原题,自己的环境应替换为实际输出:

dumpbin /DEPENDENTS "d:\anaconda3\envs\RN\lib\site-packages\torch\lib\fbgemm.dll"

列出的 DLL 名并不自动说明“缺失”;还要确认 Windows 加载器能在当前进程搜索路径找到相同架构的文件,并继续查看间接依赖。错误可能涉及 MSVC、OpenMP 或其他运行库,必须以扫描结果和对应构建记录为依据。

下面标准库检查记录包文件与解释器位数,不调用 LoadLibrary,也不修改 PATH:

import sys
import struct
from importlib.metadata import distribution
package = distribution("torch")
library = package.locate_file("torch/lib/fbgemm.dll")
print("interpreter:", sys.executable)
print("bits:", struct.calcsize("P") * 8)
print("torch distribution:", package.version)
print("dll exists/path:", library.is_file(), library)

若确认缺 MSVC 组件,使用 Microsoft 官方运行库安装或修复程序;若是已知构建的 OpenMP 分发问题,按官方 issue 的影响版本和修复方式处理。单装某个运行库不保证覆盖全部依赖,不要把“主文件存在”直接解释成“肯定缺 libomp140”。

修复后退出全部 Python 进程,再从失败解释器导入 torch,做 CPU 小运算,最后启动原项目。保留依赖扫描结果与所用包来源,方便确认问题确实在依赖层解决。

参考:原始求助帖;技术依据:Microsoft Visual C++ 运行库、PyTorch 官方 fbgemm 依赖问题记录、pip 官方用法、Microsoft DUMPBIN /DEPENDENTS。

相关文章
|
2天前
|
缓存 Unix PyTorch
OSError: [Errno 24] Too many open files:两个 DataLoader 可以 zip,先查文件描述符
原帖双Loader并发读取ZIP导致“Too many open files”(Errno 24),实为文件描述符泄漏或生命周期管理不当,非ZIP不支持DataLoader。需排查Dataset中图像/HDF5/ZIP句柄是否及时释放,并优先采用单Loader配对Dataset保障数据一致性与资源可控性。(239字)
|
2天前
|
并行计算 PyTorch 算法框架/工具
Expected all tensors to be on the same device, cuda:0 and cpu:恢复训练时检查 SGD 动量
该问题源于断点续训时优化器状态(如SGD动量缓冲区)未与模型参数同设备,导致`optimizer.step()`中跨设备张量运算失败。前向/反向可正常执行,但动量更新报错“cuda:0 and cpu”。需检查并统一`param`、`grad`及`optimizer.state`中所有Tensor的设备。
|
2天前
|
并行计算 PyTorch Linux
libtorch_python.so: cannot open shared object file:文件缺失时先修复 torch 安装
该问题核心是 PyTorch 1.0.1.post2 安装不完整,`torch/lib/` 下缺失关键文件 `libtorch_python.so`,非环境变量(LD_LIBRARY_PATH)可解决。需先用 `importlib.util.find_spec` 定位真实安装路径,核对文件存在性;再通过 `pip show -f torch` 验证分发完整性。切勿混用版本或复制库文件。
|
2天前
|
并行计算 PyTorch Linux
RuntimeError: CUDA error: device-side assert triggered:Colab 先重启,再找首次断言
该文详解CUDA断言错误调试策略:强调先重启运行时、启用`CUDA_LAUNCH_BLOCKING=1`,用最小张量验证环境;区分“会话已坏”与新操作触发,主张逐段定位而非臆测标签越界,提供实用边界检查函数与验证流程。(239字)
|
2天前
|
并行计算 PyTorch 异构计算
can’t convert CUDA tensor to numpy:只取分类索引时直接用 torch.argmax
原帖因直接对CUDA张量调用`.data.numpy().argmax()`报错:“无法将CUDA张量转为NumPy”。正确做法是:在GPU上用`output.argmax(dim=1).item()`获取单图预测索引,避免全量拷贝,仅传回标量,高效且安全。(239字)
|
2天前
|
PyTorch 算法框架/工具 索引
ValueError: only one element tensors can be converted to Python scalars:张量列表先检查形状,再 stack
该文解析PyTorch中`list(tensor)`引发的`ValueError`根源:列表含多元素张量时,不可直接转Python标量。强调应通过`tensor.shape`或遍历打印各张量尺寸来查形状;同形张量用`torch.stack`(增维)而非`cat`或`item`;异形则保留原结构,避免强行转换。
|
2天前
|
数据可视化 PyTorch 算法框架/工具
only batches of spatial targets supported:三通道分割 one-hot 转为每像素类别编号
该报错源于PyTorch交叉熵要求标签为`[N, H, W]`(3D),但输入了`[N, 3, H, W]`(4D)掩码。需先验证三通道是否为互斥one-hot,再用`argmax(dim=1)`转为整型标签,并妥善处理全零未标注像素(设`ignore_index`),避免误判为背景类。(239字)
|
2天前
|
PyTorch 算法框架/工具 异构计算
Expected object of scalar type Float but got scalar type Double for argument #4 'mat1':NumPy 输入与 Linear 权重怎样统一类型
PyTorch中`RuntimeError: Expected Float but got Double`常因输入Tensor(float64)与模型权重(float32)类型不一致导致。关键在第一层Linear的输入与权重dtype需统一:可将数据转为float32(推荐),或模型整体升为float64。务必检查`tensor.dtype`而非数值显示,并确保`loss.backward()`前类型已对齐。(239字)
|
2天前
|
机器学习/深度学习 索引
The size of tensor a (133) must match tensor b (10):分类任务换 MSELoss 后先查标签含义
原帖网络输出133类logits,CrossEntropyLoss支持类别索引输入(如`[10]`),而MSELoss要求`outputs`与`target`形状严格匹配(如`[10,133]`)。报错因`target`为`[10]`,无法广播匹配`[10,133]`输出,本质是两类损失对标签格式约定不同。
|
2天前
|
PyTorch 算法框架/工具 索引
RuntimeError: expected scalar type Long but found Float:NLLLoss 要改 labels,不要把 images 转 long
该问题源于`NLLLoss`要求标签为`torch.long`类型(类别索引),但输入为`float`。需确保标签是整数编号(非概率/小数),并在`DataLoader`中统一配对图像与标签,避免双Loader错位;推荐改用`CrossEntropyLoss`配原始logits,或`LogSoftmax+NLLLoss`组合。(239字)

热门文章

最新文章