好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Pytorch框架的使用

Pytorch框架的使用

安装配置环境

# 创建一个名为envName的环境,指定Python版本是3.6.5

conda create -n envName python==3.6.5

# 激活虚拟环境

activate envName # for Windows

source activate envName # for Linux & Mac

# 退出虚拟环境

deactivate envName # for Windows

source deactivate envName # for Linux & Mac

# 修改anaconda中python版本

sudo conda install python=3.7

Pytorch安装

参考网址

https://pytorch.org/get-started/locally/

pip

conda

conda install pytorch==1.0.0 torchvision==0.2.1 cudatoolkit=10.0

该命令意思是使用conda安装1.0.0版本的pytorch,0.2.1版本的torchvision,10.0版本的CUDA。最后的-c代表的是channels 从pytorch官网下载,会导致下载速度极慢。

更换镜像源

conda

使用命令将上述网址添加conda源

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/

最后使用新的安装命令,将-c pytorch去掉,表示从我们配置的新路径中下载

conda install pytorch==1.0.0 torchvision==0.2.1 cudatoolkit=10.0

pip

pip国内主要镜像:

阿里云 https://mirrors.aliyun测试数据/pypi/simple/

中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/

豆瓣(douban) http://pypi.douban测试数据/simple/

清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/

中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple

永久修改方法:

Linux :?? 修改 ~/.pip/pip.conf (没有就创建一个), 内容如下:

[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

windows:? 直接在user目录中创建一个pip目录,如:C:\Users\xx\pip,新建文件pip.ini,内容如下:

[global]

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

成功后的效果

GPU上运行

判断GPU是否可用

torch.cuda.is_available()

把模型参数和数据转化为cuda的支持类型

model.to(device)

data.to(device)

cuda数据转到cpu上

将GPU上计算结果为cuda的数据类型,需要转化为numpy或者torch的cpu的tensor类型

data.cpu().numpy()

data.cpu()

不同设备的切换

GPU、CPU设备的在模型保存于加载时切换

CPU ->GPU

GPU 0 ->GPU 1

GPU ->CPU

报错与踩坑

from torch._C import * ImportError: DLL load failed: 找不到指定的模块”解决方案

Python太旧,版本为python3.6.0,升级为python3.6.5版本

numpy版本的问题。将numpy版本更新

Cuda版本与显卡驱动、pytorch版本不对应

版本对应关系

https://docs.nvidia测试数据/cuda/cuda-toolkit-release-notes/index.html#title-resolved-issues

下载速度慢

换源

这种原因是因为多进程导致内存不够,将其改为单进程即可

更改torch版本:

部分原因是模型之间torch版本不匹配导致,加载使用模型时和训练模型时的环境不一致,可以重新安装torch

加载模型时,增加load_state_dict()属性:

model.load_state_dict(checkpoint['state_dict'], strict=False)

如果在训练过程遇到这种情况,可以尝试在训练前先释放CUDA内存

nvidia-smi查看GPU使用率,如果使用率不高,就使用torch.cuda.empty_cache()释放内存

官网对于torch.cuda.empty_cache()的说明:

Releases all unoccupied cached memory currently held by the caching allocator so that those can be used in other GPU application and visible in nvidia-smi.

释放当前由缓存分配器保留的所有未占用的缓存内存,以便这些内存可在其他GPU应用程序中使用,并在nvidia-smi中可见 。该语句是释放没有被使用的缓存,所以可以放心大胆地使用.

存在输入数据为cpu类型,但使用了GPU去训练

模型在cpu上,没有转到GPU

模型在GPU上,没有转到CPU

模型在不同的GPU设备上

扫描二维码

获取更多精彩

扫描二维码

获取更多精彩

WCTL@CQU

查看更多关于Pytorch框架的使用的详细内容...

  阅读:32次