问题描述:
设备MIIVII APEX AD10,aarrch64,Ubuntu20.04,jetpack5.0.2
由于工作需要须在该设备上配置深度学习PyTorch环境,根据米文动力相关论坛不建议更换Jetpack版本,由此只能安装Python3.8,并按说明对应Torch与Torchvision的版本。
参考链接:PyTorch for Jetson
后续,根据这些要求配置Torch环境出现如下错误
RuntimeError: Couldn't load custom C++ ops. This can happen if your PyTorch and torchvision versions are incompatible,** or if you had errors while compiling torchvision from source. For further information on the compatible versions, check https://github.com/pytorch/vision#installation for the compatibility matrix. Please check your PyTorch version with torch.__version__ and your torchvision version with torchvision.__version__ and verify if they are compatible, and if not please reinstall torchvision so that it matches your PyTorch install.
报错原因:
Torch与Torchvision版本不匹配,第三方包安装的包不适配我的设备
问题排查与解决过程:
- 尝试1.11、1.12、1.13三个版本的Torch,对应安装Torchvision均未能解决问题。
- 最后选择使用人数最多的Torch1.12.0,且该版本能够适配本机,并能正确调用GPU,测试代码如下
import torch
#import torchvision
print(torch.__version__)
#print(torchvision.__version__)
print('CUDA available: ' + str(torch.cuda.is_available()))
print('cuDNN version: ' + str(torch.backends.cudnn.version()))
a = torch.cuda.FloatTensor(2).zero_()
print('Tensor a = ' + str(a))
b = torch.randn(2).cuda()
print('Tensor b = ' + str(b))
c = a + b
print('Tensor c = ' + str(c))
print(torch.cuda.device_count())
print(torch.cuda.get_device_name(0))
因此,就选择torch1.12死磕Torchvision版本问题,期间尝试从各种地方安装Torchvision包均为解决,最后发现一种从源码自行构建包进行编译的方式。
具体解决过程
- git代码
git clone --branch v0.13.0 https://github.com/pytorch/vision torchvision
git失败,采用链接,方法4的第一行并链接自己手机热点解决Git问题。Git问题解决
- Torchvision编译
cd torchvision
export BUILD_VERSION=0.13.0
python3 setup.py install --install-lib=/home/nvidia/.local/lib/python3.8/site-packages
期间报错,找不到torch,但本机已安装,就修改CMakeList.txt文件中的find(Torch REQUIRED)行,修改如下,path为自己Torch的安装路径,install时我也是安装在我对应需要的地方
查找Torch安装路径,然后会得到Torch的详细安装路径
pip show torch
参考Torchvision编译网址
(部分地方有区别,没法直接用)
安装完成,按之前的代码测试,无任何警告信息。
测试YoloX模型,运行成功,无报错,无任何警告信息。
PS:整整调试了2天,终于解决了,调试过程太痛苦了,终于解决的时候好爽,太有成就感了!