GPU Memory Optimization

功能简介

在 GPU 端,TensorFlow 原生 BFCAllocator 存在显存碎片过多的问题,导致显存浪费。该功能能够减少显存碎片,获得比 BFCAllocator 更少的显存占用。该功能在开始运行的前 K 个 step 收集运行信息并使用 cudaMalloc 分配显存,所以会造成性能下降,在收集信息结束后,开启优化,这时的性能会有所提升。

用户接口

在 GPU 端,目前的 DeepRec 版本支持单机版本的显存优化,且只针对训练场景。该优化默认关闭,可以使用 export TF_GPU_ALLOCATOR=tensorpool 命令开启该优化。注意该优化目前的性能略差于 BFCAllocator,但显存占用比 BFCAllocator 少。比如推荐模型 DBMTL-MMOE 的性能会下降 1% 左右(从 4.72 global_step/sec 降低到 4.67 global_step/sec),但是显存会减少 23% (从 1509.12 MB 减少到 1155.12 MB)。 存在两个环境变量:START_STATISTIC_STEPSTOP_STATISTIC_STEP,配置开始收集stats的step和结束收集开始优化的step,默认是10到110,可以适当调整。