【报错】Assertion `srcIndex < srcSelectDimSize` failed.RuntimeError: CUDA error: device-side assert trig

部署运行你感兴趣的模型镜像

Python报错:

C:\actions-runner\_work\pytorch\pytorch\pytorch\aten\src\ATen\native\cuda\Indexing.cu:1553: block: [110,0,0], thread: [32,0,0] Assertion `srcIndex < srcSelectDimSize` failed.
...
...
RuntimeError: CUDA error: device-side assert triggered
Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions.

报错原因:
PyTorch 在使用 GPU 索引张量时触发的断言失败,意思是访问了一个张量中不存在的索引位置,造成了越界。

访问的索引 srcIndex 超出了张量在某个维度上的范围 srcSelectDimSize。也就是,比如你有一个张量 tensor.size(0) == 100,你却访问了 tensor[105],就会触发这个错误。

报错发生在这一行:

at_embed_data = self.at_embed(at_data)

而我的定义是:

self.at_embed = nn.Embedding(n_at + 10, d_k)

其中 n_at = 983。也就是说,embedding 的合法索引范围是 0 到 992(共 993 个 index)。

而 at_data 的 shape 是tensor (64, 500),说明你输入了一个索引矩阵,有 64 条样本,每条 500 个 at_id。

❗问题本质:
你的 at_data 中有某些值 ≥ 993(也可能是负数),超过了 embedding 的最大索引范围。

所以对于 at 而言还是需要重新编码,不能用原始值!!!

您可能感兴趣的与本文相关的镜像

PyTorch 2.7

PyTorch 2.7

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [96,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [97,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [98,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [99,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [100,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [101,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [102,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [103,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [104,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [105,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [106,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [107,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATen/native/cuda/Indexing.cu:975: indexSelectLargeIndex: block: [684,0,0], thread: [108,0,0] Assertion `srcIndex < srcSelectDimSize` failed. ../aten/src/ATe
06-07
### 问题分析 在使用 PyTorch 的 CUDA 后端进行 GPU 计算时,`indexSelectLargeIndex` 函数中出现了断言错误 `Assertion srcIndex < srcSelectDimSize failed`。此错误表明在索引选择操作中,尝试访问的索引超出了张量维度的有效范围[^1]。这种问题通常由以下几种情况引起: 1. **输入数据的合法性问题**:例如,训练数据集中可能存在无效或超出范围的索引值。 2. **模型配置问题**:例如,超参数设置不当,导致生成的索引超出预期范围。 3. **CUDA 内存管理问题**:例如,CUDA 设备上发生内存溢出或未正确初始化张量。 4. **PyTorch 版本兼容性问题**:不同版本的 PyTorch 可能存在实现差异,导致某些操作在特定版本下失败。 --- ### 解决方案 #### 1. 检查输入数据 确保输入数据中的索引值合法且在有效范围内。可以通过以下方式验证: ```python import torch # 假设 src 是源张量,indices 是索引张量 src = torch.randn(10, 5) # 示例张量 indices = torch.tensor([0, 2, 8]) # 示例索引 # 验证 indices 是否在 src 的维度范围内 assert torch.all(indices < src.size(0)), "Indices out of range" ``` 如果发现索引超出范围,则需要对数据预处理逻辑进行检查和修正[^2]。 #### 2. 调整模型配置 如果问题出现在特定数据集切换后(如从 DOTA 切换到 DIOR),可能与模型配置不匹配有关。例如,目标检测模型中锚框(anchor)的数量或特征图尺寸可能发生变化。建议重新评估并调整模型超参数以适应新数据集[^4]。 #### 3. 检查 CUDA 内存状态 确保 CUDA 设备有足够的可用内存,并避免潜在的内存泄漏问题。可以使用以下代码监控内存使用情况: ```python print(torch.cuda.memory_summary(device=None, abbreviated=False)) ``` 如果内存不足,可以尝试减少批量大小(batch size)或优化模型结构以降低显存占用[^3]。 #### 4. 更新 PyTorch 版本 不同版本的 PyTorch 对 CUDA 操作的支持可能存在差异。建议检查当前使用的 PyTorch 和 CUDA 版本是否兼容,并考虑升级到最新稳定版本。例如: ```bash pip install torch torchvision torchaudio --upgrade ``` #### 5. 调试与捕获异常 为了更精确地定位问题,可以在代码中添加调试信息并捕获异常。例如: ```python try: result = torch.index_select(src, dim=0, index=indices) except RuntimeError as e: print(f"Error occurred: {e}") print(f"Source tensor shape: {src.shape}, Indices: {indices}") ``` 通过打印相关变量的信息,可以进一步缩小问题范围[^5]。 --- ### 总结 `Assertion srcIndex < srcSelectDimSize failed` 错误通常是由于索引超出张量维度范围引起的。解决该问题的关键在于验证输入数据的合法性、调整模型配置、优化 CUDA 内存管理和确保软件版本兼容性。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值