解决“RuntimeError: expected backend CUDA and dtype Float but got backend CUDA and dtype Half”问题

问题描述

在运行Gituhub程序的时候,出现报错

......
y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i].to(x[i].device)) * self.stride[i]  # xy
RuntimeError: expected backend CUDA and dtype Float but got backend CUDA and dtype Half

解决方法

经过网上搜索相关博客之后,发现可能是Pytorch的版本问题

查询本机的Python版本和Pytorch版本

import torch
print(torch.__version__)

可以看到Python版本为3.6.3,Pytorch版本为1.1.0

解决“RuntimeError: expected backend CUDA and dtype Float but got backend CUDA and dtype Half”问题_第1张图片

查看程序运行所需要的环境

 Python >= 3.7
 Pytorch == 1.5.x

所以需要升级Python和Pytorch的版本,但是如果只是简单的对Python和Pytorch版本进行简单的升级,以后再跑其他程序的时候说不定还需要再次更改版本,非常麻烦;所以建议采用创建虚拟环境的方法,为每一个程序创建一个专属的虚拟环境,互不打扰,这样程序的配置环境也不会十分混乱。

创建方法具体可见该博客

为了方便只保留记录一下关键步骤

# 创建环境
conda create -n pytorch1.5 python=3.8.5


# 添加清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge 
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --set show_channel_urls yes
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/

# 查看CUDA版本
sudo nvidia-smi

# CUDA版本为10.1对应的Pytorch
pip install torch==1.5.1+cu101 torchvision==0.6.1+cu101 -f https://download.pytorch.org/whl/torch_stable.html

# 安装完成后查看是否安装成功
import torch
torch.cuda.is_available

【备注】为什么把之前的Python=3.7改成了Python=3.8.5?

在跑实验的时候发现,如果是3.7会有一个CPU计算的bug,还需要改Python代码,如这篇博客所示:解决“TypeError: can‘t convert cuda:0 device type tensor to numpy. ......”问题;如果是3.8.5则直接无痛跑成实验。

PS:真的是奇了怪了,可能是因为改了YOLOV5的模型,今天再跑实验又出错了,还是上面的错误,看来Python3.8也没那么好用......

你可能感兴趣的:(Python,debug,踩坑记录,Deep,Learning,pytorch,深度学习,python)