fp16=True
训练 Huggingface 模型,例如:
training_args = TrainingArguments(
output_dir="./results",
evaluation_strategy="epoch",
learning_rate=4e-5,
lr_scheduler_type="cosine",
per_device_train_batch_size=32,
per_device_eval_batch_size=16,
num_train_epochs=3,
weight_decay=0.01,
fp16=True,
)
同时设置
fp16_full_eval=True
有什么意义吗?或者fp16=True
已经暗示了这一点?
同样的问题
bf16
。
同时设置 fp16_full_eval=True 有什么意义吗?
fp16=True
仅控制训练期间的精度,而不是评估或推理期间的精度。 fp16_full_eval=True
强制评估或推理模式使用半精度 fp16
格式,而不是混合精度(默认情况下使用 自动混合精度或 AMP 在内部设置)。这导致精度较低、张量较小,因此内存占用量也大大减少。在某些情况下,它可能是令人讨厌的 CUDA 运行时错误的来源,但如果您的模型训练和评估没有错误,那么它可能是一种非常富有成效的内存优化,并且模型性能不会有太大损失。
或者 fp16=True 已经暗示了这一点?
事实并非如此。您可以将
fp16
和 fp16_full_eval
都设置为 True
进行混合精度训练和完整 fp16
精度评估。请注意,由于精度较低,这可能会对指标计算产生不利影响。
同样的考虑因素也适用于
bf16
和 bf16_full_eval
。值得注意的是,bf16
的精度较差,但稳定性比fp16
更好。
来源:https://huggingface.co/docs/transformers/v4.15.0/en/performance#fp16-inference