pypto.frontend.jit#
产品支持情况#
Ascend 950PR/Ascend 950DT:支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品:支持
Atlas A2 训练系列产品/Atlas A2 推理系列产品:支持
功能说明#
pypto.frontend.jit是前端架构中的核心装饰器,用于将Python函数即时编译(JIT)为高效的计算图并在NPU上执行。前端不支持返回值,仅支持in-place修改;支持传入torch张量及其他类型的变量。
主要特性:
In-place修改: 内核函数通过in-place修改输出张量传递计算结果,不支持返回值
类型注解: 在函数签名中明确指定张量的形状和数据类型
直接调用: 测试时可直接传入torch张量及其他类型的变量,无需显式转换
动态形状支持: 配合
pypto.DYNAMIC支持运行时变化的维度多运行模式: 支持NPU和SIM(模拟器)两种运行模式
函数原型#
@pypto.frontend.jit(
host_options=None,
runtime_options=None,
codegen_options=None,
pass_options=None
)
def kernel_function(...):
...
参数说明#
参数名 |
输入/输出 |
说明 |
|---|---|---|
func |
输入 |
frontend.jit修饰的函数,kernel入口,描述计算过程,用于构建计算图。 |
host_options |
输入 |
类型为 |
runtime_options |
输入 |
类型为 |
codegen_options |
输入 |
类型为 |
pass_options |
输入 |
类型为 |
verify_options |
输入 |
类型为 |
debug_options |
输入 |
类型为 |
runtime_options参数说明 #
参数名 |
说明 |
|---|---|
device_sched_mode |
含义:设置计算子图的调度模式 |
stitch_function_max_num |
含义:machine运行时ctrlflow aicpu里控制每次提交给schedule aicpu处理的最大device task的计算任务量 |
max_workspace_kb |
含义:DeviceTask workspace 内存上限(KB),用于使能内存驱动stitch 模式。 |
run_mode |
含义:设置计算子图的执行设备 |
valid_shape_optimize |
含义:动态shape场景,validshape编译优化选项,打开该选项后,动态轴的Loop循环中,主块(shape与validshape相等)采用静态shape编译,尾块采用动态shape编译 |
ready_on_host_tensors |
含义:标记在Host端准备好的Kernel入口函数的输入tensor名称列表,格式为[“tensor1”, “tensor2”, …]。 |
device_sched_parallelism |
含义:当算子中pypto.loop设置了可并行标记(parallel=True)时,此配置项用于指定pypto.loop在调度执行时的并行度 |
launch_sched_aicpu_num |
含义:指定启动的Schedule AICPU线程数量 |
launch_early_mode |
含义:aicpu提前发射模式,支持aicpu不等待aicore启动后再启动 |
返回值说明#
返回装饰后的函数,该函数可被直接调用执行。
约束说明#
张量参数,必须使用类型注解指定为
pypto.Tensor类型动态维度必须使用
pypto.DYNAMIC或pypto.DYN在参数注解中标记,未标记时,默认按静态维度处理tensor format用format标记,format支持非显式标记(参考示例1中的a),默认为pypto.TileOpFormat.TILEOP_ND; format显式标记时,性能更优,要求传入的torch tensor与pypto.Tensor声明的format一致,能获得更优的性能;
张量参数在前,非张量参数(如
scalar、tiling)在后非张量参数支持keyword传参、位置参数、使用默认值
最大可用aicpu数量说明:
Ascend 950PR/Ascend 950DT,最大可用aicpu数量为7(具体最大数量取决于具体的型号)。
Atlas A3 训练系列产品/Atlas A3 推理系列产品:最大可用aicpu数量为5。
Atlas A2 训练系列产品/Atlas A2 推理系列产品:最大可用aicpu数量为5。
launch_early_mode默认值说明:
Ascend 950PR/Ascend 950DT:2
Atlas A3 训练系列产品/Atlas A3 推理系列产品:0
Atlas A2 训练系列产品/Atlas A2 推理系列产品:0
pypto.Tensor[…]说明:
kernel函数里申明推荐使用
pypto.Tensor[[shape], dtype]方括号语法,符合Python类型注解规范也兼容旧的小括号语法
pypto.Tensor([shape], dtype)方括号内不支持
key=value形式的关键字参数(Python语法限制),只能按位置传递或使用字典pypto.Tensor[](空参数)不支持
调用示例#
示例1: 基础使用#
@pypto.frontend.jit
def add_kernel(
a: pypto.Tensor([3], pypto.DT_FP32),
b: pypto.Tensor([3], pypto.DT_FP32, format=pypto.TileOpFormat.TILEOP_NZ),
out: pypto.Tensor([3], pypto.DT_FP32)
):
pypto.set_vec_tile_shapes(2, 8)
out[:] = pypto.add(a, b)
# 直接传入torch张量调用
x = torch.randn(3, dtype=torch.float32, device='npu:0')
y = torch.randn(3, dtype=torch.float32, device='npu:0')
result = add_kernel(x, y)
示例2: 指定运行模式#
# NPU模式
@pypto.frontend.jit(runtime_options={"run_mode": pypto.RunMode.NPU})
def kernel_npu(x: pypto.Tensor):
...
# Cost Model模式
@pypto.frontend.jit(runtime_options={"run_mode": pypto.RunMode.SIM})
def kernel_sim(x: pypto.Tensor):
...