版本 0.4.1

我们很高兴地宣布 AutoGluon 0.4.1 版本发布。0.4.1 版本包含对表格数据、文本、图像和多模态模块的少量增强,以及许多生活质量改进和修复。

此版本从 v0.4.0 升级时不会引入破坏性改动。一如既往,只能使用训练模型时所用的相同 AutoGluon 版本加载先前训练好的模型。不支持加载在不同 AutoGluon 版本中训练的模型。

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

在此查看完整的提交更改日志:https://github.com/autogluon/autogluon/compare/v0.4.0…v0.4.1

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

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

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

更改

AutoMM

新功能

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

    • 支持的选项

      • bit_fit:《BitFit: Simple Parameter-efficient Fine-tuning for Transformer-based Masked Language-models》(arxiv

      • norm_fit:是《Training BatchNorm and Only BatchNorm: On the Expressive Power of Random Features in CNNs》(arxiv)和 BitFit 中算法的扩展。我们微调范数层中的参数以及偏差。

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

    • AutoMMPredictor 的蒸馏 API 重用 .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 标志和一个用于开启或关闭此标志的实用函数。

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

    • Yury Gorishniy, Ivan Rubachev, Valentin Khrulkov, Artem Babenko,《Revisiting Deep Learning Models for Tabular Data》2022。(arxiv官方实现

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

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

    • 添加了如果图像缺失则使用零图像的选项。

  • 避免使用 eos 作为 CLIP 的 sep 标记。(#1710@zhiqiangdon

  • 更新 AutoMM 中的融合 Transformer(#1712@yiqings

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

    • 更新数值/类别 Transformer 中的 [CLS] 标记。

  • 添加了更多图像增强:verticalflipcolorjitterrandomaffine#1719@Linuxdex, @sxjscience

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

  • 在 AutoMM 中支持 average_precision#1697@sxjscience

  • 为 torchmetrics 将 roc_auc / average_precision 转换为 log_loss#1715@zhiqiangdon

    • torchmetrics.AUROC 要求 mini-batch 中同时存在正样本和负样本。训练大型模型时,每个 GPU 的 batch size 可能较小,导致 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 (comment) 中进行了讨论。

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

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

    • 改进了持续训练的逻辑。仅当 resume=True 时,才将 ckpt_path 参数传递给 pytorch lightning 的训练器。

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

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

    • 现在,用户可以使用内部注册名称(timm_imagehf_textclipnumerical_mlpcategorical_mlpfusion_mlp)作为前缀来自定义模型名称。当用户希望同时使用同一类型的两个模型时(例如 hf_text),这会很有帮助。他们只需使用名称 hf_text_0hf_text_1 即可。

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

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

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

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

  • 将 load 从类方法更改为静态方法以避免不正确的使用。(#1697@sxjscience

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

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

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

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

    • 支持为 timm_imagehf_textclip 模型提取列特征。

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

Bug 修复

  • 修复了在没有融合模型存在时,调用 AutoMMPrediction.save(standalone=True) 中的 save_pretrained_configs 的问题(此处)(#1651@yiqings

  • 修复了设置配置中不存在的键时报错的问题(#1613@sxjscience

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

  • 修复了计算梯度累积步长的边界情况(#1633@sxjscience

  • 修复了多 GPU 设置中的 Top-K 平均问题(#1707@zhiqiangdon

表格数据

  • 将 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 model 之前必须先初始化基础模型。

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

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

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

  • 更新了特征重要性默认值:subsample_size 1000 -> 5000,num_shuffle_sets 3 -> 5(#1708@Innixma

    • 默认情况下,这将提高特征重要性值的质量,特别是 99% 置信区间。此更改会使所需时间增加约 8 倍,但这是可以接受的,因为自从这些默认值首次引入以来,已经进行了许多推理速度优化。

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

Bug 修复

  • 修复了当 weight_evaluation=Trueevaluate 的问题(#1612@Innixma

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

  • 修复了 RuntimeError: dictionary changed size during iteration 的问题(#1684, #1685@leandroimail

  • 修复了 CatBoost 自定义评估指标和 F1 支持的问题(#1690@Innixma

  • 修复了如果 bagged model 是从磁盘加载的,HPO 不适用于 bagged models 的问题(#1702@Innixma

  • 修复了当 self.model_bestNone 时特征重要性报错的问题(在没有拟合加权集成模型时可能发生)(#1702@Innixma

文档

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

    • 添加了 Huggingface 模型库中可自定义的 backbone 以及如何使用本地 backbone。

  • 改进了 save_pretrained_modelsconvert_checkpoint_name 的实现和 docstrings。(#1656@zhiqiangdon

  • 将速查表添加到网站(#1605@yinweisu

  • 文档修复:在调用 leaderboard 时使用正确的 predictor(#1652@Innixma

其他更改

  • [安全] 将 pillow 更新到 9.0.1+(#1615@gradientsky

  • [安全] 将 ray 更新到 1.10.0+(#1616@yinweisu

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

    • 对小型合成数据集上的表格数据模型列表和分数进行回归测试(为了速度)。

    • 测试了对 TabularPredictor 的约 20 种不同调用,涵盖回归和分类任务、多种预设等。

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

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

    • 在开始 bagging 之前验证资源。图像/文本预测器模型至少需要 1 个 GPU。

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

各种 Bug 修复、文档和 CI 改进