本文是“[PPoPP18] SuperNeurons:Dynamic GPU Memory Management for Training Deep Neural Networks”的论文阅读笔记,论文、talk视频PPT等详见作者主页:https://linnanwang.github.io/
参考资料:
https://linnanwang.github.io/
How to Optimize Data Transfers in CUDA C/C++
How to Overlap Data Transfers in CUDA C/C++
Memory Allocation Overhead
cudamalloc slow
vDNN: Virtualized Deep Neural Networks for Scalable, Memory-Efficient Neural Network Design
Training Deep Nets with Sublinear Memory Cost
Arbitrary 2D convolution
Fast Algorithms for Convolutional Neural Networks
GPU显存控制策略与提升
该论文对时下各个框架中显存控制的思想做了汇总,并做了一些技术上的提升。整体上分为三个部分:
1. Live Analysis:即资源回收,回收无用tensor的显存。
2. offloading&prefetching:将装不下的tensor暂存到内存等其他设备中。
3. Recomputation:对于占用显存多、计算消耗小的tensor,不进行存储,需要使用时重新计算。
1. Live Analysis
其思想主要是资源回收,对于后续操作不依赖的tensor进行回收,释放相应的显存空间。
关于如何分析依赖关系,笔者猜测应该有许多基于计算图的算法。论文中给出了一个简单的 O(N2) O ( N 2 )