transpose.h

处理转置的函数。

函数

void nvte_cast_transpose(const NVTETensor input, NVTETensor output, cudaStream_t stream)

转换并转置输入。

此函数转换输入并产生 2 个结果

  • output 中的行优先数据是转换的结果

  • output 中的列优先数据是转换结果的转置。

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • output[inout] 转换和转置的结果。行优先数据的形状:[N, H]。列优先数据的形状:[H, N]

  • stream[in] 用于操作的 CUDA 流。

void nvte_transpose(const NVTETensor input, NVTETensor transposed_output, cudaStream_t stream)

转置输入。

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • transposed_output[out] 转置的结果。形状:[H, N]。

  • stream[in] 用于操作的 CUDA 流。

void nvte_cast_transpose_dbias(const NVTETensor input, NVTETensor output, NVTETensor dbias, NVTETensor workspace, cudaStream_t stream)

转换并转置输入。此外,沿第一维度缩减输入。

此函数转换输入并产生 2 个结果

  • output 是转换(行优先数据)和转置转换(列优先数据)的结果

  • dbias 是输入沿第一维度缩减的结果。

使用空张量作为 workspace 调用此函数不会执行操作,而是将 workspace 张量的形状和类型设置为所需的值。

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • output[inout] 转换和转置的结果。行优先数据的形状:[N, H]。列优先数据的形状:[H, N]

  • dbias[out] 输入沿第一维度缩减的结果。形状:[H]。

  • workspace[out] 工作区张量。

  • stream[in] 用于操作的 CUDA 流。

void nvte_fp8_transpose_dbias(const NVTETensor input, NVTETensor transposed_output, NVTETensor dbias, NVTETensor workspace, cudaStream_t stream)

转置 FP8 输入。此外,沿第一维度缩减输入。

此函数接受 FP8 输入并产生 2 个结果

  • transposed_output 是输入的转置结果。

  • dbias 是输入沿第一维度缩减的结果。

使用空张量作为 workspace 调用此函数不会执行操作,而是将 workspace 张量的形状和类型设置为所需的值。

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • transposed_output[inout] 转置的结果。形状:[H, N]。

  • dbias[out] 输入沿第一维度缩减的结果。形状:[H]。

  • workspace[out] 工作区张量。

  • stream[in] 用于操作的 CUDA 流。

void nvte_multi_cast_transpose(size_t num_tensors, const NVTETensor *input_list, NVTETensor *output_list, cudaStream_t stream)

转换并转置多个张量。

参数:
  • num_tensors[in] 张量的数量。

  • input_list[in] 2D 输入张量列表。

  • output_list[inout] 转换后的张量列表。它们的行优先数据成员的维度与 input_list 中的张量匹配。它们的列优先数据成员的维度是转置的。

  • stream[in] 用于操作的 CUDA 流。

void nvte_cast_transpose_dbias_dgelu(const NVTETensor input, const NVTETensor act_input, NVTETensor output, NVTETensor dbias, NVTETensor workspace, cudaStream_t stream)

计算输入上 GeLU 操作的反向传播,然后进行转换和转置。此外,沿第一维度缩减 GeLU 反向传播的结果。

此函数产生 2 个结果

  • output 的行优先数据等于 cast(dact(input))

  • output 的列优先数据等于 transpose(cast(dact(input)))

  • dbias 等于 reduce(dact(input), axis=0)

使用空张量作为 workspace 调用此函数不会执行操作,而是将 workspace 张量的形状和类型设置为所需的值。

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • act_input[in] 用作前向激活操作输入的张量。形状 [N, H]。

  • output[inout] 转换的结果。行优先数据的形状:[N, H]。列优先数据的形状:[H, N]。

  • dbias[out] dact(input) 沿第一维度缩减的结果。形状:[H]。

  • workspace[out] 工作区张量。

  • stream[in] 用于操作的 CUDA 流。

void nvte_cast_transpose_dbias_dsilu(const NVTETensor input, const NVTETensor act_input, NVTETensor output, NVTETensor dbias, NVTETensor workspace, cudaStream_t stream)

计算输入上 SiLU 操作的反向传播,然后进行转换和转置。此外,沿第一维度缩减 SiLU 反向传播的结果。

此函数产生 2 个结果

  • output 的行优先数据等于 cast(dact(input))

  • output 的列优先数据等于 transpose(cast(dact(input)))

  • dbias 等于 reduce(dact(input), axis=0)

使用空张量作为 workspace 调用此函数不会执行操作,而是将 workspace 张量的形状和类型设置为所需的值。

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • act_input[in] 用作前向激活操作输入的张量。形状 [N, H]。

  • output[inout] 转换的结果。行优先数据的形状:[N, H]。列优先数据的形状:[H, N]。

  • dbias[out] dact(input) 沿第一维度缩减的结果。形状:[H]。

  • workspace[out] 工作区张量。

  • stream[in] 用于操作的 CUDA 流。

void nvte_cast_transpose_dbias_drelu(const NVTETensor input, const NVTETensor act_input, NVTETensor output, NVTETensor dbias, NVTETensor workspace, cudaStream_t stream)

计算输入上 ReLU 操作的反向传播,然后进行转换和转置。此外,沿第一维度缩减 ReLU 反向传播的结果。

此函数产生 2 个结果

  • output 的行优先数据等于 cast(dact(input))

  • output 的列优先数据等于 transpose(cast(dact(input)))

  • dbias 等于 reduce(dact(input), axis=0)

使用空张量作为 workspace 调用此函数不会执行操作,而是将 workspace 张量的形状和类型设置为所需的值。

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • act_input[in] 用作前向激活操作输入的张量。形状 [N, H]。

  • output[inout] 转换的结果。行优先数据的形状:[N, H]。列优先数据的形状:[H, N]。

  • dbias[out] dact(input) 沿第一维度缩减的结果。形状:[H]。

  • workspace[out] 工作区张量。

  • stream[in] 用于操作的 CUDA 流。

void nvte_cast_transpose_dbias_dqgelu(const NVTETensor input, const NVTETensor act_input, NVTETensor output, NVTETensor dbias, NVTETensor workspace, cudaStream_t stream)

计算输入上 Quick GeLU 操作的反向传播,然后进行转换和转置。此外,沿第一维度缩减 Quick GeLU 反向传播的结果。

此函数产生 2 个结果

  • output 的行优先数据等于 cast(dact(input))

  • output 的列优先数据等于 transpose(cast(dact(input)))

  • dbias 等于 reduce(dact(input), axis=0)

使用空张量作为 workspace 调用此函数不会执行操作,而是将 workspace 张量的形状和类型设置为所需的值。

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • act_input[in] 用作前向激活操作输入的张量。形状 [N, H]。

  • output[inout] 转换的结果。行优先数据的形状:[N, H]。列优先数据的形状:[H, N]。

  • dbias[out] dact(input) 沿第一维度缩减的结果。形状:[H]。

  • workspace[out] 工作区张量。

  • stream[in] 用于操作的 CUDA 流。

void nvte_cast_transpose_dbias_dsrelu(const NVTETensor input, const NVTETensor act_input, NVTETensor output, NVTETensor dbias, NVTETensor workspace, cudaStream_t stream)

计算输入上 Squared ReLU 操作的反向传播,然后进行转换和转置。此外,沿第一维度缩减 Squared ReLU 反向传播的结果。

此函数产生 2 个结果

  • output 的行优先数据等于 cast(dact(input))

  • output 的列优先数据等于 transpose(cast(dact(input)))

  • dbias 等于 reduce(dact(input), axis=0)

使用空张量作为 workspace 调用此函数不会执行操作,而是将 workspace 张量的形状和类型设置为所需的值。

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • act_input[in] 用作前向激活操作输入的张量。形状 [N, H]。

  • output[inout] 转换的结果。行优先数据的形状:[N, H]。列优先数据的形状:[H, N]。

  • dbias[out] dact(input) 沿第一维度缩减的结果。形状:[H]。

  • workspace[out] 工作区张量。

  • stream[in] 用于操作的 CUDA 流。

void nvte_dgeglu_cast_transpose(const NVTETensor input, const NVTETensor act_input, NVTETensor output, cudaStream_t stream)

计算输入的门控 GeLU 激活,此外还转换和转置输出。

此函数产生 2 个结果

  • output 的行优先数据等于 cast(dact(input))

  • output 的列优先数据等于 transpose(cast(dact(input)))

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • gated_act_input[in] 用作门控激活操作前向传播输入的张量。形状 [N, H * 2]。

  • output[inout] 转换的结果。行优先数据的形状:[N, H * 2]。列优先数据的形状:[H * 2, N]。

  • stream[in] 用于操作的 CUDA 流。

void nvte_dswiglu_cast_transpose(const NVTETensor input, const NVTETensor act_input, NVTETensor output, cudaStream_t stream)

计算输入的门控 Swish 激活,并额外执行类型转换和转置输出。

此函数产生 2 个结果

  • output 的行优先数据等于 cast(dact(input))

  • output 的列优先数据等于 transpose(cast(dact(input)))

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • gated_act_input[in] 用作门控激活操作前向传播输入的张量。形状 [N, H * 2]。

  • output[inout] 转换的结果。行优先数据的形状:[N, H * 2]。列优先数据的形状:[H * 2, N]。

  • stream[in] 用于操作的 CUDA 流。

void nvte_dreglu_cast_transpose(const NVTETensor input, const NVTETensor act_input, NVTETensor output, cudaStream_t stream)

计算输入的门控 ReLU 激活,并额外执行类型转换和转置输出。

此函数产生 2 个结果

  • output 的行优先数据等于 cast(dact(input))

  • output 的列优先数据等于 transpose(cast(dact(input)))

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • gated_act_input[in] 用作门控激活操作前向传播输入的张量。形状 [N, H * 2]。

  • output[inout] 转换的结果。行优先数据的形状:[N, H * 2]。列优先数据的形状:[H * 2, N]。

  • stream[in] 用于操作的 CUDA 流。

void nvte_dqgeglu_cast_transpose(const NVTETensor input, const NVTETensor act_input, NVTETensor output, cudaStream_t stream)

计算输入的门控 Quick GeLU 激活,并额外执行类型转换和转置输出。

此函数产生 2 个结果

  • output 的行优先数据等于 cast(dact(input))

  • output 的列优先数据等于 transpose(cast(dact(input)))

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • gated_act_input[in] 用作门控激活操作前向传播输入的张量。形状 [N, H * 2]。

  • output[inout] 转换的结果。行优先数据的形状:[N, H * 2]。列优先数据的形状:[H * 2, N]。

  • stream[in] 用于操作的 CUDA 流。

void nvte_dsreglu_cast_transpose(const NVTETensor input, const NVTETensor act_input, NVTETensor output, cudaStream_t stream)

计算输入的门控平方 ReLU 激活,并额外执行类型转换和转置输出。

此函数产生 2 个结果

  • output 的行优先数据等于 cast(dact(input))

  • output 的列优先数据等于 transpose(cast(dact(input)))

参数:
  • input[in] 形状为 [N, H] 的输入张量。

  • gated_act_input[in] 用作门控激活操作前向传播输入的张量。形状 [N, H * 2]。

  • output[inout] 转换的结果。行优先数据的形状:[N, H * 2]。列优先数据的形状:[H * 2, N]。

  • stream[in] 用于操作的 CUDA 流。