版本 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 的首次贡献者!
完整贡献者列表(按提交次数排序)
@Innixma, @zhiqiangdon, @yinweisu, @sxjscience, @yiqings, @gradientsky, @willsmithorg, @canerturkmen, @leandroimail, @huibinshen。
此版本支持 Python 3.7 至 3.9 版本。
更改¶
AutoMM¶
新功能¶
添加了
optimization.efficient_finetune
标志,以支持多种高效微调算法。(#1666) @sxjscience为 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
标志和一个用于开启或关闭此标志的实用函数。
使 CLIP 支持每个样本多张图像(#1606) @zhiqiangdon
为 CLIP 添加了多图像支持。提高了数据加载器的鲁棒性:添加了缺失图像处理以防止训练崩溃。
添加了如果图像缺失则使用零图像的选项。
避免使用
eos
作为 CLIP 的 sep 标记。(#1710) @zhiqiangdon更新 AutoMM 中的融合 Transformer(#1712) @yiqings
在
polynomial_decay
调度器中支持恒定学习率。更新数值/类别 Transformer 中的
[CLS]
标记。
添加了更多图像增强:
verticalflip
、colorjitter
、randomaffine
(#1719) @Linuxdex, @sxjscience在图像列检测期间添加了缺失图像百分比的提示。(#1623) @zhiqiangdon
在 AutoMM 中支持
average_precision
(#1697) @sxjscience为 torchmetrics 将
roc_auc
/average_precision
转换为log_loss
(#1715) @zhiqiangdontorchmetrics.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_soup
和best_soup
->best
。更新函数名称(
customize_config_names
->customize_model_names
和verify_config_names
->verify_model_names
),使其更容易理解。支持为终端输入自定义模型名称。
实现了论文中提出的 GreedySoup 算法。添加了
union_soup
、greedy_soup
、best_soup
标志并相应地更改了默认值。(#1613) @sxjscience更新了
automm.predictor.save()
中的standalone
标志,以保存预训练模型用于离线部署(#1575) @yiqings简化了检查点模板(#1636) @zhiqiangdon
在保存
AutoMMPredictor
的最终模型检查点时,停止使用 pytorch lightning 的模型检查点模板。改进了持续训练的逻辑。仅当
resume=True
时,才将ckpt_path
参数传递给 pytorch lightning 的训练器。
统一了 AutoMM 的模型输出格式并支持自定义模型名称(#1643) @zhiqiangdon
现在,每个模型的输出都是一个字典,其中模型前缀作为第一级键。单模型和融合模型之间的格式是一致的。
现在,用户可以使用内部注册名称(
timm_image
、hf_text
、clip
、numerical_mlp
、categorical_mlp
和fusion_mlp
)作为前缀来自定义模型名称。当用户希望同时使用同一类型的两个模型时(例如hf_text
),这会很有帮助。他们只需使用名称hf_text_0
和hf_text_1
即可。
修复了保存和加载分词器以及文本处理器的问题(#1656) @zhiqiangdon
将预训练的 huggingface 分词器与数据处理器分开保存。
此更改与
0.4.0
版本保存的检查点向后兼容。
将 load 从类方法更改为静态方法以避免不正确的使用。(#1697) @sxjscience
添加了
AutoMMModelCheckpoint
以避免通过评估模型来获取分数(#1716) @sxjscience检查点会将 best_k_models 保存到 yaml 文件中,以便稍后加载以确定模型检查点的路径。
从 AutoMM 的模型输出中提取列特征(#1718) @zhiqiangdon
添加一个实用函数来提取图像和文本的列特征。
支持为
timm_image
、hf_text
和clip
模型提取列特征。
使 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 个核,可以避免此错误。
添加了
get_results
和model_base_kwargs
(#1618) @Innixma将
get_results
添加到搜索器中,对于调试和未来扩展 HPO 功能很有用。添加了初始化BaggedEnsembleModel
的新方法,避免了在初始化 bagged ensemble model 之前必须先初始化基础模型。
-
如果用户为资源指定
auto
,之前的实现会崩溃,已在此 PR 中修复。添加了
get_minimum_resources
以在方法内明确定义最低资源要求。
更新了特征重要性默认值:
subsample_size
1000 -> 5000,num_shuffle_sets 3
-> 5(#1708) @Innixma默认情况下,这将提高特征重要性值的质量,特别是 99% 置信区间。此更改会使所需时间增加约 8 倍,但这是可以接受的,因为自从这些默认值首次引入以来,已经进行了许多推理速度优化。
Bug 修复¶
修复了当
weight_evaluation=True
时evaluate
的问题(#1612) @Innixma以前,如果用户在
self.weight_evaluation==True
时指定predictor.evaluate(...)
或predictor.evaluate_predictions(...)
,AutoGluon 会崩溃。
修复了 RuntimeError: dictionary changed size during iteration 的问题(#1684, #1685) @leandroimail
修复了如果 bagged model 是从磁盘加载的,HPO 不适用于 bagged models 的问题(#1702) @Innixma
修复了当
self.model_best
为None
时特征重要性报错的问题(在没有拟合加权集成模型时可能发生)(#1702) @Innixma
文档¶
更新了自定义超参数的文本教程(#1620) @zhiqiangdon
添加了 Huggingface 模型库中可自定义的 backbone 以及如何使用本地 backbone。
改进了
save_pretrained_models
和convert_checkpoint_name
的实现和 docstrings。(#1656) @zhiqiangdon
其他更改¶
[安全] 将
pillow
更新到9.0.1
+(#1615) @gradientsky表格数据回归测试改进(#1555) @willsmithorg
对小型合成数据集上的表格数据模型列表和分数进行回归测试(为了速度)。
测试了对
TabularPredictor
的约 20 种不同调用,涵盖回归和分类任务、多种预设等。测试失败时,会输出使其通过所需的配置更改,以便于更新。
在
TabularPredictor
中 GPU 不可用时禁用图像/文本预测器(#1676) @yinweisu在开始 bagging 之前验证资源。图像/文本预测器模型至少需要 1 个 GPU。
使用类属性在模型类中设置键。这样,如果自定义前缀键,其他键会自动更新。(#1669) @zhiqiangdon