PyTorch常用代码段

这里是PyTorch中常用代码段的一份整理,并且持续更新,初稿在参考资料1的基础上进行编辑补充,方便使用时查阅。

 

1.基本配置

导入包和版本查询

可复现性

在硬件设备(CPU、GPU)不同时,完全的可复现性无法保证,即使随机种子相同。但是,在同一个设备上,应该保证可复现性。具体做法是,在程序开始的时候固定torch的随机种子,同时也把numpy的随机种子固定。

显卡设置

指定程序运行在特定GPU卡上。

在命令行指定环境变量

或在代码中指定

清除GPU存储 有时Ctrl+C中止运行吼GPU存储没有及时释放,需要手动清空。在PyTorch内部可以

或在命令行

 

多gpu并行训练

我一般在使用多GPU的时候, 会喜欢使用os.environ['CUDA_VISIBLE_DEVICES']来限制使用的GPU个数, 例如我要使用第0和第3编号的GPU, 那么只需要在程序中设置:

1.单机多卡 DataParallel (DP) : Parameter Server模式,一张卡位reducer,实现也超级简单,一行代码。

 

2.多机多卡

DistributeDataParallel (DDP) : All-Reduce模式,本意是用来分布式训练,但是也可用于单机多卡。

1.初始化后端

2.模型并行化

最小例程与解释

☞训练一个MNIST分类的简单卷积网络。

☞加上MultiProcessing

(我们需要一个脚本,用来启动一个进程的每一个GPU。每个进程需要知道使用哪个GPU,以及它在所有正在运行的进程中的阶序(rank)。而且,我们需要在每个节点上运行脚本。)

3.Apex混合精度训练

(在2的基础上)

最近Apex更新了API,只需上述三行代码即可实现混合精度加速

基于Apex的混合精度加速

混合精度训练与模型并行适配

 

 

 

 

 

 

 

2.张量(Tensor)处理

张量基本信息

数据类型转换

torch.Tensor↔np.ndarray

除了CharTensor,其他所有CPU上的张量都支持转换为numpy格式然后转换回来。

torch.Tensor↔PIL.Image

PyTorch中的张量默认采用N×C×H×W的顺序,并且数据范围在[0, 1],需要进行转置和规范化。

np.ndarray↔PIL.Image

 

 

https://www.zhangshengrong.com/p/Ap1Zp295N0/

3.模型定义和操作

加载模型

GPU → CPU

CPU → GPU

GPU→GPU

多GPU → CPU 保存了模型nn.DataParallel,该模型将模型存储在该模型中module,而现在您正试图加载模型DataParallel。您可以nn.DataParallel在网络中暂时添加一个加载目的,也可以加载权重文件,创建一个没有module前缀的新的有序字典,然后加载它。