Transformer 内核
DeepSpeed 中的 Transformer 内核 API 可用于创建 BERT Transformer 层,以更有效地进行预训练和微调,它包括 Transformer 层配置和 Transformer 层模块初始化。
这里介绍了 Transformer 内核 API。有关使用详情,请参阅 BERT 预训练教程。
DeepSpeed Transformer 配置
- class deepspeed.DeepSpeedTransformerConfig(batch_size=-1, hidden_size=-1, intermediate_size=-1, heads=-1, attn_dropout_ratio=-1, hidden_dropout_ratio=-1, num_hidden_layers=-1, initializer_range=-1, layer_norm_eps=1e-12, local_rank=-1, seed=-1, fp16=False, pre_layer_norm=True, normalize_invertible=False, gelu_checkpoint=False, adjust_init_range=True, attn_dropout_checkpoint=False, stochastic_mode=False, return_tuple=False, training=True)[source]
初始化 DeepSpeed Transformer 配置。
- 参数
batch_size – 在每个 GPU 上运行内核时使用的最大批次大小
hidden_size – Transformer 层的隐藏大小
intermediate_size – Transformer 层的前馈部分的中间大小
heads – Transformer 层自注意力机制中的头数
attn_dropout_ratio – 注意力输出的 dropout 比率
hidden_dropout_ratio – Transformer 输出的 dropout 比率
num_hidden_layers – Transformer 层的数量
initializer_range – BERT 模型的初始化范围,用于初始化参数数据
local_rank – 可选:运行 Transformer 内核的 GPU 的排名,如果模型已经设置了当前设备,则不需要使用它,否则需要设置它,以便 Transformer 内核可以在正确的设备上工作
seed – dropout 层的随机种子
fp16 – 启用半精度计算
pre_layer_norm – 在 Pre-LN 或 Post-LN Transformer 架构之间选择
normalize_invertible – 可选:启用可逆 LayerNorm 执行(丢弃输入激活),默认值为 False
gelu_checkpoint – 可选:启用 Gelu 激活输出的检查点,以节省内存,默认值为 False
adjust_init_range –
可选:如果模型调整其自注意力输出和层输出的权重初始值,则设置为 True(默认),False 保持 initializer_range 不变。查看下面的调整
output_std = self.config.initializer_range / math.sqrt(2.0 * num_layers)
attn_dropout_checkpoint – 可选:启用注意力 dropout 的检查点,以节省内存,默认值为 False
stochastic_mode – 启用以获得高性能,请注意此标志具有一定程度的非确定性,并且可以在不同的运行中产生不同的结果。但是,我们发现启用它不会影响 BERT 等预训练任务,并且可以获得较高的准确率。另一方面,对于下游任务,例如微调,我们建议关闭它,以便能够通过常规内核执行来复制相同的结果。
return_tuple – 如果使用 return_tuple 接口样式来发送转发结果,则启用。
training – 启用以进行训练而不是推理。
DeepSpeed Transformer 层
- class deepspeed.DeepSpeedTransformerLayer(config, initial_weights=None, initial_biases=None)[source]
初始化 DeepSpeed Transformer 层。
- 静态变量
layer_id: 从 0 开始的层索引计数器,每次实例化层对象时递增 1,例如,如果模型有 24 个 Transformer 层,则 layer_id 从 0 到 23。
- 参数
config – DeepSpeedTransformerConfig 的对象
initial_weights – 可选:仅用于单元测试
initial_biases – 可选:仅用于单元测试