版本 0.4.1

我们很高兴宣布AutoGluon 0.4.1版本的发布。0.4.1版本包含了对Tabular、Text、Image和Multimodal模块的小幅增强,以及许多生活质量改进和修复。

此版本从v0.4.0升级时是非破坏性的。一如既往,仅使用最初训练时相同版本的AutoGluon加载先前训练的模型。不支持加载在不同版本的AutoGluon中训练的模型。

此版本包含55 次提交,来自 10 位贡献者

查看完整的提交变更日志请访问:https://github.com/autogluon/autogluon/compare/v0.4.0…v0.4.1

特别感谢@yiqings, @leandroimail, @huibinshen,他们是AutoGluon本次发布的首批贡献者!

完整贡献者列表(按提交次数排序):

  • @Innixma, @zhiqiangdon, @yinweisu, @sxjscience, @yiqings, @gradientsky, @willsmithorg, @canerturkmen, @leandroimail, @huibinshen.

此版本支持 Python 3.7 到 3.9 版本。

Changes

AutoMM

New features

  • 添加了optimization.efficient_finetune标志以支持多种高效微调算法。(#1666) @sxjscience

  • 为AutoMM启用了知识蒸馏 (#1670) @zhiqiangdon

    • 蒸馏API用于AutoMMPredictor,它重用了.fit()函数:

    from autogluon.text.automm import AutoMMPredictor
    teacher_predictor = AutoMMPredictor(label="label_column").fit(train_data)
    student_predictor = AutoMMPredictor(label="label_column").fit(
        train_data,
        hyperparameters=student_and_distiller_hparams,
        teacher_predictor=teacher_predictor,
    )
    
  • 开启返回特征列信息的选项 (#1711) @zhiqiangdon

    • 特征列信息在特征列蒸馏时开启;在其他情况下默认关闭以减少数据加载器的延迟。

    • 在数据处理器中添加了一个requires_column_info标志,并添加了一个实用函数来打开或关闭此标志。

  • FT-Transformer 在 AutoMM 中用于表格数据的实现 (#1646) @yiqings

    • Yury Gorishniy, Ivan Rubachev, Valentin Khrulkov, Artem Babenko, “重新审视用于表格数据的深度学习模型” 2022. (arxiv, 官方实现)

  • 使CLIP支持每个样本多张图片 (#1606) @zhiqiangdon

    • 为CLIP添加了多图像支持。提高了数据加载器的鲁棒性:添加了缺失图像处理以防止训练崩溃。

    • 增加了在缺少图像时使用零图像的选择。

  • 避免使用eos作为CLIP的分隔符标记。(#1710) @zhiqiangdon

  • 在AutoMM中更新融合变压器 (#1712) @yiqings

    • 支持在polynomial_decay调度器中使用恒定学习率。

    • 更新数值/分类转换器中的[CLS]标记。

  • 增加了更多的图像增强功能:verticalflip, colorjitter, randomaffine (#1719) @Linuxdex, @sxjscience

  • 在图像列检测期间添加了缺失图像百分比的提示。(#1623) @zhiqiangdon

  • 支持在AutoMM中的average_precision (#1697) @sxjscience

  • roc_auc / average_precision 转换为 log_loss 用于 torchmetrics (#1715) @zhiqiangdon

    • torchmetrics.AUROC 需要在小批量中同时提供正例和负例。当训练一个大型模型时,每个GPU的批量大小可能较小,导致roc_auc得分不准确。从roc_auc转换为log_loss可以提高训练的稳定性。

  • 添加了 pytorch-lightning 1.6 支持 (#1716) @sxjscience

检查点和模型输出更改

  • 更新了top-k检查点平均方法的名称,并支持为终端输入自定义模型名称 (#1668) @zhiqiangdon

    • 根据论文: https://arxiv.org/pdf/2203.05482.pdf 更新 top-k 检查点平均名称: union_soup -> uniform_soupbest_soup -> best.

    • 更新函数名称(customize_config_names -> customize_model_namesverify_config_names -> verify_model_names)以便更容易理解它们。

    • 支持为终端输入自定义模型名称。

  • 实现了在论文中提出的GreedySoup算法。添加了union_soupgreedy_soupbest_soup标志,并相应地更改了默认值。(#1613) @sxjscience

  • 更新了automm.predictor.save()中的standalone标志,以保存用于离线部署的预训练模型 (#1575) @yiqings

    • 一个高效的实现,用于保存从transformers下载的模型以便离线部署。修订逻辑在#1572中,并在#1572(评论)中进行了讨论。

  • 简化的检查点模板 (#1636) @zhiqiangdon

    • 停止使用pytorch lightning的模型检查点模板来保存AutoMMPredictor的最终模型检查点。

    • 改进了持续训练的逻辑。我们仅在resume=True时,将ckpt_path参数传递给pytorch lightning的trainer。

  • 统一AutoMM的模型输出格式并支持自定义模型名称 (#1643) @zhiqiangdon

    • 现在每个模型的输出都是一个字典,模型前缀作为第一级键。单模型和融合模型之间的格式是统一的。

    • 现在用户可以通过使用内部注册的名称(timm_image, hf_text, clip, numerical_mlp, categorical_mlp, 和 fusion_mlp)作为前缀来自定义模型名称。当用户希望同时使用两个相同类型的模型时,例如 hf_text,这非常有用。他们只需使用名称 hf_text_0hf_text_1

  • 支持在TextPredictor中的standalone功能 (#1651) @yiqings

  • 修复了保存和加载分词器和文本处理器的问题 (#1656) @zhiqiangdon

    • 将预训练的huggingface分词器与数据处理器分开保存。

    • 此更改与版本0.4.0保存的检查点向后兼容。

  • 将加载方法从类方法更改为静态方法,以避免错误使用。(#1697) @sxjscience

  • 添加了AutoMMModelCheckpoint以避免评估模型以获取分数 (#1716) @sxjscience

    • 检查点将把best_k_models保存到一个yaml文件中,以便稍后加载以确定模型检查点的路径。

  • 从AutoMM的模型输出中提取列特征 (#1718) @zhiqiangdon

    • 添加一个实用函数来提取图像和文本的列特征。

    • 支持为模型 timm_image, hf_text, 和 clip 提取列特征。

  • 使AutoMM数据加载器返回特征列信息 (#1710) @zhiqiangdon

错误修复

  • 修复了在不存在融合模型时调用save_pretrained_configsAutoMMPrediction.save(standalone=True)中的问题 (here) (#1651) @yiqings

  • 修复了在配置中设置不存在的键时引发的错误 (#1613) @sxjscience

  • 修复了关于bf16的警告信息。(#1625) @sxjscience

  • 修复了计算梯度累积步数的极端情况 (#1633) @sxjscience

  • 修复了在多GPU设置中的top-k平均问题 (#1707) @zhiqiangdon

Tabular

  • 将RF max_leaf_nodes 限制为15000(之前没有上限)(#1717) @Innixma

    • 以前,对于非常大的数据集,RF/XT 的内存和磁盘使用量会迅速变得不合理。这确保了在某个点上,RF 和 XT 不会因为更多的训练数据行而变得更大。基准测试结果显示,这一变化是一个改进,特别是对于 high_quality 预设。

  • 将KNN限制为32个CPU以避免OpenBLAS错误(#1722)@Innixma

    • 问题 #1020。在训练K近邻(KNN)模型时,有时会发生罕见的错误,导致整个进程崩溃:

    BLAS : Program is Terminated. Because you tried to allocate too many memory regions.
    Segmentation fault: 11
    

    当机器拥有许多CPU核心(>64个vCPU)时,由于一次性创建了太多线程,发生了此错误。通过限制使用的核心数为32个,可以避免此错误。

  • 改进了内存警告阈值 (#1626) @Innixma

  • 添加了 get_resultsmodel_base_kwargs (#1618) @Innixma

    • 添加了get_results到搜索器,这对于调试和未来扩展HPO功能非常有用。 添加了一种新的初始化BaggedEnsembleModel的方法,该方法避免了在初始化bagged ensemble模型之前必须先初始化基础模型。

  • 更新模型中的资源逻辑 (#1689) @Innixma

    • 如果用户为资源指定了auto,之前的实现会崩溃,在此PR中已修复。

    • 添加了 get_minimum_resources 以在方法中明确定义最低资源需求。

  • 更新了特征重要性的默认值 subsample_size 从1000改为5000,num_shuffle_sets 3 改为5 (#1708) @Innixma

    • 这将默认提高特征重要性值的质量,特别是99%的置信区间。这一变化将增加约8倍的时间,但由于自这些默认值首次引入以来进行了大量的推理速度优化,这是可以接受的。

  • 添加通知以确保可序列化的自定义指标 (#1705) @Innixma

Bug fixes

  • 修复了当weight_evaluation=True时的evaluate (#1612) @Innixma

    • 以前,如果用户在self.weight_evaluation==True时指定了predictor.evaluate(...)predictor.evaluate_predictions(...),AutoGluon会崩溃。

  • 修复了在迭代过程中字典大小改变的RuntimeError (#1684, #1685) @leandroimail

  • 修复了CatBoost自定义指标和F1支持 (#1690) @Innixma

  • 修复了如果从磁盘加载bagged模型时HPO无法工作的问题 (#1702) @Innixma

  • 修复了如果self.model_bestNone时特征重要性出错的问题(如果没有拟合加权集成模型可能会发生这种情况)(#1702) @Innixma

文档

  • 更新了自定义超参数的文本教程 (#1620) @zhiqiangdon

    • 添加了来自Huggingface模型库的可定制骨干网络以及如何使用本地骨干网络。

  • 改进了save_pretrained_modelsconvert_checkpoint_name的实现和文档字符串。(#1656) @zhiqiangdon

  • 在网站上添加了速查表 (#1605) @yinweisu

  • 修复文档以在调用排行榜时使用正确的预测器 (#1652) @Innixma

杂项更改

  • [安全] 更新了 pillow9.0.1+ (#1615) @gradientsky

  • [安全] 更新了 ray1.10.0+ (#1616) @yinweisu

  • 表格回归测试改进 (#1555) @willsmithorg

    • 在小规模合成数据集上对模型列表和分数进行回归测试(以提高速度)。

    • 测试了大约20种不同的调用TabularPredictor的情况,包括回归和分类任务,多种预设等。

    • 当测试失败时,它会输出使测试通过所需的配置更改,以便于更新。

  • TabularPredictor中GPU不可用时,禁用图像/文本预测器 (#1676) @yinweisu

    • 在开始打包之前,资源会被验证。图像/文本预测模型至少需要1个GPU。

  • 使用类属性来设置模型类中的键。这样,如果我们自定义前缀键,其他键会自动更新。(#1669) @zhiqiangdon

各种错误修复、文档和持续集成改进

  • @yinweisu (#1605, #1611, #1631, #1638, #1691)

  • @zhiqiangdon (#1721)

  • @Innixma (#1608, #1701)

  • @sxjscience (#1714)