如果在“fp16”中训练,设置“fp16_full_eval=True”有什么意义吗?

问题描述 投票:0回答:1

我用

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

python huggingface-transformers half-precision-float
1个回答
0
投票

同时设置 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

© www.soinside.com 2019 - 2024. All rights reserved.