---
title: 使用约束
description: "iterations_per_loop是针对一次session.run调用，在Device侧执行训练迭代的次数。Device侧会运行iterations_per_loop指定的迭代次数，然后再返回到Host侧，该参数可以减少Host与Device间的交互次数，缩短训练时长。"
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/migration/tfmigr1/tfmigr1_000048.html
sourcePath: /source/zh/TensorFlowCommercial/900/migration/tfmigr1/tfmigr1_000048.html
indexId: 180da078310e32854112dcc08395b0ef95e44062ec73e3df2b37c097efba42a573
---
# 使用约束

iterations_per_loop是针对一次session.run调用，在Device侧执行训练迭代的次数。Device侧会运行iterations_per_loop指定的迭代次数，然后再返回到Host侧，该参数可以减少Host与Device间的交互次数，缩短训练时长。

iterations_per_loop默认为1，配置该参数大于1即可使能训练迭代循环下沉的特性，但使用该特性时需要注意以下约束：

- 要求训练脚本必须使用TensorFlow的Dataset方式读数据，并且不使用one shot iterator进行预处理初始化，例如使用tf.data.make_initializable_iterator()迭代器。使用Dataset方式读取数据是数据预处理下沉与训练迭代循环下沉的前提条件，关于Datasets的详细使用方法可参见  TensorFlow官网(https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/data/Dataset)
。
- 要求开启数据预处理下沉，即enable_data_pre_proc开关配置为True，此时才会生成在Device侧执行的GetNext算子，训练迭代循环下沉才会生效。

  - sess.run开启数据预处理下沉配置示例：

```
custom_op.parameter_map["enable_data_pre_proc"].b = True
```


  - NPURunConfig开启数据预处理下沉配置示例：

```
config = NPURunConfig(enable_data_pre_proc=True)
```


- 要求训练迭代总次数必须为iterations_per_loop的整数倍。
- 训练迭代循环下沉场景下保存checkpoint数据时，要求save_checkpoints_steps必须大于或等于iterations_per_loop，且是iterations_per_loop的整数倍，否则不会按照save_checkpoints_steps配置的值保存数据。且iterations_per_loop>1时，可能无法按照save_summary_steps和log_step_count_steps配置的值保存信息，请参考  Log/Summary
实现信息保存。
- 混合计算模式（mix_compile_mode为True）下，不能开启训练迭代循环下沉，即要求iterations_per_loop必须为1。
- 在网络调测阶段建议设置iterations_per_loop为1，方便打印每轮迭代的日志信息。网络调通后可以设置iterations_per_loop参数用于缩短训练时长。
