本节介绍PyTorch训练场景下,如何进行算子调优,包括调优前须知、dump算子图、配置环境变量和调优命令。
方式一:通过aclGenGraphAndDumpForOp接口dump出来算子图。
#在模型脚本首行,确认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出算子图的路径,必须要设置,不能为空;当设置的路径不存在时,会尝试创建,支持多级目录创建
#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)
CANN组合包提供进程级环境变量设置脚本,供用户在进程中引用,以自动完成环境变量设置。执行命令参考如下,以下示例均为root或非root用户默认安装路径,请以实际安装路径为准。
# 以root用户安装toolkit包 . /usr/local/Ascend/ascend-toolkit/set_env.sh # 以非root用户安装toolkit包 . ${HOME}/Ascend/ascend-toolkit/set_env.sh
#用于设置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命令使其立即生效。
export ASCEND_DEVICE_ID=0 export TUNE_BANK_PATH=/home/HwHiAiUser/custom_tune_bank export TE_PARALLEL_COMPILER=8 export REPEAT_TUNE=False
用户可将设置环境变量的命令写入自定义脚本,方便后续执行。
环境变量 |
说明 |
---|---|
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详细信息请参考《环境变量参考》。
说明:
在多用户共享知识库场景下,共享知识库的用户需要设置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参数说明。