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

BuildCCE

功能说明

BuildCCE的功能是,生成用户在目标机上定义的TIK描述语言,并将TIK描述语言编译成昇腾AI处理器上可执行的二进制代码,以及对应的配置文件。

函数原型

BuildCCE(kernel_name, inputs, outputs, output_files_path=None, enable_l2=False, config=None, flowtable=None, evaluates=None, extend_params=None)

参数说明

表1 参数说明

参数名称

输入/输出

含义

kernel_name

输入

  • 传入类型:string
  • 作用:指示生成二进制文件的文件名,以及生成CCE kernel函数的函数名。
  • 格式:由数字、字母和下划线组成,不允许以数字开头
  • 举例说明:

    传入字符串为“test”,则生成二进制文件的文件名为:test.o;生成CCE kernel函数的函数名为test__kernel0。

inputs

输入

  • 传入类型:由scope为“scope_gm”的TensorInputScalar组成的list或者tuple。
  • 作用:指定生成的CCE kernel函数中,作为算子输入参数。参数个数小于等于64。

outputs

输入

  • 传入类型:由scope为“scope_gm”的Tensor组成的list或者tuple。
  • 作用:指定生成的CCE kernel函数中,作为算子输出参数。参数个数小于等于64。
  • 说明:当outputs=[]时,返回值是一个长度为1且数据为0的数组,即[ [0] ] 。

output_files_path

输入

编译后目标文件输出文件路径,支持string类型。

  • 如果不设置该路径,默认为None,输出到当前运行目录下的”./kernel_meta”。
  • 如果设置了该路径,则输出到该路径的kernel_meta内。支持设置相对和绝对路径。

enable_l2

输入

外存是否是L2,支持Bool类型。默认值为False。

该参数不生效。

config

输入

字典类型,包括key和value,key为字符串格式,用于配置算子编译信息。

配置格式:

config = {"key":value}

配置示例:

config = {"tbe_debug_level":2,"enable_const_fold":True,"double_buffer_non_reuse":True}

当前支持的key为:

  • kernel_meta_parent_dir:设置算子编译过程中存储调试文件的“kernel_meta”文件夹的父路径。其中调试过程文件包括算子.o(算子二进制文件)、.json(算子描述文件)、.cce等文件。和output_file_path效果一样,如果同时配置,output_file_path优先生效。

    取值:数据类型为string,配置为执行编译命令所在路径的相对路径。

    默认值为“.”,即调试过程文件存储在执行编译命令当前路径的./kernel_meta文件夹中。

  • tbe_debug_level:debug等级设置。有以下几种取值:
    • 0:不开启debug功能,仅在kernel_meta文件夹中生成.o(算子二进制文件)和.json文件(算子描述文件)。默认值为“0”。
    • 1:单算子调试时,开启算子debug功能,在kernel_meta文件夹中生成TBE指令映射文件(算子cce文件*.cce、python-cce映射文件*_loc.json、.o和.json文件)。开启算子debug功能会导致算子执行性能下降。
    • 2:单算子调试时,开启算子debug功能,在kernel_meta文件夹中生成TBE指令映射文件(算子cce文件*.cce、python-cce映射文件*_loc.json、.o和.json文件)。并关闭ccec编译器的编译优化开关且打开ccec调试功能(ccec编译器选项设置为-O0-g)。开启算子debug功能会导致算子执行性能下降。
      须知:

      若执行ATC模型转换或者执行训练脚本时配置了“op_debug_level”参数,则以“op_debug_level”参数的值为准。

  • enable_const_fold:是否开启常量折叠,value值可以为True和False。常量折叠是在编译时简化常量的一个过程。通过对常量进行折叠,可以简化代码,提升运行性能。默认为False。例如:

    a = 1 表示在tik里定义了一个scalar,同时对它赋值为1。如果之前已经定义,则只表示赋值为1;a = ? 表示不知道具体值,只有当代码在执行的时候才知道;vec_add(a) 表示某一个指令名称,传入的参数为a。

    折叠前:

    a = 1
    b = a + 1
    vec_add(b)
    c = ?
    b = c + 1 + a
    vec_add(b)

    折叠后:

    a = 1
    b = 1 + 1 = 2
    vec_add(2)
    c = ?
    b = c + 1 + 1 = c + 2
    vec_add(b)
  • double_buffer_non_reuse,表示double_buffer内的ping变量和pong变量是否重用,value值可以为True和False,如果配置为True表示ping变量pong变量不重用;False表示ping变量pong变量可能重用。默认为False。需要注意,此配置为预留功能配置,不建议开发者使用,后续可能会存在变更。

flowtable

输入

传入类型:由scope为“scope_gm”的TensorInputScalar组成的list或者tuple。

flowtable参数列表,用于传入Tiling参数(例如在动态shape场景下,由算子选择器计算得到)。该列表中的参数个数和inputs的参数个数之和小于等于64。

evaluates

输入

调试参数,用户在编译阶段给已定义的全局的scalar变量赋值。

字典类型,包括key和value,key为scalar的变量名,是Scalar格式;value为具体值,支持python的int, float。

配置格式:

evaluates = {key : value}

配置示例:

a = tik_instance.Scalar(dtype="float16")
a.set_as(1)
tik_instance.BuildCCE(..., evaluates = {a : 2})

extend_params

输入

扩展参数,字典类型,包括key和value,

key表示扩展参数名称,数据类型为字符串,

value表示扩展参数值,具体类型和key相关。

示例:

extend_params = {"param1": value1, 
                 "param2": value2}

当前支持的扩展参数请见表2

表2 extend_params扩展参数说明

扩展参数名称

参数说明

build_multi_kernels

根据tiling策略集合编译生成tiling策略对应的kernel,kernel名与tiling策略在集合里的索引有关,并会将这些kernel封装在同一个.o文件中,运行的框架会自动根据tiling策略调用相应的功能。

配置示例:

tik_instance.BuildCCE(...,
 extend_params={"build_multi_kernels":{
  "tiling_key":[Scalar1, Scalar2],
  "tiling_key_value":
       [[Scalar1_val_1,Scalar2_val_1],
       [Scalar1_val_2,Scalar2_val_2]]}})

其中,

tiling_key为tiling策略的关键词,配置要求为:

  • 输入必须是list或者tuple,且元素必须是Scalar变量。
  • 支持int8、int16、int32、int64、float16、float32类型的Scalar。

tiling_key_value为tiling策略的关键词所对应的值,配置要求为:

  • 输入必须是二维的list或tuple。
  • 只支持Python的int、float类型的数据,且数值必须在对应Scalar的具体类型所表示的数值范围内。
  • "tiling_key_value"输入数据的第二维的数据长度需要与"tiling_key"的输入数据长度保持一致。即"tiling_key_value" 的输入数据为"tiling_key" 的输入数据的集合。
  • "tiling_key_value"输入数据的第一维的数据的长度决定一个.o文件里kernel 函数的个数。

支持的型号

Atlas 200/300/500 推理产品

Atlas 训练系列产品

Atlas推理系列产品AI Core

Atlas推理系列产品Vector Core

Atlas A2训练系列产品/Atlas 800I A2推理产品

Atlas 200/500 A2推理产品

注意事项

  • 同一tensor不能同时在inputs和outputs中,不然TIK将报错。
  • 所有scope_gm中的tensor必须在inputs或者在outputs中(除非是workspace中的Tensor或者是有赋初值init_value的Tensor),否则编译报错。
  • BuildCCE在无输出时会指定一个长度为1的数据为0的数组,即设置outputs=[],返回值为[ [0] ]。
  • inputs中需要将Tensor放置在InputScalar前面。
  • flowtable中需要将Tensor放置在InputScalar前面,并且只允许存在一个Tensor。
  • evaluates只会改变初次scalar定义的值, evaluates字典最大支持16个元素。

返回值

调用示例

from tbe import tik
tik_instance = tik.Tik()
data_A = tik_instance.Tensor("float16", (128,), name="data_A", scope=tik.scope_gm)
data_B = tik_instance.Tensor("float16", (128,), name="data_B", scope=tik.scope_gm)
data_C = tik_instance.Tensor("float16", (128,), name="data_C", scope=tik.scope_gm)
tik_instance.BuildCCE(kernel_name="simple_add",inputs=[data_A,data_B],outputs=[data_C])
搜索结果
找到“0”个结果

当前产品无相关内容

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