快速入门:基于 ops-multimodal-fusion 仓

使用须知

本指南旨在帮助您快速上手 CANN 和 ops-multimodal-fusion 算子仓的使用。为方便快速了解算子开发全流程,将以 abs 算子为实践对象,其源文件位于 ops-multimodal-fusion/applications/llm/abs,具体操作流程如下:

  1. 环境部署:完成软件包安装和源码下载,此处不再赘述。快速入门场景下,推荐 CANNLab 或 Docker 环境,安装操作简单。

    说明:当前 CANNLab 或 Docker 环境默认最新商发版 CANN 包;如需体验 master 分支最新能力,可手动安装 CANN 包,注意软件与源码版本配套。

  2. 编译运行:编译自定义算子包并安装,实现快速调用算子。

  3. 算子调用:体验算子的调用方式。

  4. 算子调试:掌握算子打印和性能采集方法。

一、编译运行

本阶段目的是快速体验项目标准流程,验证环境能否成功进行算子源码编译、打包、安装和运行。

1. 编译 abs 算子

环境准备好后(注意软件与源码版本配套),进入环境并访问项目源码根目录,编译算子。

通用编译命令格式:bash build.sh --soc=<芯片版本>。以 abs 算子为例,编译命令如下:

bash build.sh --soc=${soc_version}

${soc_version} 设置方法如下:

访问 CANN下载中心,根据页面提示复制硬件查询命令,在当前环境中执行,返回芯片 ID 信息,再回填到官网按 Enter 键获取产品名,产品名对应的 ${soc_version} 取值如下,请按实际场景传参。

  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:取值为 ascend910b
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:取值为 ascend910_93
  • 950 系列产品:取值为 ascend950

芯片版本

若提示如下信息,说明编译成功。

Build wheel success: dist/ops_multimodal_fusion-1.0.0-cp38-abi3-*.whl

编译成功后,wheel 包存放于项目根目录的 dist/ 目录下。

2. 安装 ops-multimodal-fusion 包

pip install dist/ops_multimodal_fusion-1.0.0-cp38-abi3-*.whl --force-reinstall --no-deps

3. 快速验证:运行算子样例

通用的运行命令格式:pytest tests/${op_name}/ -v

以 abs 算子为例,其提供了简单算子样例 tests/abs/test_abs.py,运行该样例验证算子功能是否正常。

pytest tests/abs/ -v

预期输出:打印算子 abs 的测试结果,表明算子已成功部署并正确执行。

tests/abs/test_abs.py::TestAbs::test_abs_interface PASSED
tests/abs/test_abs.py::TestAbs::test_abs_accuracy[...] PASSED
...

提示:若已完成编译且仅需重新验证功能,可直接运行已编译的 pytest 测试,无需再次编译。

二、算子调用

调用方式

所有算子通过 PyTorch 扩展机制注册,调用方式统一:

import torch
import torch_npu
import ops_multimodal_fusion

x = torch.randn(32, 64).npu()
result = torch.ops.ops_multimodal_fusion.abs(x)

abs 算子示例

import torch
import torch_npu
import ops_multimodal_fusion

# 创建输入张量并移至 NPU
x = torch.randn(32, 64, dtype=torch.float32).npu()

# 调用 abs 算子
result = torch.ops.ops_multimodal_fusion.abs(x)

# 输出仍在 NPU 上
print(result.shape)   # torch.Size([32, 64])
print(result.dtype)   # torch.float32
print(result.device)  # npu

三、算子调试

本阶段以 abs 算子为例,介绍算子调试和性能采集方法,以便后续问题分析定位。

1. 打印调试

算子如果出现执行失败、精度异常等问题,可在测试中添加打印进行问题分析和定位。

tests/abs/test_abs.py 中添加打印:

def test_abs_debug():
    x = torch.randn(32, 64).npu()
    print(f"Input shape: {x.shape}, dtype: {x.dtype}")
    
    result = torch.ops.ops_multimodal_fusion.abs(x)
    print(f"Output shape: {result.shape}, dtype: {result.dtype}")
    
    # 打印部分结果
    print(f"Output (first 10): {result.cpu()[:10]}")

2. 性能采集

当算子功能验证正确后,可通过 msprof 工具采集算子性能数据。

  • 运行 pytest 测试

    pytest tests/abs/ -v
    
  • 采集性能数据

    msprof --output=./prof_out pytest tests/abs/test_abs.py
    

采集结果在项目目录下,msprof 命令执行完后会自动解析并导出性能数据结果文件,详细内容请参见 msprof

四、更多帮助