微调facebook/bart-large-mnli生成超大模型包的问题求助
问题背景
按照指定方式准备了MNLI格式的文本分类微调数据,使用AWS SageMaker的HuggingFace Estimator调用官方run_glue.py脚本微调facebook/bart-large-mnli模型。训练完成后生成的model.tar.gz体积高达158GB,上传至S3耗时超过5小时。尝试添加save_strategy="no"、save_total_limit=1、load_best_model_at_end=True参数后,问题仍未解决。
有效解决方案
以下是针对该问题的具体解决措施:
1. 精准控制模型保存策略,只保留必要文件
run_glue.py默认会保存完整的训练状态(包括优化器、调度器参数等),这些文件会大幅增加包体积。通过以下参数调整:
- 设置
save_only_model=True:仅保存模型权重文件,不保存训练状态相关的冗余文件,这是减少体积最有效的手段之一; - 配合
save_strategy="epoch"和save_total_limit=1:仅保留最新一轮epoch的模型checkpoint,避免累积多个历史checkpoint; - 若不需要评估后加载最佳模型,需将
load_best_model_at_end设为False(开启该选项会强制保存中间checkpoint用于评估,无法避免额外文件)。
修改后的超参数示例:
hyperparameters={ 'do_train' : True, 'do_eval' : True, 'model_name': 'facebook/bart-large-mnli', 'task_name': 'mnli', 'output_dir': '/opt/ml/model', 'overwrite_output_dir' : True, 'save_strategy': "epoch", 'save_total_limit': 1, 'save_only_model': True, 'load_best_model_at_end': False }
2. 关闭不必要的评估与日志文件生成
训练过程中生成的评估预测结果、详细日志也会占用大量空间,可通过以下参数关闭或精简:
- 添加
predict_with_generate=False:避免生成大体积的预测结果文件; - 设置
logging_strategy="no"或logging_steps=10000(远大于训练步数):减少日志文件的生成量; - 若不需要评估,可直接设置
do_eval=False和evaluation_strategy="no"。
3. 启用混合精度训练压缩模型体积
开启混合精度训练(FP16),将模型权重从FP32转为FP16,直接将模型体积减半:
hyperparameters={ # 其他参数... 'fp16': True }
4. 自定义脚本简化保存逻辑
若官方run_glue.py的保存逻辑仍不符合需求,可自定义训练脚本,仅在训练结束时调用model.save_pretrained(output_dir)保存模型核心文件,完全跳过训练状态、中间checkpoint的保存步骤。
5. 检查并清理输出目录冗余文件
确保/opt/ml/model目录下仅包含模型相关文件:
- 确认
overwrite_output_dir=True已生效,避免残留上一次训练的文件; - 避免在训练过程中将数据缓存、临时文件写入输出目录。
内容的提问来源于stack exchange,提问作者user2719323
相关产品推荐
相关产品推荐

