Accelerate documentation
FP8
FP8
以下是与底层 FP8 实现相关的函数和类
TERecipeKwargs
类 accelerate.utils.TERecipeKwargs
< source >( use_autocast_during_eval: bool | None = Nonemargin: int | None = Noneinterval: int | None = Nonefp8_format: typing.Literal['HYBRID', 'E4M3', 'E5M2'] = Noneamax_history_len: int | None = Noneamax_compute_algo: typing.Literal['max', 'most_recent'] = Noneoverride_linear_precision: tuple = Noneuse_mxfp8_block_scaling: bool | None = None )
参数
- use_autocast_during_eval (
bool,可选,默认为False) — 是否在 eval 模式下使用 FP8 autocast。通常将此参数设为False时,指标表现更好。 - margin (
int,可选,默认为 0) — 用于梯度缩放的边距。 - interval (
int,可选,默认为 1) — 用于指定重新计算缩放因子的频率间隔。 - fp8_format (
str, 可选, 默认为 “HYBRID”) — 用于 FP8 配方的格式。必须是HYBRID、E4M3或E5M2之一。(通常训练使用HYBRID,评估使用E4M3或E5M2) - amax_history_len (
int,可选,默认为 1024) — 用于计算缩放因子的历史长度 - amax_compute_algo (
str,可选,默认为 “most_recent”) — 用于计算缩放因子的算法。必须是max或most_recent之一。 - override_linear_precision (
tupleof threebool, 可选, 默认为(False, False, False)) — 是否以更高精度执行fprop、dgrad和wgradGEMM。
在您的 Accelerator 中使用此对象,以自定义使用 transformer-engine 进行 FP8 混合精度训练的配方初始化。
有关 args 的更多信息,请参阅 API 文档。
AORecipeKwargs
类 accelerate.utils.AORecipeKwargs
< source >( config: ForwardRef('Float8LinearConfig') | None = Nonemodule_filter_func: typing.Callable | None = Nonepad_inner_dim: bool | None = Noneenable_fsdp_float8_all_gather: bool | None = None )
参数
- config (
torchao.float8.Float8LinearConfig, 可选, 默认为None) — FP8 训练的配置。如果None, 为大多数用例提供了合理的默认值:pad_inner_dim=True:将矩阵维度填充为 16 的倍数,这是torch._scaled_mm操作所必需的,可防止运行时错误。enable_fsdp_float8_all_gather=True:为 FSDP2 启用 FP8 all-gather。通过在 all-gather 操作前将参数转换为 FP8,可节省内存带宽,与 BF16 相比节省 50% 的带宽。
您可以通过提供自己的
Float8LinearConfig实例来覆盖这些默认值。 - module_filter_func (
Callable,可选,默认为None) — 可选函数,必须接收一个模块和层名称作为输入,并返回一个布尔值,指示是否应将该模块转换为 FP8。默认为accelerate.utils.ao.filter_linear_layers。请参阅该函数以获取示例。
在您的 Accelerator 中使用此对象,以自定义使用 torchao FP8 进行 FP8 混合精度训练的配方初始化。
convert_model
accelerate.utils.convert_model
< source >( modelto_transformer_engine = True_convert_linear = True_convert_ln = True )
递归地将模型中的线性层和层归一化层转换为它们的 transformers_engine 对应层。
has_transformer_engine_layers
返回给定的模型是否包含某些 transformer_engine 层。
contextual_fp8_autocast
accelerate.utils.contextual_fp8_autocast
< source >( model_forwardfp8_recipeuse_during_eval = False )
用于模型 forward 方法的包装器,以应用 FP8 自动转换。它具有上下文感知能力,即默认情况下会在 eval 模式下禁用 FP8 自动转换,这通常能带来更准确的指标。
apply_fp8_autowrap
将 FP8 上下文管理器应用于模型的前向方法