betty

betty

简化广义元学习和多层优化的自动微分库

Betty是一个基于PyTorch的自动微分库,专注于简化广义元学习和多层优化的实现。它通过Problem类和Engine类提供模块化接口,支持元学习、超参数优化等大规模应用。Betty集成了多种梯度近似方法和分布式训练功能,为复杂GML/MLO程序的开发提供了灵活高效的解决方案。

Betty自动微分库元学习多层优化PyTorchGithub开源项目
<p align="center"> <a href="https://leopard-ai.github.io/betty/"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/3023079b-a101-49fa-acbe-5a54a085e045.svg" alt="" width="40%" align="top"> </a> </p> <p align="center"> 一个用于广义元学习和多层优化的自动微分库<br> <a href="https://leopard-ai.github.io/betty/">文档</a> | <a href="https://leopard-ai.github.io/betty/tutorial/basic/basic.html">教程</a> | <a href="https://github.com/leopard-ai/betty/tree/main/examples">示例</a> | <a href="https://openreview.net/pdf?id=LV_MeMS38Q9">论文</a> | <a href="https://github.com/leopard-ai/betty#citation">引用</a> | <a href="https://www.casl-project.ai/">CASL</a> </p> <div align="center">

<a href="https://pypi.org/project/betty-ml/">版本</a> <a href="https://github.com/leopard-ai/betty/tree/main/test">测试</a> 许可证 <a href="https://arxiv.org/abs/2207.02849">arXiv</a> <a href="https://github.com/psf/black"><img src="https://yellow-cdn.veclightyear.com/0a4dffa0/170633fc-a2b5-428b-a224-1e599c36a180.svg" alt="代码风格:black"></a> <a href="https://join.slack.com/t/betty-n2l2441/shared_invite/zt-1ojhxizmt-NTmj2aVi3BuQQ6hjhNBTFQ" target="_blank"> <img alt="Slack" src="https://img.shields.io/badge/Slack-加入Slack-blueviolet?logo=slack" /> </a>

</div>
pip install betty-ml

更新

[2023年9月22日] "SAMA:使可扩展元学习变得实用"被NeurIPS 2023接收!

[2023年1月21日] Betty 作为*前5%杰出论文(口头报告)*被ICLR 2023接收!

[2023年1月12日] 我们发布了Betty v0.2,新增了对元学习的分布式训练支持!目前可用的功能包括:

  • 分布式数据并行(DDP)
  • 零冗余优化器(ZeRO)
  • (实验性) 完全分片数据并行(FSDP)

现在只需一行代码的更改,您就可以轻松扩展元学习(甚至元元学习)!

简介

Betty 是一个基于PyTorch的广义元学习(GML)和多层优化(MLO)库,它为多个大规模应用提供了简单模块化的编程接口,包括元学习超参数优化神经架构搜索数据重加权等等。

使用Betty,用户只需做两件事即可实现任何GML/MLO程序:

  1. 使用Problem类定义每个层级的优化问题。
  2. 使用Engine类定义层级问题结构。

快速开始

Problem

基础

每个层级问题可以通过七个组件定义:(1)模块、(2)优化器、(3)数据加载器、(4)损失函数、(5)问题配置、(6)名称,以及(7)其他可选组件(例如学习率调度器)。损失函数(4)可以通过training_step方法定义,而其他所有组件可以通过类构造函数提供。例如,图像分类问题可以定义如下:

from betty.problems import ImplicitProblem from betty.configs import Config # 设置模块、优化器、数据加载器(即(1)-(3)) cls_module, cls_optimizer, cls_data_loader = setup_classification() class Classifier(ImplicitProblem): # 设置损失函数 def training_step(self, batch): inputs, labels = batch outputs = self.module(inputs) loss = F.cross_entropy(outputs, labels) return loss # 设置问题配置 cls_config = Config(type='darts', unroll_steps=1, log_step=100) # Classifier问题类实例化 cls_prob = Classifier(name='classifier', module=cls_module, optimizer=cls_optimizer, train_data_loader=cls_data_loader, config=cls_config)

问题之间的交互

在GML/MLO中,每个问题通常需要访问其他问题的模块来定义其损失函数。这可以通过使用name属性来实现,如下所示:

class HPO(ImplicitProblem): def training_step(self, batch): # 设置超参数优化损失 ... # HPO问题类实例化 hpo_prob = HPO(name='hpo', module=...) class Classifier(ImplicitProblem): def training_step(self, batch): inputs, labels = batch outputs = self.module(inputs) loss = F.cross_entropy(outputs, labels) """ 通过名称'hpo'访问来自另一个问题HPO的权重衰减超参数 """ weight_decay = self.hpo() reg_loss = weight_decay * sum( [p.norm().pow(2) for p in self.module.parameters()] ) return loss + reg_loss cls_prob = Classifier(name='classifier', module=...)

Engine

基础

Engine类处理问题之间的层级依赖关系。在GML/MLO中,有两种类型的依赖关系:上到下(u2l)和下到上(l2u)。这两种类型的依赖关系都可以用Python字典定义,其中键是起始节点,值是目标节点列表。

from betty import Engine from betty.configs import EngineConfig # 设置所有涉及的问题 problems = [cls_prob, hpo_prob] # 设置上到下和下到上的依赖关系 u2l = {hpo_prob: [cls_prob]} l2u = {cls_prob: [hpo_prob]} dependencies = {'u2l': u2l, 'l2u': l2u} # 设置Engine配置 engine_config = EngineConfig(train_iters=10000, valid_step=100) # 实例化Engine类 engine = Engine(problems=problems, dependencies=dependencies, config=engine_config) # 执行多层优化 engine.run()

由于Engine管理整个GML/MLO程序,您还可以在其中执行全局验证阶段。构成GML/MLO程序的所有问题都可以通过它们的名称再次访问。

class HPOEngine(Engine): # 设置全局验证 @torch.no_grad() def validation(self): loss = 0 for inputs, labels in test_loader: outputs = self.classifer(inputs) loss += F.cross_entropy(outputs, targets) # 返回的字典将在每次验证后自动记录 return {'loss': loss} ... engine = HPOEngine(problems=problems, dependencies=dependencies, config=engine_config) engine.run()

一旦我们分别使用Problem类和Engine类定义了所有优化问题及其之间的层次依赖关系,Betty将处理GML/MLO的所有复杂内部机制,如梯度计算和优化执行顺序。有关更多详细信息和高级功能,用户可以查看我们的文档教程

祝您多层次优化编程愉快!

应用

我们提供了几个GML/MLO应用的参考实现,包括:

虽然上述每个示例传统上都有不同的实现风格,但请注意,由于Betty的存在,我们的实现共享相同的代码结构。更多示例正在开发中!

<p align="center"> <img src="https://yellow-cdn.veclightyear.com/0a4dffa0/b9d1adf4-69fc-4026-b7fd-c7a1cc227b35.png" alt="" width="100%" align="top"> </p>

特性

梯度近似方法

训练

  • 梯度累积
  • FP16/BF16训练
  • 分布式数据并行训练
  • 梯度裁剪

日志记录

贡献

我们欢迎社区的贡献!请查看我们的贡献指南,了解如何为Betty做出贡献的详细信息。

引用

如果您在研究中使用Betty,请引用我们的论文,使用以下Bibtex条目。

@inproceedings{
choe2023betty,
title={Betty: An Automatic Differentiation Library for Multilevel Optimization},
author={Sang Keun Choe and Willie Neiswanger and Pengtao Xie and Eric Xing},
booktitle={The Eleventh International Conference on Learning Representations },
year={2023},
url={https://openreview.net/forum?id=LV_MeMS38Q9}
}

许可证

Betty 使用 Apache 2.0 许可证

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多