---
title: 算子使用指导（ATB Python API）
description: "- 完整可执行示例请参见  组图示例"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/ascendtb/ascendtb_0077.html
sourcePath: /source/zh/canncommercial/900/API/ascendtb/ascendtb_0077.html
indexId: e68054bdeaaefc5f306fe67631b0ab31cbfc499ceb67cd93f69c9ad8a910a97961
---
# 算子使用指导（ATB Python API）

- 完整可执行示例请参见  组图示例
。
- 运行前需要安装torch_atb插件，安装方法如下：

```
./Ascend-cann-nnal_${
version_info
}_linux-aarch64.run --install --torch_atb
```


1. 导入ATB Python API模块。
  在代码中，通过以下方式导入ATB Python API模块：

```
import torch
import torch_atb
```


2. 创建算子对象实例。

  - 单算子

    a. 创建参数对象。
      根据需要创建的算子，实例化参数结构体，参数接口的定义参考OpParam，下面以linear为例。

```
linear_param = torch_atb.LinearParam()
linear_param.has_bias = False
```


    b. 创建算子对象。

```
op = torch_atb.Operation(linear_param)
```


  - 图算子
根据设计的图算子结构，通过tensorName设置各个组合OP的tensor之间的对应关系创建图算子。
用图构造器构图：

    - 构图方式一：
      1 2 3 4 5 6 7 8 9 10 11 12 13 14 builder = torch_atb.Builder("Graph") x = builder.add_input("x") y = builder.add_input("y") elewise_add = torch_atb.ElewiseParam() elewise_add.elewise_type = torch_atb.ElewiseParam.ElewiseType.ELEWISE_ADD layer1 = builder.add_node([x, y], elewise_add) add_out = layer1.get_output(0) z = builder.add_input("z") builder.reshape(add_out, lambda shape: [1, shape[0] * shape[1]], "add_out_") elewise_mul = torch_atb.ElewiseParam() elewise_mul.elewise_type = torch_atb.ElewiseParam.ElewiseType.ELEWISE_MUL layer2 = builder.add_node(["add_out_", z], elewise_mul) builder.mark_output(layer2.get_output(0)) Graph = builder.build()

    - 构图方式二：

```
graph = torch_atb.GraphBuilder("Graph") \ # 设置图算子的名称
.set_input_output(["x", "y", "z"], ["out"]) \ # 指定图的输入输出tensorName
.add_operation(elewise_add, ["x", "y"], ["add_out"]) \ # 添加图中需要的单算子，及使用的tensor
.reshape("add_out", lambda shape: [1, shape[0] * shape[1]], "add_out_") \ # 在需要更新输出tensor的shape时，使用lambda表达式动态更新
.add_operation(elewise_mul, ["add_out_", "z"], ["out"]) \
.build() # 结束构图、创建图算子
```


3. 准备输入数据。
  准备输入tensor，确保设备（npu、cpu）、数据类型符合预期。

```
x = torch.randn(2, 3, dtype=torch.float16).npu()
y = torch.randn(2, 3, dtype=torch.float16).npu()
```


4. 执行操作。
  使用forward方法完成操作，并获取输出：

```
outputs = op.forward([x, y])  # 如果使用图算子，则outputs = graph.forward([x, y, z])
torch.npu.synchronize()
```
