下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

算子调优

本节介绍PyTorch训练场景下,如何进行算子调优,包括调优前须知、dump算子图、配置环境变量和调优命令。

调优前须知

  1. 请保证训练脚本在昇腾AI处理器上执行成功,功能和精度满足预期。
  2. 不建议用户绑定训练进程到指定的CPU,请使用系统默认的CPU调度策略。否则,可能会影响调优效果。
  3. 为提高调优效率,希望用户尽量控制训练步数。一般情况下,通过一个step能完成一次完整的图执行过程,保证图中所有的算子都能遍历一遍完成调优即可。
  4. 目前仅支持静态算子,暂不支持动态算子。
  5. 仅支持1P脚本进行dump图。
  6. AOE不支持不同用户同时使用同一device进行调优。
  7. 单个AOE进程时,请确保具备如下条件。多个AOE进程时,可参考如下条件自行扩展。
    • 调优用户的家目录下磁盘可用空间>=20G。
    • 可用内存>=32G。
    • 算子调优时Host CPU要求:建议>=TE_PARALLEL_COMPILER + TUNING_PARALLEL_NUM + 1 + min(CPU的核数/2, 8) + 58。其中TE_PARALLEL_COMPILER 和TUNING_PARALLEL_NUM 的说明请分别参考表1表1
    • Device核数>=模型中所有算子使用的最大核数。
    • Device内存:和模型相关,和模型的内存复用相关。
  8. 调优前,请确保关闭Profiling功能,避免影响调优结果。关闭Profiling功能具体操作请参见性能分析工具使用指南

dump算子图

方式一:通过CANN AscendCL应用软件开发指南(C&C++)中的aclGenGraphAndDumpForOp接口dump出来算子图。

方式二:在模型脚本中添加如下使能代码,将算子图dump到本地。

  • PyTorch 1.5版本:
    #在模型脚本首行,确认PyTorch框架版本
    import torch
    if torch.__version__ >= "1.5":
        import torch_npu
    import torch.npu
    
    def train_model():
    
        # PyTorch 1.5版本参见如下设置使能AOE dump接口,dump_path为保存算子子图的路径,请自行设置
        torch.npu.set_aoe(dump_path)
    
        train_model_one_step() # 模型训练过程,一般仅需要跑一个step即可
    # dump_path表示设置保存dump出算子图的路径,必须要设置,不能为空;当设置的路径不存在时,会尝试创建,支持多级目录创建
    
  • PyTorch 1.8及以上版本:
    #在模型脚本首行,确认PyTorch框架版本
    import torch
    if torch.__version__ >= "1.8":
        import torch_npu
    import torch.npu
    
    def train_model():
        # PyTorch 1.8及以上版本参见如下设置使能AOE dump接口,dump_path为保存算子子图的路径,请自行设置
        torch_npu.npu.set_aoe(dump_path)
    
        train_model_one_step() # 模型训练过程,一般仅需要跑一个step即可
    # dump_path表示设置保存dump出算子图的路径,必须要设置,不能为空;当设置的路径不存在时,会尝试创建,支持多级目录创建
    

以resnet50模型为实际样例,修改如下。

  • PyTorch 1.5版本:
    #line 445~460
    model.train()
    optimizer.zero_grad()
    end = time.time()
    torch.npu.set_aoe(dump_path)#使能接口
    for i, (images, target) in enumerate(train_loader):
        # 图模式
        if args.graph_mode:
            print("args.graph_mode")
            torch.npu.enable_graph_mode()
    
        if i > 0:             #仅需要运行一个step
            exit()
        if i > 100:
            pass
        # measure data loading time
        data_time.update(time.time() - end)
    
        if args.gpu is not None:
            images = images.cuda(args.gpu, non_blocking=True)
  • PyTorch 1.8及以上版本:
    #line 427~437
    model.train()
    optimizer.zero_grad()
    end = time.time()
    torch_npu.npu.set_aoe(dump_path) #使能接口
        # 图模式
        if args.graph_mode:
            print("args.graph_mode")
            torch.npu.enable_graph_mode()
    
        if i > 0:             #仅需要运行一个step
            exit()
        if i > 100:
            pass
        # measure data loading time
        data_time.update(time.time() - end)
    
        if args.gpu is not None:
            images = images.cuda(args.gpu, non_blocking=True)

参考链接:https://gitee.com/ascend/ModelZoo-PyTorch/blob/master/PyTorch/built-in/cv/classification/ResNet50_for_PyTorch/pytorch_resnet50_apex.py

配置环境变量

发起调优前,需要添加如下环境变量。
  • CANN软件基础环境变量

    CANN组合包提供进程级环境变量设置脚本,供用户在进程中引用,以自动完成环境变量设置。执行命令参考如下,以下示例均为root或非root用户默认安装路径,请以实际安装路径为准。

    # 以root用户安装toolkit包
    . /usr/local/Ascend/ascend-toolkit/set_env.sh 
    # 以非root用户安装toolkit包
    . ${HOME}/Ascend/ascend-toolkit/set_env.sh 
  • AOE工具依赖Python,以Python3.7.5为例,请以运行用户执行如下命令设置Python3.7.5的相关环境变量。
    #用于设置python3.7.5库文件路径
    export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
    #如果用户环境存在多个python3版本,则指定使用python3.7.5版本
    export PATH=/usr/local/python3.7.5/bin:$PATH

    Python3.7.5安装路径请根据实际情况进行替换,您也可以将以上命令写入~/.bashrc文件中,然后执行source ~/.bashrc命令使其立即生效。

  • 调优前也可参考如下示例配置其他环境变量,但为可选配置,相关说明请参考表1
    export ASCEND_DEVICE_ID=0
    export TUNE_BANK_PATH=/home/HwHiAiUser/custom_tune_bank
    export TE_PARALLEL_COMPILER=8
    export REPEAT_TUNE=False

    用户可将设置环境变量的命令写入自定义脚本,方便后续执行。

    表1 环境变量说明

    环境变量

    说明

    ASCEND_DEVICE_ID

    通过该环境变量指定昇腾AI处理器的逻辑ID。

    取值范围[0,N-1],默认为0。其中N为当前物理机/虚拟机/容器内的设备总数。

    TUNE_BANK_PATH

    可通过此环境变量指定调优后自定义知识库的存储路径。

    设置的存储路径必须为绝对路径或相对于执行AOE调优引擎所在路径的相对路径,配置的路径需要为已存在的目录,且执行用户具有读、写、可执行权限。若配置的TUNE_BANK_PATH路径不存在或用户无权限,则调优进程会报错并退出。

    自定义知识库存放路径的优先级为:TUNE_BANK_PATH>ASCEND_CACHE_PATH>默认,TUNE_BANK_PATH和ASCEND_CACHE_PATH详细信息请参考环境变量参考
    • 算子自定义知识库
      • 若不配置此环境变量,请使用env命令查询ASCEND_CACHE_PATH是否存在,若存在,自定义知识库存储在:${ASCEND_CACHE_PATH}/aoe_data/${soc_version};若不存在,自定义知识库默认存储在:${HOME}/Ascend/latest/data/aoe/custom/op/${soc_version}。
      • 若配置此环境变量,则调优后的最优策略存储在配置路径的${soc_version}。
    说明:

    在多用户共享知识库场景下,共享知识库的用户需要设置TUNE_BANK_PATH为同一路径,并且对配置的路径具有读、写权限。

    若调优时自定义了知识库路径,后续进行模型转换时,若想直接使用自定义知识库,也需要配置此环境变量。

    TE_PARALLEL_COMPILER

    算子编译所需环境变量。

    网络模型较大时,可通过配置此环境变量,开启算子的并行编译功能。

    TE_PARALLEL_COMPILER的值代表算子编译进程数(配置为整数),当取值大于1时开启算子的并行编译功能。开启AOE调优场景下:配置不能超过CPU核数*80%/昇腾AI处理器的个数,取值范围:1~32,默认值为8。

    由于该环境变量能够加速算子编译,所以可以加快涉及算子编译的相关流程调优。

    REPEAT_TUNE

    是否重新发起调优,此环境变量在开启子图调优或算子调优的场景下生效。

    如果知识库(内置或者自定义)中已经存在网络模型中的调优case(针对某shape的调优策略),则会跳过此case的调优流程,若想重新发起调优,可设置此环境变量为True。例如某些算子进行了逻辑的变更,如GEMM算子新增了支持ND的输入,该情况下需要设置此环境变量后,重新发起调优。

    取值范围:True或者False,默认值为False。

执行调优

将准备好的算子图使用AOE进行调优,调优示例如下。

aoe --job_type=2 --model_path=dump_path

更多AOE参数请参见AOE参数说明

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词