基础操作样例 (Basic Operations)
本样例展示了 PyPTO 的基础算子操作和典型的编程模式,非常适合初学者快速上手。
总览介绍
本样例涵盖了 PyPTO 编程中的核心概念,包括:
- 张量的创建与属性访问。
- 基础的逐元素算术运算(加法、标量乘法等)。
- 矩阵乘法(Matmul)操作。
- 归约运算(如 Sum)。
- Tiling(分块)配置(Vec / Cube Tile Shapes)。
- 变换操作(View + Assemble)。
样例代码特性
本样例突出了 PyPTO 的以下特性:
- JIT 编译: 使用
@pypto.frontend.jit装饰器定义可以在 NPU 上执行的内核函数。 - PyTorch 集成: 能够直接接受 PyTorch NPU 张量作为输入输出,无缝衔接现有深度学习工作流。
- 显式 Tiling 控制: 通过
set_vec_tile_shapes和set_cube_tile_shapes手动优化硬件执行效率。 - 符号化张量: 即使在内核函数之外,也可以定义张量的形状和类型。
代码结构
basic_ops.py: 包含所有示例的主脚本,作为快速上手的总览入口。test_tensor_creation(): 示例 1 - 张量创建。test_elementwise_ops(): 示例 2 - 逐元素运算(加法、标量乘法)。test_matmul(): 示例 3 - 矩阵乘法。test_reduce_ops(): 示例 4 - 归约运算(Sum)。test_tiling_config(): 示例 5 - Tiling 配置。test_transform_ops(): 示例 6 - 变换操作(View + Assemble)。
tensor_creation.py: 张量创建操作示例,包含 Arange、Full、数据类型等创建方法。symbolic_scalar.py: 符号标量(Symbolic Scalar)的使用示例。
更详细的各类算子用法,请参考同级目录:
../compute/: 逐元素算子、矩阵乘法、归约算子。../tiling/: Tiling 配置策略。../transform/: 变换算子。
运行方法
环境准备
# 配置 CANN 环境变量
# 安装完成后请配置环境变量,请用户根据set_env.sh的实际路径执行如下命令。
# 上述环境变量配置只在当前窗口生效,用户可以按需将以上命令写入环境变量配置文件(如.bashrc文件)。
# 默认路径安装,以root用户为例(非root用户,将/usr/local替换为${HOME})
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 设置设备 ID
export TILE_FWK_DEVICE_ID=0
执行脚本
# 运行所有示例
python3 basic_ops.py
# 运行特定示例(例如示例 2:逐元素运算)
python3 basic_ops.py elementwise_ops::test_elementwise_ops
# 查看所有可用示例列表
python3 basic_ops.py --list
关键代码段解析
1. JIT 函数定义与 Tiling 配置
@pypto.frontend.jit()
def elementwise_kernel(
a: pypto.Tensor(shape, pypto.DT_FP16),
b: pypto.Tensor(shape, pypto.DT_FP16),
out: pypto.Tensor(shape, pypto.DT_FP16)
):
# 设置向量计算的分块形状
pypto.set_vec_tile_shapes(8, 8)
# 算子组合
out[:] = pypto.mul(pypto.add(a, b), 2.0)
2. 执行JIT函数
# 执行 JIT 函数
result = elementwise_kernel(a, b)
注意事项
- 数据类型: 昇腾 NPU 对 FP16 和 BF16 有原生硬件加速,建议在算子开发中优先考虑这些类型。
- 分块大小: Tiling 形状的选择会显著影响算子性能,通常应根据 NPU 架构的向量/矩阵计算单元大小来设定。
- 环境: 确保
torch_npu已正确安装并能识别到昇腾显卡。