ttnn.subtract_

ttnn.subtract_(input_tensor_a: ttnn.Tensor, input_tensor_b: ttnn.Tensor or Number, *, activations: List[str] = None, input_tensor_a_activations: List[str] = None, input_tensor_b_activations: List[str] = None, use_legacy: bool = None, sub_core_grids: CoreRangeSet = None) None

Subtracts input_tensor_b from input_tensor_a and returns the tensor with the same layout as input_tensor_a in-place

\[\mathrm{{input\_tensor\_a}}_i - \mathrm{{input\_tensor\_b}}_i\]
Parameters:
  • input_tensor_a (ttnn.Tensor) – the input tensor.

  • input_tensor_b (ttnn.Tensor or Number) – the input tensor.

Keyword Arguments:
  • activations (List[str], optional) – list of activation functions to apply to the output tensor. Defaults to None.

  • input_tensor_a_activations (List[str], optional) – list of activation functions to apply to input_a. Defaults to None.

  • input_tensor_b_activations (List[str], optional) – list of activation functions to apply to input_b. Defaults to None.

  • use_legacy (bool, optional) – use legacy implementation. Defaults to None.

  • sub_core_grids (CoreRangeSet, optional) – sub core grids. Defaults to None.

Binary elementwise operations, C=op(A,B), support input tensors A and B in row major and tile layout, in interleaved or sharded format (height, width or block sharded), in DRAM or L1. A and B are completely independent, and can have different tensor specs.

Broadcast of A and B operands is supported up to dimension 5 (DNCHW). Any dimensions of size 1 in either A or B will be expanded to match the other input, and data will be duplicated along that dimension. For example, if the shape of A is [2,1,1,32] and B is [1,16,8,1], the output shape will be [2,16,8,32]. The size of dimensions higher than 5 must match between A and B.

The output C also supports row major and tile layout, interleaved or sharded format (height, width or block sharded), in DRAM or L1. The tensor spec of C is independent of A and B, and can be explicitly set using the optional output tensor input; if not provided, the operation will attempt a best decision at an appropriate tensor spec. The dimensions of C, or equivalently the optional output tensor, must match the broadcast-matched size of A and B.

Performance considerations: Elementwise operations operate natively in tile format, tiled tensors are preferred as an input, and row-major tensors are tilized and untilized during the operation. L1 sharded layout is preferred, with no broadcast and matching tensor specs for A, B and C.

Note

Supported dtypes and layouts:

Dtypes

Layouts

BFLOAT16, BFLOAT8_B, FLOAT32, INT32, UINT16 (range: 0 - 65535), UINT32 (range: 0 - 4294967295)

TILE, ROW_MAJOR

If the input tensor is ROW_MAJOR layout, it will be internally converted to TILE layout.

Example

# Create two tensors for inplace subtraction
tensor1 = ttnn.from_torch(
    torch.tensor([[2, 2], [2, 2]], dtype=torch.bfloat16), layout=ttnn.TILE_LAYOUT, device=device
)
tensor2 = ttnn.from_torch(
    torch.tensor([[1, 1], [1, 1]], dtype=torch.bfloat16), layout=ttnn.TILE_LAYOUT, device=device
)

# Perform inplace operation
ttnn.subtract_(tensor1, tensor2)
logger.info("Inplace subtraction completed")