版本 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支持的选项:
norm_fit: 对“Training BatchNorm and Only BatchNorm: On the Expressive Power of Random Features in CNNs”和BitFit中算法的扩展。我们微调了归一化层中的参数以及偏置。
为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
使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) @zhiqiangdontorchmetrics.AUROC需要在小批量中同时提供正例和负例。当训练一个大型模型时,每个GPU的批量大小可能较小,导致roc_auc得分不准确。从roc_auc转换为log_loss可以提高训练的稳定性。
添加了
pytorch-lightning1.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一个高效的实现,用于保存从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_0和hf_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_configs在AutoMMPrediction.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_results和model_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_best是None时特征重要性出错的问题(如果没有拟合加权集成模型可能会发生这种情况)(#1702) @Innixma
文档¶
更新了自定义超参数的文本教程 (#1620) @zhiqiangdon
添加了来自Huggingface模型库的可定制骨干网络以及如何使用本地骨干网络。
改进了
save_pretrained_models和convert_checkpoint_name的实现和文档字符串。(#1656) @zhiqiangdon在网站上添加了速查表 (#1605) @yinweisu
修复文档以在调用排行榜时使用正确的预测器 (#1652) @Innixma
杂项更改¶
[安全] 更新了
pillow到9.0.1+ (#1615) @gradientsky[安全] 更新了
ray到1.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)