OpenELM
OpenELM是由CarperAI开发的开源库,旨在实现代码和自然语言中语言模型的进化搜索。
OpenELM项目有以下目标:
- 发布带有相关差异模型的ELM开源版本。
- 集成开源语言模型(本地运行或在Colab上运行)和通过付费API(如OpenAI API)的封闭模型。我们希望支持具有多种计算配置的用户!
- 为进化搜索提供一系列示例环境的简单接口,让用户能够轻松地为自己的领域进行调整。
- 展示使用LLM进行进化的潜力。
**对于QDAIF:**诗歌领域目前已在主分支中实现,其他使用少样本LMX领域的实验代码目前在实验分支中
安装
pip install openelm
要使用sodarace环境,你必须先pip install swig
。
然后:
pip install openelm[sodaracer]
查看pyproject.toml以了解更多安装选项。
特性
与进化算法集成的LLM
OpenELM支持质量多样性算法MAP-Elites、CVT-MAP-Elites和Deep Grid MAP-Elites,以及简单的遗传算法基准。
进化操作符
OpenELM支持:
- 基于指令模型的提示突变
- 差异模型(专门用于代码)
- 使用语言模型的交叉
LLM支持、效率和安全性
默认情况下,OpenELM的语言模型被实例化为Langchain类,这意味着OpenELM可以支持几乎所有现有的LLM API,以及通过HuggingFace Transformers在本地GPU上运行的模型。
我们还提供可选的Nvidia Triton推理服务器支持,适用于在8个或更多GPU上需要低延迟的用例。最后,对于代码生成领域,我们提供了一个沙盒环境,包括一个由gVisor(一个在主机和容器之间引入额外屏障的容器运行时)支持的容器服务器,以及基于启发式的安全保护。
基准环境
- **Sodarace。**一个基于2D物理的机器人在各种地形上移动的模拟。这些机器人由LLM生成的Python程序创建。
- **图像生成。**OpenELM可以通过生成返回包含图像的NumPy数组的代码来进行图像进化。这作为代码生成的简单测试环境。
- **编程题。**OpenELM可用于生成编程题的多样化解决方案。这个环境支持同时对问题和解决方案进行共同进化。
- **提示。**OpenELM包含一个通用环境,适用于进化语言模型的提示,可以使用Langchain模板自定义到所需的领域。
- 我们还包括一个诗歌环境,展示了使用LLM来评估生成的创意写作文本的质量和多样性,正如最近CarperAI博客文章中描述的AI反馈质量多样性(QDAIF)。
架构
大致上,ELM由不同组件的管道组成:
Environment
类。这个类定义了如何初始化种群成员、使用所需操作符进行突变以及如何测量个体的适应度(和多样性)的机制。MAPElites
类。这个类描述了进化算法的工作原理,可以看作是环境的包装器,定义了生成个体的选择算法。MutationModel
类,负责运行LLM以实际生成新的个体。这作为LangChain API的包装器。环境预期在需要新个体时调用MutationModel
。ELM
类调用MAPElites
算法类并运行搜索。
这些类的所有选项都在configs.py
中通过数据类定义,这些数据类注册为hydra
配置,可以在运行示例脚本(如run_elm.py
)时通过命令行覆盖。
运行ELM
python run_elm.py
将使用configs.py
中列出的默认值启动ELM进化搜索。这些可以通过命令行覆盖。例如,你可以使用run_elm.py env=image_evolution
来运行图像进化环境。
沙盒
要使用代码执行沙盒,请参阅沙盒说明,了解如何在带有gVisor运行时的Docker容器中设置它的说明。
Triton
我们还提供了在Nvidia的Triton推理服务器中运行模型的代码。请参阅Triton说明开始使用
贡献
如果你想贡献或有问题,请前往CarperAI discord的#openelm频道!