最近在部署一套医疗识别的模型时遇到了torch不可用的情况,原项目运行在nvdiai上,后因业务需要移植至AMD上,刚开始以为是小菜,结果才发现是道主食。torch环境配置没问题,rocm版本也能对的上,运行代码时死活起不来,要不就是加载道CPU上要不就是显存无访问权限。后联系上AMD官方人员也未能解决。 后经过不断尝试,终于解决了。以下为解决问题的流程:
1. 问题描述
使用AMD显卡运行torch训练代码时出现如下报错:
Memory access fault by GPU node-2 (Agent handle: 0x14a2d350) on address (nil). Reason: Write access to a read-only page.
Aborted (core dumped)
2. 配置环境
GPU:MI210 * 8
rocm: 5.4.2
python:3.8.16
torch :2.0.1+rocm5.4.2
torchaudio :2.0.2+rocm5.4.2
torchtyping:0.1.5
torchvision :0.15.2+rocm5.4.2
3. 前期验证工作
查询相关资料后得知有可能为torch与rocm版本不对应导致 ;
但是在终端使用torch能够获取到可用设备
(py_3.8) root@217f58e52400:~/CT2Rep# python
Python 3.8.16 (default, Mar 2 2023, 03:21:46)
[GCC 11.2.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
import torch
torch.cuda.device_count()
8
经过多轮验证,发现torch始终可用,但就是运行程序时不能将模型加载到GPU上。百思不得其解。 终,查看github issue上问题解答,抱着试试看的心态进行降级torch,将torch从2.0.1降至1.13.1。
pip install torch==1.13.1+rocm5.2 torchvision==0.14.1+rocm5.2 torchaudio==0.13.1
降级之后代码成功运行!
报错总结:
- rocm版本大部分支持torch向下兼容,个别torch版本需要对rocm版本对应。
- 多尝试,说不定哪个就对了