本周使用REDS的视频数据制作了视频图片通用的编解码去噪数据集。考虑到视频处理使用到更大的模型与更多的数据,学习了pytorch的并行机制。
1 去编解码噪声数据集
之前图片超分数据集使用HDF5打包,这种方式虽然使用简单,但是不适用于数据量过大的场景,而现在一组QP的训练集达到40G的量级,所以采用了LMDB对数据打包,其优点是轻量化,读写快。
在吸取了之前数据集制作的不足之处后,现在的数据集具备以下之前没有的特点:
- 图片视频通用,没有预设网络输入的帧数,可弹性调整输入帧数而不用重做数据集
- 没有进行预裁剪,可灵活更改决定输入的size,而不用重做数据集
新的数据集具有较好的通用性
2 pytorch并行机制
pytorch并行分为两种,分别是数据并行和模型并行。数据并行就是将一个batch的数据分为多组置于不同GPU种进行运算,最后将结果进行组合做反向传播,每个GPU需要存储整个模型。模型并行则是将模型的各部分存储于不同GPU进行训练。
2.1 数据并行
数据并行适用于数据量较大的情况,每张GPU中都需要存储整个模型,所以存在一定的使用空间冗余。由于存在多张GPU之间的通信,必须等到每张GPU上的epoch都完成了才能进入下一个epoch,所以某些情况下多卡的速度可能比单卡更慢。
2.2 模型并行
模型并行适用于模型过大的情况,相比数据并行实现上相对复杂一些。将模型分为多个模块存储于不同的GPU中,相比数据并行消除了模型存储的冗余。
多GPU之间的同步是代码优化的主要工作,模型在各个GPU上每一次数据前向传播耗费的时间越接近越好,和木桶效应一样,运行的速度为最慢的GPU的速度,所以做模型拆分的时候需要了解各个拆分后模型的计算量以保证各个GPU上运行的时间接近。
3 参考资料
- https://pytorch.org/ For installation instructions
- Optional: Data Parallelism Single-Machine Data Parallel
- Getting Started with Distributed Data Parallel Combine Distributed Data Parallel and Model Parallel
- DATA PARALLELISM
- https://pytorch.org/tutorials/beginner/former_torchies/parallelism_tutorial.html