Linux下使用ROCm版PyTorch访问GPU内存时出现段错误求助
AMD RX6600 + ArchLinux PyTorch/ROCm 内存访问崩溃问题排查
问题概述
使用AMD RX 6600显卡,ArchLinux系统下通过发行版提供的PyTorch+ROCm包运行GPU代码时,出现内存分配成功但读取时崩溃的情况。测试代码及运行输出如下:
测试代码
import torch # 检查AMD HIP可用性 print(torch.cuda.is_available()) print(torch.version.hip) device = torch.device('cuda') id = torch.cuda.current_device() # 打印GPU名称 print(torch.cuda.get_device_name(id)) # 初始内存分配量 print(torch.cuda.memory_allocated(id)) # 在GPU内存中存储变量 r = torch.rand(16).to(device) # 分配后的内存量 print(torch.cuda.memory_allocated(id)) # 访问变量时崩溃 print(r[0])
运行输出
~ > python test.py True # GPU计算可用 5.4.22804- # ROCm版本 AMD Radeon RX 6600 # GPU名称 0 # 初始内存分配 512 # 分配后的内存量 zsh: segmentation fault (core dumped) python test.py # 访问变量时崩溃
代码是否存在问题?
你的代码没有逻辑问题,这是一套标准的PyTorch GPU张量创建与访问测试流程,所有调用均符合PyTorch官方API规范,崩溃并非代码写法导致。
调试与排查步骤
- 验证ROCm基础环境:执行
rocminfo和hipinfo命令,确认RX 6600(架构为gfx1032)被正确识别,ROCm核心组件加载正常,且该架构在当前ROCm 5.4版本的支持范围内。 - 检查版本兼容性:确认发行版提供的PyTorch版本与ROCm 5.4是否匹配,版本不兼容是导致内存访问错误的常见原因。
- 简化测试用例:尝试直接在GPU创建张量(
r = torch.rand(16, device=device)),而非先在CPU创建再转移;测试简单张量运算(如print(r + 1)),观察是否同样触发崩溃。 - 分析核心转储:使用
coredumpctl info命令查看崩溃核心转储,定位崩溃发生的具体模块(PyTorch HIP后端或ROCm运行时库),这是提交Bug的关键信息。 - 调整环境变量:尝试设置
HIP_VISIBLE_DEVICES=0强制指定显卡,或PYTORCH_HIP_ALLOC_CONF=garbage_collection_threshold:0.6,max_split_size_mb:128调整内存分配策略,看是否能绕过崩溃。 - 对比官方环境:若条件允许,使用ROCm官方Docker容器(如
rocm/pytorch:5.4)运行测试代码,排查是发行版包的问题还是系统环境配置问题。
提交Bug报告前的准备
若排查确认是发行版包的问题,整理以下信息提交给维护者:
- 系统内核版本(
uname -r输出) - ROCm相关包版本(
pacman -Qs rocm输出) - PyTorch版本(
python -c "import torch; print(torch.__version__)"输出) - 核心转储的关键片段
- 已完成的排查步骤及结果
内容的提问来源于stack exchange,提问作者Moshiur Rahman
相关产品推荐
相关产品推荐

