ImageNet是图像图像领域不可不调的一个数据集。本文记录自己的训练脚本,参考自Pytorch官方的example。
需要掌握的用法如下:
criterion = nn.CrossEntropyLoss().cuda()
将所有的模型参数移动和buffer移动到gpu上DataLoader中的参数
pin_memory
将cpu上的tensor数据转移到gpu上时,置为true会加速。
If you load your samples in the Dataset on CPU and would like to push it during training to the GPU, you can speed up the host to device transfer by enabling pin_memory.DataLoader中的参数
nums_workers
这个参数必须大于等于0,0表示数据导入在主进程中进行,其他大于0的数表示通过多个进程来导入数据,可以加快数据导入速度。cudnn.benchmark = True
的作用
大部分情况下,设置这个 flag 可以让内置的 cuDNN 的 auto-tuner 自动寻找最适合当前配置的高效算法,来达到优化运行效率的问题。
一般来讲,应该遵循以下准则:
如果网络的输入数据维度或类型上变化不大,设置 torch.backends.cudnn.benchmark = true 可以增加运行效率;
如果网络的输入数据在每次 iteration 都变化的话,会导致 cnDNN 每次都会去寻找一遍最优配置,这样反而会降低运行效率。
1 | import argparse |