transformer_engine.h
Transformer Engine API 的基类和函数。
类型定义
-
typedef void *NVTETensor
TE 张量类型。
NVTETensor 是一种连续的张量类型,存储指向给定形状和类型数据的指针。它不拥有它指向的内存。
枚举
-
enum NVTEDType
TE 数据类型。
值
-
enumerator kNVTEByte
字节
-
enumerator kNVTEInt32
32 位整数
-
enumerator kNVTEInt64
64 位整数
-
enumerator kNVTEFloat32
32 位浮点数
-
enumerator kNVTEFloat16
16 位浮点数 (E5M10)
-
enumerator kNVTEBFloat16
16 位 bfloat (E8M7)
-
enumerator kNVTEFloat8E4M3
8 位浮点数 (E4M3)
-
enumerator kNVTEFloat8E5M2
8 位浮点数 (E5M2)
-
enumerator kNVTEFloat8E8M0
8 位浮点数 (E8M0)
-
enumerator kNVTENumTypes
支持的类型数量
-
enumerator kNVTEByte
-
enum NVTETensorParam
指示要设置/获取的张量参数的类型。
值
-
enumerator kNVTERowwiseData
可以按行方式使用的数据
-
enumerator kNVTEColumnwiseData
可以按列方式使用的数据
-
enumerator kNVTEScale
缩放张量
-
enumerator kNVTEAmax
Amax 张量
-
enumerator kNVTERowwiseScaleInv
用于解码行式数据的逆缩放张量
-
enumerator kNVTEColumnwiseScaleInv
用于解码列式数据的逆缩放张量
-
enumerator kNVTENumTensorParams
-
enumerator kNVTERowwiseData
函数
-
NVTETensor nvte_create_tensor(NVTEScalingMode scaling_mode)
创建一个新的 TE 张量。
创建一个新的 TE 张量。在使用之前,需要设置其参数。TE 张量只是原始数据的包装器,不拥有内存。
- 参数:
scaling_mode – [in] 张量的缩放模式。
- 返回值:
一个新的 TE 张量。
-
void nvte_destroy_tensor(NVTETensor tensor)
销毁一个 TE 张量。
由于 TE 张量不拥有内存,因此在此操作期间不会释放底层数据。
- 参数:
tensor – [in] 要销毁的张量。
-
void *nvte_tensor_data(const NVTETensor tensor)
获取指向张量的行式数据的原始指针。
- 参数:
tensor – [in] 张量。
- 返回值:
指向张量的行式数据的原始指针。
-
void *nvte_tensor_columnwise_data(const NVTETensor tensor)
获取指向张量的列式数据的原始指针。
- 参数:
tensor – [in] 张量。
- 返回值:
指向张量的列式数据的原始指针。
-
NVTEShape nvte_tensor_shape(const NVTETensor tensor)
获取张量的数据形状。
- 参数:
tensor – [in] 张量。
- 返回值:
输入张量的形状。
-
NVTEShape nvte_tensor_columnwise_shape(const NVTETensor tensor)
获取张量的数据形状。
- 参数:
tensor – [in] 张量。
- 返回值:
输入张量的形状。
-
size_t nvte_tensor_ndims(const NVTETensor tensor)
获取张量的维度数。
- 参数:
tensor – [in] 张量。
- 返回值:
张量维度数。
-
size_t nvte_tensor_size(const NVTETensor tensor, const size_t dim)
获取特定张量维度的大小。
- 参数:
tensor – [in] 张量。
size_t – [in] 维度索引。
- 返回值:
指定维度上张量的大小。
-
size_t nvte_tensor_numel(const NVTETensor tensor)
获取张量的元素总数。
- 参数:
tensor – [in] 张量。
- 返回值:
张量中的元素数量。
-
size_t nvte_tensor_element_size(const NVTETensor tensor)
获取张量数据类型的字节大小。
- 参数:
tensor – [in] 张量。
- 返回值:
张量数据类型的字节大小。
-
NVTEDType nvte_tensor_type(const NVTETensor tensor)
获取张量的数据类型。
- 参数:
tensor – [in] 张量。
- 返回值:
输入张量的数据类型。
-
float *nvte_tensor_amax(const NVTETensor tensor)
获取指向张量的 amax 数据的指针。
- 参数:
tensor – [in] 张量。
- 返回值:
指向张量的 amax 数据的指针。
-
float *nvte_tensor_scale(const NVTETensor tensor)
获取指向张量的缩放数据的指针。
- 参数:
tensor – [in] 张量。
- 返回值:
指向张量的缩放数据的指针。
-
float *nvte_tensor_scale_inv(const NVTETensor tensor)
获取指向张量的逆缩放数据的指针。
- 参数:
tensor – [in] 张量。
- 返回值:
指向张量的逆缩放数据的指针。
-
NVTEShape nvte_tensor_scale_inv_shape(const NVTETensor tensor)
获取张量的 scale_inv 形状。
- 参数:
tensor – [in] 张量。
- 返回值:
输入张量的 scale_inv 形状。
-
void nvte_zero_tensor(const NVTETensor tensor, cudaStream_t stream)
将张量值重置为零。
- 参数:
tensor – [in] 张量。
- 返回值:
输入张量的 scale_inv 形状。
-
void nvte_set_tensor_param(NVTETensor *tensor, NVTETensorParam param_name, const NVTEBasicTensor *param)
设置张量的参数。
- 参数:
[in/out] – tensor 张量。
param_name – [in] 要设置的参数。
param – [in] 要设置的值。
-
NVTEBasicTensor nvte_get_tensor_param(const NVTETensor tensor, NVTETensorParam param_name)
获取张量参数的值。
- 参数:
tensor – [in] 张量。
param_name – [in] 要设置的参数。
-
NVTEScalingMode nvte_tensor_scaling_mode(const NVTETensor tensor)
获取此张量的缩放粒度。
- 参数:
tensor – [in] 张量。
- 返回值:
包含张量缩放粒度的结构体。
-
void nvte_tensor_pack_create(NVTETensorPack *pack)
在 NVTETensorPack 中创建
tensors
。
-
void nvte_tensor_pack_destroy(NVTETensorPack *pack)
销毁 NVTETensorPack 中的
tensors
。
-
struct NVTEShape
- #include <transformer_engine.h>
张量的形状。
-
struct NVTEBasicTensor
- #include <transformer_engine.h>
用于填充 NVTETensor 参数的基本张量类型。它不拥有它指向的内存。
-
struct NVTETensorPack
- #include <transformer_engine.h>
张量包,通常用于辅助输出。
公共成员
-
NVTETensor tensors[MAX_SIZE]
张量的包装器。它们不持有相关的内存。
-
size_t size = 0
包中张量的实际数量,0 <= size <= MAX_SIZE。
公共静态属性
-
static const int MAX_SIZE = 10
包中张量的最大数量。假定 <= 10。
-
NVTETensor tensors[MAX_SIZE]
-
namespace transformer_engine
包含 Transformer Engine 的 C++ API 的命名空间。
枚举
-
struct TensorWrapper
- #include <transformer_engine.h>
NVTETensor 类的 C++ 包装器。
公共函数
-
inline TensorWrapper(void *dptr, const NVTEShape &shape, const DType dtype, float *amax_dptr = nullptr, float *scale_dptr = nullptr, float *scale_inv_dptr = nullptr, const NVTEShape scale_inv_shape = defaultShape, const NVTEScalingMode scaling_mode = NVTE_DELAYED_TENSOR_SCALING)
构造新的 TensorWrapper。
创建具有给定形状、数据类型和数据的新 TE 张量。TE 张量只是原始数据的包装器,不拥有内存。
- 参数:
dptr – **[输入]** 指向张量数据的指针。
shape – **[输入]** 张量的形状。
dtype – **[输入]** 张量的数据类型。
amax_dptr – **[输入]** 指向 AMAX 值的指针。
scale_dptr – **[输入]** 指向 scale 值的指针。
scale_inv_shape – **[输入]** scale_inv 的形状
scale_inv_dptr – **[输入]** 指向 scale 值的倒数的指针。
-
inline TensorWrapper(void *dptr, const std::vector<size_t> &shape, const DType dtype, float *amax_dptr = nullptr, float *scale_dptr = nullptr, float *scale_inv_dptr = nullptr, const std::vector<size_t> &scale_inv_shape = {1}, const NVTEScalingMode scaling_mode = NVTE_DELAYED_TENSOR_SCALING)
构造新的 TensorWrapper。
创建具有给定形状、数据类型和数据的新 TE 张量。TE 张量只是原始数据的包装器,不拥有内存。
- 参数:
dptr – **[输入]** 指向张量数据的指针。
shape – **[输入]** 张量的形状。
dtype – **[输入]** 张量的数据类型。
amax_dptr – **[输入]** 指向 AMAX 值的指针。
scale_dptr – **[输入]** 指向 scale 值的指针。
scale_inv_shape – **[输入]** scale_inv 的形状
scale_inv_dptr – **[输入]** 指向 scale 值的倒数的指针。
-
inline explicit TensorWrapper(const NVTEScalingMode scaling_mode = NVTE_DELAYED_TENSOR_SCALING)
构造新的空 TensorWrapper。
创建一个新的空 TE 张量,不持有任何内容。
-
inline ~TensorWrapper()
TensorWrapper 析构函数。
-
TensorWrapper &operator=(const TensorWrapper &other) = delete
-
TensorWrapper(const TensorWrapper &other) = delete
-
inline TensorWrapper(TensorWrapper &&other)
从现有的 TensorWrapper 构造新的 TensorWrapper。
将现有的 TE 张量传递给新的 TensorWrapper。
- 参数:
other – **[输入/输出]** 数据的来源。
-
inline TensorWrapper &operator=(TensorWrapper &&other)
从现有的 TensorWrapper 分配数据。
更改现有 TE 张量的所有权。
- 参数:
other – **[输入/输出]** 数据的来源。
-
template<typename ShapeType>
inline TensorWrapper &set_parameter(const NVTETensorParam param, void *dptr, DType type, const ShapeType &shape) noexcept
-
template<typename ShapeType>
inline TensorWrapper &set_rowwise_data(void *dptr, DType type, const ShapeType &shape) noexcept
-
template<typename ShapeType>
inline TensorWrapper &set_columnwise_data(void *dptr, DType type, const ShapeType &shape) noexcept
-
template<typename ShapeType>
inline TensorWrapper &set_scale(void *dptr, DType type, const ShapeType &shape) noexcept
-
template<typename ShapeType>
inline TensorWrapper &set_amax(void *dptr, DType type, const ShapeType &shape) noexcept
-
template<typename ShapeType>
inline TensorWrapper &set_rowwise_scale_inv(void *dptr, DType type, const ShapeType &shape) noexcept
-
template<typename ShapeType>
inline TensorWrapper &set_columnwise_scale_inv(void *dptr, DType type, const ShapeType &shape) noexcept
-
inline NVTEBasicTensor get_parameter(const NVTETensorParam param) const noexcept
-
inline NVTEBasicTensor get_rowwise_data() const noexcept
-
inline NVTEBasicTensor get_columnwise_data() const noexcept
-
inline NVTEBasicTensor get_scale() const noexcept
-
inline NVTEBasicTensor get_amax() const noexcept
-
inline NVTEBasicTensor get_rowwise_scale_inv() const noexcept
-
inline NVTEBasicTensor get_columnwise_scale_inv() const noexcept
-
inline NVTETensor data() const noexcept
获取底层的 NVTETensor。
- 返回值:
此 TensorWrapper 持有的 NVTETensor。
-
inline const NVTEShape columnwise_shape() const noexcept
获取此 TensorWrapper 的形状。
- 返回值:
此 TensorWrapper 的形状。
-
inline size_t size(const size_t dim) const
获取此 TensorWrapper 在给定维度上的大小。
- 参数:
size_t – [in] 维度索引。
- 返回值:
此 TensorWrapper 在给定维度上的大小。
-
inline size_t ndim() const noexcept
获取此 TensorWrapper 的维度数量。
- 返回值:
此 TensorWrapper 的维度数量。
-
inline size_t numel() const noexcept
获取张量中已分配元素的数量。即使 TensorWrapper 具有非零形状,对于具有 nullptr 数据的张量,此函数将返回 0。
- 返回值:
张量中的元素数量。
-
inline size_t element_size() const noexcept
获取张量的元素大小(以字节为单位)。
- 返回值:
元素大小(以字节为单位)。
-
inline size_t bytes() const noexcept
获取张量的已分配大小(以字节为单位)。即使 TensorWrapper 具有非零形状和有效 dtype,对于具有 nullptr 数据的张量,此函数将返回 0。
- 返回值:
张量的总大小(以字节为单位)。
-
inline DType dtype() const noexcept
获取此 TensorWrapper 的数据类型。
- 返回值:
此 TensorWrapper 的数据类型。
-
inline void *dptr() const noexcept
获取指向张量数据的原始指针。
- 返回值:
指向张量数据的原始指针。
-
inline void *columnwise_dptr() const noexcept
获取指向张量数据的原始指针。
- 返回值:
指向张量数据的原始指针。
-
inline float *amax() const noexcept
获取指向张量的 amax 数据的指针。
- 返回值:
指向张量的 amax 数据的指针。
-
inline float *scale() const noexcept
获取指向张量的缩放数据的指针。
- 返回值:
指向张量的缩放数据的指针。
-
inline float *scale_inv() const noexcept
获取指向张量的逆缩放数据的指针。
- 返回值:
指向张量的逆缩放数据的指针。
-
inline const NVTEShape scale_inv_shape() const noexcept
获取此 TensorWrapper 的 scale_inv_shape。
- 返回值:
此 TensorWrapper 的 scale_inv_shape。
-
inline NVTEScalingMode scaling_mode() const noexcept
获取张量的缩放模式。
- 返回值:
张量的缩放模式。
-
inline void zero_(cudaStream_t stream)
公共静态属性
-
static constexpr size_t defaultData = 1
-
static constexpr NVTEShape defaultShape = {&defaultData, 1}
Private Functions
Private Members
-
NVTETensor tensor_ = nullptr
包装的 NVTETensor。
-
inline TensorWrapper(void *dptr, const NVTEShape &shape, const DType dtype, float *amax_dptr = nullptr, float *scale_dptr = nullptr, float *scale_inv_dptr = nullptr, const NVTEShape scale_inv_shape = defaultShape, const NVTEScalingMode scaling_mode = NVTE_DELAYED_TENSOR_SCALING)
-
struct TensorWrapper