TensorFlow eager模式下小张量操作内存占用过高问题咨询
原因说明
- CUDA算子懒加载的固定开销
TensorFlow的GPU算子默认采用懒加载逻辑,只有第一次调用某类GPU算子时,才会将对应的CUDA kernel二进制、关联的CUDA运行时组件加载到内存中。你观测到的调用tf.random.uniform、tf.matmul时出现的近700MB内存增长,和你使用的5x5极小张量没有任何关系,完全是这些常驻运行资源的加载开销,哪怕输入是1x1的张量,第一次调用这类算子也会产生同等规模的内存增长。 - 内存增长配置的作用边界
你开启的tf.config.experimental.set_memory_growth仅控制张量存储的显存分配策略,作用是避免TensorFlow启动时一次性占用全部显卡显存,改为按照实际张量存储需求逐步申请。该配置不会限制CUDA算子、运行时库这类固定运行组件的加载占用,因此开启后仍然可以复现该现象。 tf.concat无明显内存增长的原因
一方面你使用的张量尺寸极小,拼接后的总数据量仅为数十字节,这类极小的内存申请会直接从TensorFlow内部预先申请好的内存池中分配,不会触发向操作系统申请新内存的操作,在系统级的内存统计中无法观测到变化;另一方面tf.concat依赖的基础运行组件已经在之前调用其他算子时完成加载,没有额外的固定资源开销,因此不会出现明显的内存增长。
内容的提问来源于stack exchange,提问作者kaleado
相关产品推荐
相关产品推荐

