CUDA error: an illegal memory access was encountered:LSTM 分配 hidden 的行可能只是后续报错点

简介: 原帖在验证阶段创建LSTM hidden状态时触发CUDA非法内存访问错误。该异步报错常掩盖真实越界位置,需设`CUDA_LAUNCH_BLOCKING=1`定位首个失败操作,并通过输入派生`h0/c0`避免设备不一致,辅以CPU批次快照与小规模复现排查根因。(239字)

原帖训练一段时间后,在验证阶段创建 h0 时失败;错误同时提示 CUDA 异步报告:

RuntimeError: CUDA error: an illegal memory access was encountered

随机时刻报错,要保存首次失败所需的信息

原题训练一段时间后在验证阶段创建 hidden 报错。CUDA 异步执行时,显示的行可能只是同步或分配时发现更早的非法访问。set_device 和 benchmark 只能改变特定配置,不能据此证明已修复根因。先让失败批次可回放,再做后端对照。

不能据此认定 torch.zeros 本身非法。先重启进程,在任何 CUDA 调用之前开启 CUDA_LAUNCH_BLOCKING=1,寻找真正的首个失败操作。Windows PowerShell 可先执行 $env:CUDA_LAUNCH_BLOCKING="1",再运行脚本。

在 LSTM 的 forward 开头检查输入与参数:

p = next(self.parameters())
print("josh050608")
print("x:", x.shape, x.dtype, x.device, x.stride())
print("parameter:", p.dtype, p.device)
print("finite:", bool(x.isfinite().all()))

这里 x 是当前序列输入,self 是原题 LSTM 模型。对 batch_first=True,确认布局为 [N,L,input_dim],不要把所有训练集样本误作为一个无法承受的大 batch。

原题每次先建 CPU hidden 再 .cuda(),还先启用梯度再 detach。可简化为从输入派生设备和类型:

h0 = x.new_zeros(self.num_layers, x.size(0), self.hidden_dim)
c0 = x.new_zeros(self.num_layers, x.size(0), self.hidden_dim)
out, (hn, cn) = self.lstm(x, (h0, c0))

这能消除硬编码设备与无用图操作,但不能保证修复非法访问。若仍失败,保存失败前的 CPU 批次、shape 与版本,在新进程复现;检查更早的索引、扩展算子及后端路径。损坏的 CUDA 上下文中继续打印 GPU 张量可能只产生更多后续错误。

验证先用相同小批次连续做训练和验证,再观察长时间运行。原帖没有足够信息证实具体后端 bug,切换 benchmark 或 set_device 不应被当成通用答案。

hidden 按输入派生,再验证训练与预测

下面是可独立运行的 CPU 小模型,保留 batch_first 的序列布局,并让 hidden 的设备与 dtype 跟随输入。它不复现非法访问,只验证这段状态初始化及反向逻辑:

import torch
from torch import nn
class SequenceNet(nn.Module):
    def __init__(self):
        super().__init__()
        self.rnn = nn.LSTM(3, 5, num_layers=2, batch_first=True)
        self.fc = nn.Linear(5, 1)
    def forward(self, x):
        h0 = x.new_zeros(2, x.shape[0], 5)
        c0 = x.new_zeros(2, x.shape[0], 5)
        out, _ = self.rnn(x, (h0, c0))
        return self.fc(out[:, -1, :])
model = SequenceNet()
x = torch.randn(2, 4, 3)
model.train()
loss = model(x).square().mean()
loss.backward()
assert model.rnn.weight_ih_l0.grad is not None
model.eval()
with torch.no_grad():
    prediction = model(x)
assert prediction.shape == (2, 1)
print("train/eval:", loss.item(), prediction.shape)

在真实流程里记录失败前输入的 CPU 副本、shape、dtype、模型版本与随机状态;不要等 CUDA 上下文已损坏后才尝试 .cpu() 保存。输入有限性检查可发现脏数据,但数值含 NaN 本身也不能证明非法访问根因。

新进程同步定位后,若失败是索引或自定义扩展,先修具体越界;若集中在某个后端算子,再用相同输入与稳定匹配构建对照。短小例子通过只能说明布局和状态构造可行,原题的长时间 GPU 故障仍需要相应运行时长和失败数据验证。

参考:原始求助帖;技术依据:PyTorch CUDA 语义(2.5)、PyTorch CUDA 环境变量(2.5)、PyTorch 自动求导(2.5);LSTM 官方源码(2.5.1)。

相关文章
|
10天前
|
Linux 开发工具 iOS开发
Codex保姆级教程(下载+安装+登录+使用,含所有版本,2026最新)
Codex是OpenAI推出的开源AI编程智能体,本地运行,可理解整个代码库,支持自然语言指令改代码、执行命令、跑测试、修Bug,兼容Win/macOS/Linux。(239字)
4045 20
|
11天前
|
JavaScript API iOS开发
DeepSeek Harness下载、安装、配置一篇搞定(2026整理,送常用插件)
DeepSeek Harness(DSH)是DeepSeek于2026年开源的MIT协议AI Agent框架,支持插件化组装模型、工具、沙箱与UI,兼容主流大模型。本文提供免Node.js的桌面端安装包(Win/macOS),含详细图文教程及热门插件推荐。
4152 49
|
11天前
|
iOS开发 Docker MacOS
【2026实测】Docker Desktop下载、安装、汉化、配置教程(附官网安装包)
Docker Desktop 是 Docker 官方推出的桌面容器管理工具,集成引擎、CLI、图形界面与 Kubernetes,支持 Win/macOS/Linux。2026 最新版 4.88.1 强化 ARM 原生运行、镜像加速及资源可视化,附中文汉化与国内镜像配置指南。
1994 7
|
6天前
|
云安全 人工智能 安全
|
6天前
|
存储 弹性计算 人工智能
2026 年阿里云双十一活动入口攻略,新客服务器优惠通道、三大会场入口梳理
综合来看,2026年阿里云双十一活动入口清晰: 阿里云轻量应用服务器、阿里云ECS云服务器、阿里云GPU云服务器、阿里云百炼大模型服务平台 活动会场、综合权益中心、99计划专场三大入口覆盖服务器、AI权益与续费特价;新用户通过控制台首页banner、权益中心、产品页三处路径进入专属专场,老用户通过控制台弹窗和费用中心权益中心进入老客专区,企业用户做企业实名后解锁专属满减与阶梯折扣。
820 0
|
5天前
|
Linux 开发工具 iOS开发
2026最新codex下载安装保姆级使用教程(下载+安装+登录+使用,含所有历史版本)
本文详解OpenAI Codex国内快速上手指南:提供Win/macOS/Linux全平台免安装包、npm/Homebrew等多方式安装、账号/API Key双登录、简体中文切换,覆盖下载、安装、汉化、使用及高频避坑(如微软商店失败、npm超时等),10分钟即可跑通。
1110 2
|
12天前
|
安全 算法 定位技术
《高性价比人生指南》完整原版:普通人用最少的资源,过好这一生的底层逻辑~How To Live Better
📖《高性价比人生指南》是一份基于实证、拒绝焦虑的生存手册,倡导以“人生时薪”为视角,重新计算时间、金钱与精力的成本与收益。它不承诺逆袭,只教人算清账:省下的钱若耗掉时间便亏;买体验比买物品更值;睡眠是最高杠杆的健康投资;关系贵在情绪价值而非表面热络;学习重在改变行为而非自我安慰。核心理念:用低成本、高回报的微小行动,换取长期的选择权——不是成为谁,而是掌控自己人生的主动权。
2145 6
|
云安全 安全 网络安全
|
24天前
|
人工智能 API 开发工具
DeepSeek Harness 神插件:白嫖 13 家大厂模型
`dsh-our-free-model` 是 DeepSeek Harness 神级插件:零配置、零API Key、零账号,聚合13家大厂免费模型(含DeepSeek V4.1 Flash、Kimi K3等),支持本地网关、用量看板与自动降级,真正实现“白嫖即用”。
4350 58

热门文章

最新文章