目录
- 一、复现代码举例
- 二、创建环境——选择一个Python版本
- 2.1 创建基本环境
- 2.1.1 基于AutoDL
- 2.1.2 基于PyCharm
- 2.2 终端激活环境
- 2.3 退出环境
- 2.4 删除环境
- 三、PyTorch安装
- 3.1 查看cuda
- 3.2 安装PyTorch
- 四、其他依赖安装
- 4.1 tensorboardX
- 4.2 matplotlib
- 4.3 medpy
- 4.4 visdom
- 4.5 pandas
- 4.6 imageio
- 4.7 torchsummary
- 4.8 cv2
- 五、不同PyTorch版本的问题
- 5.1 【程序错误】loss.backward()
- 5.1.1 问题
- 5.1.2 原因
- 5.1.3 解决方法
- 5.2 【程序错误】计算损失时的one-hot问题
- 5.2.1 问题
- 5.2.2 原因
- 5.2.3 解决方法
- 5.3 【程序错误】THC/THC.h编译终止
- 5.3.1 问题
- 5.3.2 原因
- 5.3.3 解决方法
- 参考博客
一、复现代码举例
我们在复现其他baseline的时候,要看代码的环境要求,例如:
# Environment Setup
Python 3.7.13
CUDA 11.1
Pytorch 1.10.1
torchvision 0.11.2
注: 以上的环境是必须要按照作者要求的安装,如果换其他的版本,就可能会出错。而其他依赖可以直接pip安装,无版本要求。
二、创建环境——选择一个Python版本
为了方便环境管理,我们是基于工程来创建这个工程的环境。
2.1 创建基本环境
2.1.1 基于AutoDL
conda create -n hra37 python=3.7.13
2.1.2 基于PyCharm
- 打开一个工程;
- 创建基本环境:File -> Settings -> Project -> Python Intepreter -> Conda Environment -> 点 **+ ** ->New environment -> 指定Python版本和修改环境名字
安装时出现错误:
排查错误:
- 查看镜像源是清华还是中科大:
conda config --show channels
显示如下:(显示为中科大)
- 用终端创建环境,需要cd到anaconda3/bin下在安装:
conda create -p /home/wanghui/anaconda3/envs/HRA-UNET -y python=3.7.13
依然出现问题。哎,改成AutoDL,成功。
2.2 终端激活环境
conda activate hra37
2.3 退出环境
conda deactivate
2.4 删除环境
conda remove -n hra37 --all # hra37是我想删除的环境名
三、PyTorch安装
3.1 查看cuda
安装PyTorch必须找到对应的cuda,所以先查看自己的服务器CUDA。
nvidia-smi
我这个服务器的cuda 12.2,可向下兼容。
3.2 安装PyTorch
官网以前的版本,复制、终端运行
pip install torch==1.10.1+cu111 torchvision==0.11.2+cu111 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html
注: 这里可选择conda安装,也可以pip安装,我一般选择pip 安装,conda 安装有时候不成功。
四、其他依赖安装
4.1 tensorboardX
pip install tensorboardX
4.2 matplotlib
pip install matplotlib
4.3 medpy
- 必须先安装SimpleITK,且指定版本:
pip install SimpleITK==1.2.4
- 安装medpy:
pip install medpy
4.4 visdom
pip install visdom
4.5 pandas
pip install pandas
4.6 imageio
pip install imageio
4.7 torchsummary
pip install torchsummary
4.8 cv2
清华镜像:(快)
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
以上,安装完代码需要的所有依赖,就可以训练或是测试了。
五、不同PyTorch版本的问题
5.1 【程序错误】loss.backward()
5.1.1 问题
RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation: [torch.cuda.FloatTensor [256]] is at version 4; expected version 3 instead. Hint: enable anomaly detection to find the operation that failed to compute its gradient, with torch.autograd.set_detect_anomaly(True).
5.1.2 原因
- 第一次出现问题是复现代码时,出现的问题;
- 第二次是加分布式训练DP时。
- 看了网上的各种方法,试过各种方法,最后发现,就是PyTorch版本的问题。
5.1.3 解决方法
目前解决的问题是用 PyTorch 1.7.0,Pytorch 1.10.1 也可以。Pytorch 1.13.0、2.0.0不可以。
5.2 【程序错误】计算损失时的one-hot问题
5.2.1 问题
RuntimeError: 1only batches of spatial targets supported (3D tensors) but got targets of size: : [2, 10, 256, 256]
5.2.2 原因
在Pytorch中,“不需要”对标签进行one-hot编码,且需要将通道这一维给压缩了。即:
- 预测值:(256,256,10)
- 标签值:(256,256)
即可以直接进行计算损失。
其中,标签中的值为对应的类别数。
如下所示,我们可以进行损失的计算了。但是较新的pytorch版本才支持,实测pytorch1.10.2支持。
torch.size([2, 10, 256 ,256])
torch.size([2, 256 ,256])
5.2.3 解决方法
预测值: torch.Size([8, 2, 513, 513])
标签值: torch.Size([8, 513, 513, 3])
需要将标签转换下,然后去掉通道维度,如下:
使用label=torch.argmax(label, dim=1) ,其中dim=1表示通道维度,亲测有效!!!!!
5.3 【程序错误】THC/THC.h编译终止
5.3.1 问题
#include <THC/THC.h>
^~~~~~~~~~~
compilation terminated.
error: command '/usr/local/cuda/bin/nvcc' failed with exit code 1
5.3.2 原因
Pytorch 1.11版本后,THC/THC.h失效了。
5.3.3 解决方法
换一个Pytorch 版本。Pytorch 1.10.1可用。
参考博客
[1] 【程序错误】RuntimeError: one of the variables needed for gradient computation
[2] 【完美解决】RuntimeError: one of the variables needed for gradient computation