昇腾社区首页
中文
注册

执行调优

前提条件

  • 请参见环境准备准备好开发环境与运行环境,并完成相关依赖软件的安装。
  • 请参见配置环境变量配置好Auto Tune工具执行依赖的环境变量。

在线调优

  • 执行TensorFlow训练脚本时,可通过如下开关使能Auto Tune调优工具。
    • 如果训练脚本中使用了initialize_system接口,请按照如下配置使能Auto Tune。
      npu_init = npu_ops.initialize_system()
      npu_shutdown = npu_ops.shutdown_system()
      config = tf.ConfigProto()
      ...
      custom_op.parameter_map["auto_tune_mode"].s = tf.compat.as_bytes("RL,GA")
      ...
      with tf.Session(config=config) as sess:
      
          sess.run(npu_init)
          #调用HCCL接口...
          #执行训练...
          sess.run(npu_shutdown)
    • 如果训练脚本中未使用initialize_system接口,请按照如下配置使能Auto Tune。
      • 通过session配置项中的auto_tune_mode参数设置:
        session_config = tf.config(…)
        custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add()
        …
        custom_op.parameter_map["auto_tune_mode"].s = tf.compat.as_bytes("RL,GA")
      • 通过NPURunConfig中的auto_tune_mode参数设置:
        session_config=tf.ConfigProto()
        config = NPURunConfig(auto_tune_mode="RL,GA", session_config=session_config)
    auto_tune_mode有以下三种取值:

    说明:请根据网络中的算子类型,选择合适的调优模式。当前版本RL调优模式耗时较长,通常一个算子调优大约需要5分钟,会根据网络中算子个数进行时间的累加。

    训练脚本的其他详细配置请参见TensorFlow网络模型迁移和训练指南

  • 执行MindSpore训练脚本时,可通过配置context中的auto_tune_mode参数使能Auto Tune:
    context.set_context(auto_tune_mode="RL,GA")  

    详细的context配置参数说明可参见:MindSpore API

其他说明:

Auto Tune记录的为INFO级别的日志,若想在Host侧日志文件中记录Auto Tune的日志信息,请将Host侧日志级别设置为INFO,然后重新执行训练脚本,日志级别设置方法请参见日志参考

调优过程中可通过环境变量进行如下功能的设置:
  • 如果网络模型中某个算子已命中知识库,默认不会重复调优,可通过配置REPEAT_TUNE环境变量强制调优。
  • 网络调优场景中,若某层算子性能较低,可通过配置TUNE_OPS_NAME环境变量对指定层进行调优。
    • Auto Tune工具还提供了其他环境变量控制功能,详情可参见配置环境变量
    • 如果使用多P训练脚本启动多个训练进程并同时开启调优,每个训练进程调优的算子一样,知识库也为同一份,并不会提升调优效率;多P同时调优时,由于各个训练进程之间存在调优时间差,可能会造成HCCL建链超时。

      所以多P训练场景下请用户在单机单P上进行调优,调优完成后,再进行多P训练。

    • 调优时请不要绑定训练进程到指定的CPU,请使用系统默认的CPU调度策略,否则,可能会影响调优效果。
    • 当前在同一个Host上允许开启多个训练进程同时调优,多进程并行在一定范围内会提升调优效率,但由于资源的限制,达到一定峰值后调优效率会随着进程数的增多下降,训练进程数配置建议满足如下规则:

      训练进程数 * TE_PARALLEL_COMPILER * 2 < Host侧CPU核数,其中TE_PARALLEL_COMPILER为算子并行编译进程数。

      TBE算子并行编译场景下(即TE_PARALLEL_COMPILER>1),一个调优进程需要对应一个Device,即在进行调优时,不可以进行需要使用Device资源的其他操作,否则会调优异常。

    • 调优后生成的自定义知识库的属组为执行调优操作的用户,权限为“640”,属组外用户无权限(超级用户除外),若希望其他用户可使用调优后的自定义知识库,需要手工赋权。

基于DUMP数据离线调优

Auto Tune工具提供基于算子输出描述等信息进行离线调优的功能,此种场景下,调优过程可脱离网络在线训练任务独立执行,主要包括如下两个步骤:
  • 用户需要在执行训练脚本生成网络模型时获取调优所需的DUMP数据(包含算子输出描述文件、算子的二进制文件等)。
  • 直接执行Auto Tune调优工具,基于上述步骤获取的DUMP数据进行离线调优。

详细操作如下所示:

  1. 执行训练脚本生成网络模型时获取网络模型中算子的DUMP数据。

    DUMP数据主要包含算子的输出描述文件以及算子的二进制文件等,生成DUMP数据的前提为:

    1. 配置DUMP相关环境变量。开启DUMP数据开关。
      1. 配置Auto Tune所需必选环境变量。

        请参见•基础环境变量

      2. 开启DUMP数据开关:
         export ENABLE_TUNE_DUMP=True
      3. 设置DUMP数据存储路径:
         export TUNE_DUMP_PATH=/home/username/DumpData
    2. 修改训练脚本,使能Auto Tune工具。

      在训练脚本中配置“auto_tune_mode”参数,不同场景下的训练脚本设置“auto_tune_mode”的详细方法可参见在线调优

    3. 执行训练脚本生成网络模型,同步生成DUMP数据。

      训练脚本执行完成后,会在“TUNE_DUMP_PATH”指定的路径下生成DUMP数据。

  2. 基于DUMP数据,执行Auto Tune工具进行离线调优。

    Auto Tune工具离线调优入口脚本为CANN软件安装后文件存储路径的:python/site-packages/schedule_search/msoptune.py,用户可直接调用此python文件实现离线调优,调用命令如下:

    python3.7 {msoptune.py文件所在路径} --start {DUMP数据所在目录}

    示例:

    python3.7 ${INSTALL_DIR}/python/site-packages/schedule_search/msoptune.py --start /home/username/DumpData
    • ${INSTALL_DIR}CANN软件安装后文件存储路径,请根据实际情况替换。
    • /home/username/DumpData:生成的DUMP数据所在目录,可配置为绝对路径,或者相对于当前脚本执行所在目录的相对路径。

    当前版本同一个Host上只允许开启一个进程进行离线调优,不允许多进程并发调优。

后续说明

  • 针对GA调优模式,您可以在打屏日志中搜索关键字“Round”,查看调优信息,如下图所示:
    图1 GA调优日志

    “Round 1/8”代表当前是第1轮调优,总调优轮数是8,调优完成后,您可以参见调优结果文件查看每个算子的调优结果。

  • 针对RL调优模式,您可以在打屏日志中搜索关键字“best_tick”,查看调优信息,如下图所示:

    “best_tick”代表本算子调优的最优结果,调优完成后,您可以参见调优结果文件查看每个算子的调优结果。