开发者
下载
[object Object][object Object]

MindStudio Kernel Performance Prediction(算子调用工具,msKL)具有调用msOpGen算子工程和基于Ascend C模板库进行自动调优的功能,具体介绍如下:

  • :msKL工具提供的tiling_func和get_kernel_from_binary接口,可以直接调用msOpGen算子工程。
  • :msKL提供模板库Kernel下发代码生成、编译、运行的能力,同时提供Kernel内代码替换并自动调优的能力。
[object Object]

环境准备

进行算子开发之前,需要安装驱动固件和CANN Toolkit软件包以及ops算子包,请参见《》。本节不再给出安装示例。完成相关环境变量的配置后,可直接使用Kernel轻量化调用的功能。

  • 若要使用功能,需要下载中的Ascend C模板库。
  • 二次开发请保证输入数据可信安全。

约束

  • 出于安全性及权限最小化角度考虑,本代码仓中的工具均不应使用root等高权限账户进行操作,建议使用普通用户权限安装执行。

  • 使用算子开发工具前,请确保执行用户的umask值大于等于0027,否则会造成获取的性能数据所在目录和文件权限过大。

  • 使用算子工具前,请保证使用最小权限原则(如:禁止other用户可写,禁止666或777)。

  • 不建议配置或运行其他用户目录下的自定义脚本,避免提权风险。

  • 下载代码样例时,需执行以下命令指定分支版本。

    [object Object]
[object Object][object Object]

当前部分算子开源仓采用了msOpGen提供的工程模板。然而,基于此模板进行算子调用较为复杂,且难以实现算子的轻量化调测。为了解决此类问题,我们可以利用msKL工具提供的tiling_func和get_kernel_from_binary接口,直接调用msOpGen工程中的tiling函数以及用户自定义的Kernel函数。

[object Object]
  • 使用本功能时,算子输入输出仅支持numpy.Tensor、torch.Tensor。

  • 若CANN中曾经部署过相同类型的算子(op_type),用户修改了tiling函数并重新编译,则需要在CANN环境中重新部署该算子。

  • 调用tiling_func和get_kernel_from_binary接口时,系统会在当前目录下的mindstudio_mskl_gen文件夹中生成以下中间文件,该文件仅供开发定位使用,用户无需关注。请勿修改该文件夹及其子文件的内容,以免造成工具功能异常。

    [object Object]
[object Object]

本章节以matmulleakyrelu算子工程为例,介绍如何利用msKL工具提供的tiling_func和get_kernel_from_binary接口调用msOpGen工程中的tiling函数以及用户自定义的Kernel函数,其他类型的算子操作均可参考此流程进行操作。

环境准备[object Object][object Object]

  • 请参考,完成相关环境变量的配置。

  • 单击获取样例工程,为进行算子检测做准备。

    [object Object]

具体操作

  1. 参见中的样例工程,运行[object Object]目录下的[object Object]脚本,生成自定义算子工程,并进行Host侧和Kernel侧的算子实现。

    [object Object]
  2. 切换至自定义算子工程目录。

    [object Object]
  3. 编辑算子拉起脚本matmulleakyrelu.py。

    [object Object]
  4. 运行脚本。

    [object Object]
[object Object]

无。

[object Object][object Object]

在进行模板库算子开发时,利用msKL提供的接口在Python脚本中快速实现Kernel下发代码生成、编译及运行Kernel。

在对模板库算子进行性能调优时,通常需要对Kernel的模板参数(比如L0shape大小)进行多次调整并对比性能结果。为提升调优效率,msKL工具提供了autotune系列接口支持开发者可以高效地针对多个调优点进行代码替换、编译、运行以及性能对比。

[object Object]
  • 自动调优功能仅支持Atlas A2 训练系列产品/Atlas A2 推理系列产品。

  • 单Device仅支持使用单个msKL工具进行自动调优,且不推荐同时运行其他算子程序。

  • 需确保先import mskl再import acl,否则需要在运行前设置环境变量。

    [object Object]
[object Object]

自动调优流程

自动调优流程包括Kernel级自动调优和应用级自动调优两种,具体流程请参见,具体操作请参见

图 1 自动调优流程示意图[object Object][object Object]

Kernel级自动调优样例[object Object][object Object]

本章节以模板库catlass-v1-dev分支的为例,介绍如何利用msKL工具提供的接口实现Kernel级自动调优。

[object Object]
  1. 完成算子Kernel开发后,Kernel函数的定义与实现将会呈现在basic_matmul.cpp文件中,如下所示。

    [object Object]
  2. 参考附录,在examples/00_basic_matmul目录中创建Python脚本文件与编译脚本文件

    按照如下要求,定义算子Kernel函数的Python接口:在Python脚本中定义basic_matmul函数,其入参需与C++代码中的Kernel函数保持一致。

    [object Object]
  3. 参考如下代码实现,构造Kernel入参,实现basic_matmul函数的正常运行。

    • 若算子Kernel函数入参是GM_ADDR,则构造入参需使用numpy.array类型。
    • 若算子Kernel函数入参是C++结构体对象,则需依靠ctypes.Structure在Python中构建一个相同的结构体。
    [object Object]
  4. 运行Python脚本,获得如下提示,说明算子Kernel已可正常通过Python接口拉起。

    [object Object]
  5. 在算子代码程序basic_matmul.cpp中标识需调优的参数。

    在模板参数的声明代码行末尾使用**// tunable**标记,用于替换"="号后的代码内容。

    [object Object]
    [object Object]
  6. 通过autotune接口的configs入参定义参数搜索空间,每一类参数组合会替换算子Kernel代码中被标记的代码行,然后进行编译、运行并完成Kernel性能采集。搜索空间定义示例可参考如下所示。

    [object Object]
    [object Object]
  7. 执行basic_matmul_autotune.py文件运行算子,获得每种参数组合的耗时及最佳调优参数集合。以下仅展示可能的一种命令行输出结果。

    [object Object]

    通过对比得知,No.4为最佳调优参数集合。

应用级自动调优样例[object Object][object Object]

本章节以模板库master分支的为例,介绍如何利用msKL工具提供的接口实现对应用级的自动调优。

[object Object]
  1. 参考示例,使用模板库Device层接口完成算子实现,并分别在115、117行末尾添加**// tunable**注释,用于替换"="号后的代码内容。

    [object Object]
  2. 目录中创建Python脚本文件与编译脚本文件

    可根据实际需要修改basic_matmul_executable_autotune.py脚本中autotune_v2接口传入的configs参数以搜索自定义tiling参数组合。

[object Object]

运行Python脚本basic_matmul_executable_autotune.py,获取每种参数组合的耗时及最佳调优参数集合。以下仅展示可能的一种命令行输出结果。

[object Object]

通过对比得知,No.9为最佳调优参数集合。

[object Object][object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]