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