在Radeon VII上用ROCm运行Disco Diffusion(PyTorch)时遇GPU内存访问故障
解决Radeon VII + ROCm环境下Disco Diffusion(PyTorch)的GPU内存访问故障
以下是针对你遇到的Memory access fault by GPU node-4... Reason: Page not present or supervisor privilege错误的可行修复方案:
锁定兼容的ROCm版本
Radeon VII作为较早的ROCm支持显卡,在ROCm 5.x及以上版本中存在兼容性退化问题。建议降级到ROCm 4.5.2或4.6版本:- 卸载现有ROCm组件:
sudo apt purge rocm* - 安装指定版本的ROCm(确保系统内核版本匹配,推荐使用Linux 5.10或5.15)
- 卸载现有ROCm组件:
调整PyTorch内存配置
禁用PyTorch的内存预分配机制,避免内存地址越界:- 在Disco Diffusion代码开头添加:
import torch torch.cuda.set_per_process_memory_fraction(0.9, device=0) torch.cuda.empty_cache() - 或者在启动脚本前设置环境变量:
export PYTORCH_NO_CUDA_MEMORY_CACHING=1
- 在Disco Diffusion代码开头添加:
降低生成参数负载
从根源减少GPU内存占用,避免内存访问错误:- 降低输出图像分辨率,比如将
width和height从1024调整为768或512 - 减少单轮生成步数(
steps参数),或降低batch size - 关闭不必要的模型组件,比如禁用CLIP的额外上下文分支
- 降低输出图像分辨率,比如将
修复内存页权限问题
针对错误提示的“Page not present”问题,尝试以下操作:- 启用透明大页:
echo always | sudo tee /sys/kernel/mm/transparent_hugepage/enabled - 禁用ROCm的SDMA功能:
export HSA_ENABLE_SDMA=0,再重新运行Disco Diffusion
- 启用透明大页:
验证PyTorch与ROCm的绑定状态
运行以下命令确认PyTorch正确识别ROCm环境:python -c "import torch; print(torch.cuda.is_available()); print(torch.version.hip)"若输出
True和对应ROCm版本号则正常;否则重新安装与ROCm版本匹配的PyTorch包。
内容的提问来源于stack exchange,提问作者Carlos Rincon
相关产品推荐
相关产品推荐

