与真实 NPU 环境的完整执行流程)
CANN PyPTO 样例运行指南从 Hello World 出发掌握仿真SIM与真实 NPU 环境的完整执行流程【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pyptoPyPTOParallel Tensor/Tile Operation是 CANN 采用 PTO 编程范式的 AI 编程框架开发者可以通过基于 Tensor 的运算描述快速完成算子开发。本文以examples/00_hello_world的张量加法样例为主线系统讲解 PyPTO 样例在无 NPU 硬件的仿真环境SIM与有真实硬件环境NPU下的运行方式、核心代码结构、运行结果查看方法并深入到runtime_options、RunMode、set_vec_tile_shapes等框架内部实现帮助读者真正理解一次 PyPTO 样例从编写、编译到落地的完整链路。前置准备环境配置与软件安装在运行任何样例之前需要先完成 CANN 环境变量配置。安装完成 CANN ascend-toolkit 后执行如下命令使能环境配置仅在当前 shell 窗口生效如需长期使用可将该命令写入~/.bashrc等环境变量配置文件# 默认路径安装以 root 用户为例非 root 用户将 /usr/local 替换为 ${HOME} source /usr/local/Ascend/ascend-toolkit/set_env.sh若尚未完成基础环境搭建与 PyPTO 软件安装请分别参考仓库中的 环境准备 与 软件安装 文档其中说明了依赖项、编译方式与安装步骤。两种运行模式仿真环境与真实 NPU 环境PyPTO 样例统一通过--run_mode命令行参数指定运行方式支持npu与sim两种取值。从框架源码可以确认运行模式在底层对应一个整型枚举在 python/pypto/runtime.py 中定义class RunMode(IntEnum): NPU 0; SIM 1前端解析器 python/pypto/frontend/parser/entry.py 中同样定义了同名的RunMode二者语义一致NPU对应真实硬件执行SIM对应仿真CPU执行。因此运行模式的选择本质上是向 JIT 编译器传入RunMode.NPU或RunMode.SIM作为runtime_options中的run_mode键值。仿真环境运行无 NPU 真实硬件在纯 CPU 机器上即可完成编译流程验证与功能仿真source /usr/local/Ascend/ascend-toolkit/set_env.sh cd examples/00_hello_world python3 hello_world.py --run_modesim真实可运行环境运行有 NPU 真实硬件在具备 Ascend NPU 的机器上除配置 CANN 环境外还需要通过环境变量TILE_FWK_DEVICE_ID指定使用的 NPU 设备号source /usr/local/Ascend/ascend-toolkit/set_env.sh export TILE_FWK_DEVICE_ID0 cd examples/00_hello_world python3 hello_world.py --run_modenpu从 examples/00_hello_world/hello_world.py 的device_init函数可以看到设备初始化的完整逻辑sim模式下运行设备固定为cpu无需依赖torch_npunpu模式下先尝试import torch_npu若未安装会打印提示并退出随后读取os.environ.get(TILE_FWK_DEVICE_ID, 0)获取设备 ID缺省为 0调用torch.npu.set_device(device_id)完成设备绑定返回fnpu:{device_id}作为后续张量创建的设备标识。这一实现也解释了为何 NPU 模式必须先安装torch_npu且可以通过TILE_FWK_DEVICE_ID在多卡环境下切换目标设备。快速开始一个完整的张量加法内核原文档给出了一个可以直接复制运行的 PyPTO 最小示例。该示例通过--run_mode参数在仿真与真实环境之间切换其核心代码如下import pypto import torch import argparse shape (1, 4, 1, 64) # 根据运行模式创建计算内核 def create_add_kernel(run_mode: str): mode pypto.RunMode.NPU if run_mode npu else pypto.RunMode.SIM pypto.frontend.jit(runtime_options{run_mode: mode}) def add_kernel( x: pypto.Tensor([...], pypto.DT_FP32), y: pypto.Tensor([...], pypto.DT_FP32), out: pypto.Tensor([...], pypto.DT_FP32), ): pypto.set_vec_tile_shapes(1, 4, 1, 64) out[:] x y return add_kernel if __name__ __main__: parser argparse.ArgumentParser() parser.add_argument(--run_mode, typestr, defaultnpu, choices[npu, sim]) args parser.parse_args() # 准备输入数据 device cpu if args.run_mode npu: import torch_npu torch.npu.set_device(0) device npu:0 x torch.rand(shape, dtypetorch.float32, devicedevice) y torch.rand(shape, dtypetorch.float32, devicedevice) output torch.empty(shape, dtypetorch.float32, devicedevice) # 执行计算并查看结果 create_add_kernel(args.run_mode)(x, y, output) print(fOutput shape: {output.shape})代码要点解读内核定义pypto.frontend.jit(runtime_options{run_mode: mode})是 PyPTO 的 JIT 编译入口runtime_options中的run_mode决定编译器按 NPU 还是 SIM 目标生成与执行pypto.Tensor([...], pypto.DT_FP32)声明输入输出张量的形状...表示自动推断与数据类型FP32。Tiling 配置pypto.set_vec_tile_shapes(1, 4, 1, 64)设置向量计算的 TileShape。从 python/pypto/_controller.py 的源码可见该接口把每一维的分块尺寸写入当前作用域pypto_impl.SetScope({vec_tile_shapes: ...})其维数必须与参与运算的 Tensor 维度rank一致否则后续 vector 运算无法正确展开。结果写回PyPTO 内核不支持返回值out[:] x y是写入输出张量的语法糖仓库中的 examples/00_hello_world/hello_world.py 注释还给出了等价写法pypto.assemble(x y, [0, 0], out)。完整样例的增强版本仓库中 examples/00_hello_world/hello_world.py 是上述代码的完整可运行版本额外包含两点值得借鉴的工程实践结果自动校验内核执行后调用torch.testing.assert_close(x y, out, atol1e-3, rtol1e-3)将 PyPTO 内核输出与 PyTorch 的x y逐元素比对验证计算正确性并打印✓ Test add_kernel completed successfully。命令行参数形态除了--run_mode还支持短选项-m且choices[npu, sim]约束非法取值-m sim与--run_mode sim等价。结果查看计算图、泳道图与输出产物该基础样例运行成功后会在${work_path}/output/目录下生成编译与运行产物其中最重要的两类可视化产物是计算图PyPTO 程序从抽象计算描述到硬件执行的完整编译流程产物。编译会依次生成 Tensor Graph仅表达高层计算逻辑、Tile Graph按 TileShape 展开并推导内存层级、Block Graph切分为可在单个 AI Core 上调度的子图与 Execute Graph最终调度执行产物相关术语定义详见仓库的术语表。泳道图直观展示计算图的实际调度与执行过程开发者可以观察数据流动路径、操作间依赖关系以及潜在性能瓶颈从而定位性能问题。计算图和泳道图可通过 PyPTO 配套的 ToolKit 插件在 VS Code 中查看并与源码建立关联。具体使用方法请参考 快速入门-查看计算图 与 快速入门-查看泳道图。针对不同的运行目的结果查看方式有所区别真实环境或精度仿真直接查看输出张量的数值即可验证结果如上面代码中的print(fOutput shape: {output.shape})与assert_close校验性能仿真通过output/目录下的泳道图观察仿真结果分析调度与性能瓶颈。深入原理run_mode 如何驱动编译与执行在pypto.frontend.jit装饰器内部runtime_options中的run_mode会贯穿整个编译管线。从 python/pypto/frontend/parser/entry.py 的实现可以观察到解析阶段会校验run_mode的合法性必须是RunMode.NPU、RunMode.SIM或其整型值 0、1否则抛出Invalid run mode的FeError非法模式对应的错误提示为Invalid run mode, run mode must be RunMode.NPU or RunMode.SIM.内部会依据该值将runtime_options归一化为{run_mode: pypto.RunMode.NPU.value}或{run_mode: pypto.RunMode.SIM.value}供后续图编译、代码生成与运行时调度使用。这一机制保证了同一份内核代码两种执行后端SIM模式在 CPU 上执行仿真适合无硬件场景下的功能验证与精度对齐NPU模式则生成面向 Ascend 硬件的产物并完成真实计算。更多示例与进阶学习路径examples/目录按学习路径由浅入深组织了四级样例examples/README.md 对此有完整说明00_hello_world入门简单的张量加法本文已完整讲解01_beginner初级基础操作与核心概念覆盖basic_ops.py基础算子、elementwise_ops.py逐元素算子、matmul_ops.py矩阵乘、reduce_ops.py归约、tiling_config.pyTiling 配置等02_intermediate中级神经网络组件与算子组合如ffn_module.pyFFN 模块、layer_norm.pyLayerNorm、softmax.py、activation.py、控制流condition / loop / dynamic等03_advanced高级复杂架构与系统级优化如attention.pyAttention、aclgraph.pyACL Graph、cost_model.py代价模型、多函数 JIT 模式等。大多数样例脚本的用法与 hello_world 一致且支持更细粒度的控制例如# 运行所有初级基础操作样例默认为 NPU 模式运行 python3 examples/01_beginner/basic/basic_ops.py # 运行特定的样例 python3 examples/01_beginner/basic/basic_ops.py matmul::test_matmul # 列出脚本中所有可用的样例 python3 examples/01_beginner/basic/basic_ops.py --list # 指定以仿真CPU模式运行 python3 examples/01_beginner/basic/basic_ops.py --run_mode sim每个样例目录下均配有README.md含中英文版本说明其运行方法与学习要点可作为进阶参考。完整 hello_world 样例请直接查看 hello_world.py。常见问题与注意事项torch_npu未安装npu模式会强制导入torch_npu未安装时脚本会打印提示并退出sys.exit(1)请先安装对应版本的torch_npu后再运行设备号冲突多卡场景请通过export TILE_FWK_DEVICE_IDn指定目标设备缺省为 0TileShape 与张量维度不匹配set_vec_tile_shapes传入的维数必须与参与 vector 运算的张量 rank 一致否则会导致编译错误示例中 shape 为(1, 4, 1, 64)时对应调用pypto.set_vec_tile_shapes(1, 4, 1, 64)而 hello_world 中 shape 为(64, 64)时则调用pypto.set_vec_tile_shapes(32, 32)环境变量仅当前窗口生效source set_env.sh与export TILE_FWK_DEVICE_ID仅在当前 shell 有效建议写入~/.bashrc等配置文件以便长期使用结果一致性校验功能验证阶段建议保留torch.testing.assert_close这类精度断言如 atol/rtol 取 1e-3以自动捕获数值异常性能分析则应重点查看output/下的泳道图。【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考