内存管理

配置项

说明

使用场景

atomic_clean_policy

是否集中清理网络中所有atomic算子占用的内存,取值包括:

  • 0:集中清理,默认为0。
  • 1:不集中清理,对网络每一个atomic算子进行单独清零。当网络中内存超限时,可尝试此种清理方式,但可能会导致一定的性能损耗。

配置示例:

custom_op.parameter_map["atomic_clean_policy"].i = 1

训练/在线推理

external_weight

是否将网络中Const/Constant节点的权重外置,取值包括:

  • False:权重不外置,保存在图中,默认为False。
  • True:权重外置,将网络中所有Const/Constant节点的权重落盘至临时目录“tmp_weight”下,并将其类型转换为FileConstant;模型卸载时,自动卸载“tmp_weight”目录下的权重文件。

说明:当网络中weight占用内存较大且对模型大小有限制时,建议将此配置项设置为“True”。

配置示例:
custom_op.parameter_map["external_weight"].b = True

训练/在线推理

graph_memory_max_size

网络静态内存和最大动态内存,可根据网络大小指定。单位:Byte,取值范围:[0, 256*1024*1024*1024]或[0, 274877906944]。

不同型号的昇腾AI处理器,“graph_memory_max_size”和“variable_memory_max_size”支持的总和最大值不同,您可以通过npu-smi info -t memory -i id命令查询某设备下所有芯片的内存信息,回显的片上内存值即为支持设置的“graph_memory_max_size”和“variable_memory_max_size”的总和最大值。

如果不设置,“graph_memory_max_size”的默认值为:26/32*片上内存最大值。

配置示例:

custom_op.parameter_map["graph_memory_max_size"].s = tf.compat.as_bytes(str(26*1024 * 1024 * 1024))

训练/在线推理

variable_memory_max_size

变量内存,可根据网络大小指定。单位:Byte,取值范围:[0,256*1024*1024*1024]或[0, 274877906944]。

不同型号的昇腾AI处理器,“graph_memory_max_size”和“variable_memory_max_size”支持的总和最大值不同,您可以通过npu-smi info -t memory -i id命令查询某设备下所有芯片的内存信息,回显的片上内存值即为支持设置的“graph_memory_max_size”和“variable_memory_max_size”的总和最大值。

如果不设置,“variable_memory_max_size”的默认值为:5/32*片上内存最大值。

配置示例:

custom_op.parameter_map["variable_memory_max_size"].s = tf.compat.as_bytes(str(5*1024 * 1024 * 1024))

训练/在线推理

static_memory_policy

网络运行是否使用内存静态分配方式。

  • 0:动态分配内存,即按照实际大小动态分配。
  • 1:静态分配内存,即按照允许的最大静态内存与变量内存进行分配。
  • 2:动态扩展内存,即当前图所需内存超过前一张图的内存时,直接释放前一张图的内存。

默认值是0,配置示例:

custom_op.parameter_map["static_memory_policy"].i = 0

训练/在线推理