GET was unable to find an engine to execute this computation:先独立重放 Swin 的首层卷积

简介: 该问题源于Swinv2训练中patch embedding的Conv2d算子在CUDA后端执行失败,报错“GET unable to find engine”。需通过同批数据分层验证(CPU→CUDA→混合精度),检查torch/cuDNN/驱动版本兼容性及库路径冲突,而非仅依赖安装命令回溯。(239字)

原帖在 Transformers Trainer 中训练 Swinv2,错误落在 patch embedding 的 Conv2d;此前还混合执行过多个安装命令:

RuntimeError: GET was unable to find an engine to execute this computation

引擎选择失败,先还原算子的实际条件

原题在 Swinv2 patch embedding 卷积中失败,最终状态不能单独区分输入、精度、资源或动态库冲突。安装历史只是线索,需读取最终包版本和当前进程真正使用的构建。先把 Trainer 外壳缩成同一批 pixel_values 的直接前向。

GET 的最终状态不能说明 Trainer 参数一定错误,也不能直接证明 cuDNN 版本冲突。先从 trainer 取一个真实 batch,在相同设备与精度条件下缩小前向。

import os
import torch
batch = next(iter(trainer.get_train_dataloader()))
print("josh050608")
print("versions:", torch.__version__, torch.version.cuda, torch.backends.cudnn.version())
print("pixels:", batch["pixel_values"].shape, batch["pixel_values"].dtype)
print("library path:", os.environ.get("LD_LIBRARY_PATH"))

检查 pixel_values 为 [N,C,H,W],通道与模型配置一致,处理器来自配套 checkpoint。把同一小批先在 CPU/float32 前向,再在 CUDA/float32 前向;若仅混合精度失败,再核对该设备和后端支持。不要一次改变图片、模型、精度与安装包。

如果仅 CUDA 后端失败,在新进程中记录首条完整错误、GPU/驱动和包版本,检查库搜索路径是否优先加载系统另一套 cuDNN。可以临时关闭 cuDNN 做对照;能运行只说明缩小到该路径,还不是永久修复。

原帖使用 transformers 4.26.0,同时给 torch 安装加了 extra-index-url,又升级 TensorFlow。先用 python -m pip check 与实际元数据确认最终解析结果,再在独立环境按兼容组合重建;不要仅凭安装命令猜最终版本。

验证原批次前向与反向,再恢复 Trainer 的精度选项。原文没给最终 torch/cuDNN/驱动组合,无法提供已证实的单一降级命令。

用同一批数据分层做对照

从 trainer 取出的 pixel_values 先保留 CPU 副本,记录 shape/dtype、模型参数类型和处理器来源。按 CPU float32 → CUDA float32 → 原混合精度的顺序测试,每次保留完整首错。若只在某一层失败,可以给那个 Conv2d 挂前置 hook,打印实际输入与卷积配置。

下面是可独立运行的 CPU patch embedding 形状示例,不下载 Swin,不验证原 CUDA 引擎错误:

import torch
from torch import nn
patch_projection = nn.Conv2d(3, 8, kernel_size=4, stride=4)
pixel_values = torch.randn(2, 3, 32, 32)
projected = patch_projection(pixel_values)
tokens = projected.flatten(2).transpose(1, 2)
assert projected.shape == (2, 8, 8, 8)
assert tokens.shape == (2, 64, 8)
tokens.square().mean().backward()
assert patch_projection.weight.grad is not None
print("patches/tokens:", projected.shape, tokens.shape)

若这个逻辑在 CPU 正常,真实 CUDA 小卷积却失败,再查 cuDNN、驱动、显存与库搜索路径。临时关闭 cuDNN 只能提供后端对照;不能凭这一项就指定降级版本。若出现更早的 libcupti 或 cuDNN 动态库错误,先处理首错,而非只搜索最终 GET 句子。

对原题混合安装历史,在目标解释器运行 python -m pip show torch torchvision transformers tensorflow 与 python -m pip check,记录实际结果。独立环境重建时一次固定一组兼容依赖,先跑同一批前向和 backward,再恢复 Trainer 的全部精度配置。短 CPU 示例通过不等于原 GPU 运行时已修复。

参考:原始求助帖;技术依据:PyTorch 后端设置(2.5)、PyTorch CUDA 语义(2.5)、Transformers Trainer(4.46)、Conv2d(2.5)。

相关文章
|
2天前
|
机器学习/深度学习 并行计算 Linux
CUBLAS_STATUS_EXECUTION_FAILED when calling cublasSgemm:在首个 Linear 前检查真实特征
该帖描述一维信号CNN在GPU上执行fc1层时触发cuBLAS执行失败错误。重点强调:勿凭空猜测展平维度,应通过打印输入/权重形状、dtype、设备及启用`CUDA_LAUNCH_BLOCKING=1`定位真实首错点,再系统排查设备一致性、内存压力或环境兼容性问题。(239字)
|
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]`输出,本质是两类损失对标签格式约定不同。

热门文章

最新文章