AutoGluon 多模态常见问题¶
AutoGluon MultiModal 如何为多模态数据建模?¶
我们可以从您的数据中自动检测图像、文本、表格、文档以及它们的任意组合。对于每种模态,我们选择相应的基础模型。如果检测到不止一种模态,将在单模态主干网络之上创建一个融合模块,用于融合它们的特征并进行最终预测,这就是后期融合(late fusion)。
我的部署环境中没有互联网访问。我该怎么办?¶
训练好预测器后,尝试使用以下方法保存它:
predictor.save(SAVE_PATH, standalone=True)
之后,以下 .load()
调用可以在没有互联网访问的情况下进行
from autogluon.multimodal import MultiModalPredictor
predictor = MultiModalPredictor.load(SAVE_PATH)
哪种机器最适合运行 AutoGluon Multimodal?¶
AutoGluon Multimodal 主要用于微调预训练的深度学习模型。为了高效训练,强烈建议使用 GPU 机器。默认情况下,AutoGluon Multimodal 会利用单台机器上所有可用的 GPU。但是,如果由于模型或数据较大导致单 GPU 训练太慢,建议切换到多 GPU 机器。使用 AWS 实例时,建议从 G4 或 G5 实例开始。在 GPU 内存不足的情况下,即使 per_gpu_batch_size=1,也可以考虑改用 p3dn.24xlarge 或 P4 实例。P4 和 P5 实例通常提供更快的速度和内存能力,但成本也更高。在性能和成本之间取得平衡是找到最佳解决方案的关键。
多 GPU 训练遇到 RuntimeError: An attempt has been made to start a new process before the current process has finished its bootstrapping phase. 如何解决?¶
一个简单的解决方案是将您的代码封装在条件 if __name__ == '__main__'
中。默认情况下,我们使用 ddp_spawn 作为策略,它不会 fork 创建子进程。因此,有必要在主模块中使用恰当的 if __name__ == '__main__'
习惯用法。
在使用 AutoGluon Multimodal 之前,我需要预处理我的文本或图像数据吗?¶
通常您不需要预处理文本/图像数据。AutoGluon Multimodal 内置了对文本/图像预处理的支持。但是,这不妨碍您在将 DataFrame 输入到 AutoGluon Multimodal 之前添加自定义预处理逻辑。
可以自定义 AutoGluon Multimodal 吗?¶
是的,请查阅多模态自定义教程。
我可以在 Kaggle 竞赛中使用 AutoGluon Multimodal 吗?¶
是的,我们提供了一个用于构建 AutoGluon 可运行独立包的脚本:AutoGluon 多模态 Kaggle 独立包。我们在关于Petfinder Pawpularity 和 Feedback Prize - 预测有效论据 的示例中使用了此脚本。您可以参考这些示例了解更多详情。
AutoGluon MultiModal 如何处理每个样本的多个图像?¶
我们提供两种选项
在 DataFrame 中使用多个图像列。
使用分号连接多个图像路径,并将它们放在一个 DataFrame 列中。
这些选项可以单独使用,也可以组合使用。所有图像列都会自动检测。在处理过程中,我们将所有图像通过一个图像主干网络,并对其特征和 logits 进行平均,以获得最终的表示或预测。请注意,对于选项 2,一个 DataFrame 列允许的最大图像数量可以通过超参数 timm_image.max_image_num_per_column
控制,其默认值为 2。
AutoGluon MultiModal 如何处理 DataFrame 中的多个文本列?¶
所有文本列的检测都是自动化的。我们对每个文本字段单独进行分词,然后将它们连接成一个单一的 token 序列,再输入到模型中。连接后的序列中文本列的顺序遵循 sorted(X.columns)
的顺序,其中 X
代表 DataFrame。token 序列的最大长度由超参数 hf_text.max_text_len
确定,默认值为 512。如果序列长度超过此限制,我们会通过在每次迭代中从最长的文本字段的末尾删除一个 token 来进行迭代截断。这种方法确保较短的文本字段在序列截断过程中受到的影响较小。此外,您可以通过调整超参数 hf_text.insert_sep
来控制不同文本字段之间是否包含分隔 token,该参数默认设置为 True。