TensorFlow BFC allocator的MaxInUse等指标含义及OOM问题咨询
TensorFlow BFC 显存分配器指标含义说明
BFC(Best-Fit with Coalescing)是TensorFlow默认的GPU显存分配器,你日志中输出的各指标含义如下,所有数值的默认单位为字节:
核心指标解释
- Limit:当前TensorFlow进程可以使用的GPU显存总上限。你日志中该值为10255859712,换算后约为9.55GiB,即你的GPU分配给本次TensorFlow任务的总显存大小。
- InUse:当前已经被分配、且正在被程序使用的显存总大小。你日志中该值为9942288128,换算后约为9.26GiB,已占用绝大多数可用显存。
- MaxInUse:从程序启动到报错时刻,历史达到过的显存使用峰值。你日志中该值与InUse一致,说明报错时刚好处于程序运行以来的显存占用最高点。
- NumAllocs:从程序启动到报错时刻,BFC分配器累计执行的显存分配操作总次数。
- MaxAllocSize:从程序启动到报错时刻,单次显存分配操作申请过的最大显存块大小。你日志中该值为591396864,换算后约为564MiB。
本次OOM报错原因
本次报错时程序需要分配形状为[4096,141,96]的float类型张量,所需显存约为211.5MiB。虽然此时总剩余显存约为299MiB,但BFC分配器需要连续的空闲显存块才能完成分配,由于显存碎片的存在,没有足够大的连续空闲块满足分配需求,因此触发OOM错误。
常见OOM问题解决方法
- 优先调小训练/推理的batch size,是降低显存占用最直接的方法
- 开启TensorFlow显存动态分配模式,在代码初始化阶段添加:
避免TensorFlow启动时直接占用全部GPU显存gpus = tf.config.list_physical_devices('GPU') if gpus: tf.config.experimental.set_memory_growth(gpus[0], True) - 使用混合精度训练,可降低约一半的显存占用
- 简化模型结构,降低隐藏层维度、减少全连接层数量,或替换为更轻量化的网络结构
- 训练过程中及时清理不需要的中间张量,避免无效显存占用
内容的提问来源于stack exchange,提问作者Accus
相关产品推荐
相关产品推荐

