Ludwig
为规模化和效率而构建的声明式深度学习框架。
重要提示
Ludwig 社区已迁移至 Discord -- 欢迎加入我们!¶
📖 什么是 Ludwig?¶
Ludwig 是一个低代码框架,用于构建定制化的 AI 模型,例如 LLM 和其他深度神经网络。
主要特性
- 🛠 轻松构建定制模型:只需一个声明式的 YAML 配置文件即可训练您的数据上的最先进 LLM。支持多任务和多模态学习。全面的配置验证可检测无效参数组合并防止运行时错误。
- ⚡ 针对规模化和效率优化:自动批量大小选择、分布式训练(DDP、DeepSpeed)、参数高效微调(PEFT)、4 位量化 (QLoRA) 以及大于内存的数据集。
- 📐 专家级控制:对您的模型拥有完全控制权,细至激活函数。支持超参数优化、可解释性和丰富的指标可视化。
- 🧱 模块化和可扩展:只需修改配置文件中的少量参数即可尝试不同的模型架构、任务、特征和模态。将其视为深度学习的构建块。
- 🚢 为生产环境而设计:预构建的 Docker 容器,原生支持在 Kubernetes 上使用 Ray 运行,将模型导出到 Torchscript 和 Triton,一条命令上传到 HuggingFace。
Ludwig 由 Linux Foundation AI & Data 托管。
[!重要提示] 我们的社区已迁移至 Discord -- 欢迎加入我们!
💾 安装¶
从 PyPi 安装。请注意 Ludwig 需要 Python 3.8+。
pip install ludwig
或者安装所有可选依赖项
pip install ludwig[full]
🏃 快速入门¶
大语言模型微调¶
让我们微调预训练的 LLaMA-2-7b 大语言模型,使其能够像聊天机器人一样遵循指令(“指令微调”)。
先决条件¶
- HuggingFace API 令牌
- 访问 Llama2-7b-hf 的审批
- 至少有 12 GiB 显存的 GPU(在我们的测试中,我们使用了 Nvidia T4)
运行¶
我们将使用 Stanford Alpaca 数据集,它将被格式化为一个看起来像这样的表格文件
instruction | input | output |
---|---|---|
给出保持健康的三个建议。 | 1.饮食均衡,确保包含... | |
将下面给出的项目按顺序排列... | 蛋糕,我,吃 | 我吃蛋糕。 |
写一个关于著名人物的介绍段落... | Michelle Obama | Michelle Obama 是一位鼓舞人心的女性,她... |
... | ... | ... |
创建一个名为 model.yaml
的 YAML 配置文件,内容如下
model_type: llm
base_model: meta-llama/Llama-2-7b-hf
quantization:
bits: 4
adapter:
type: lora
prompt:
template: |
### Instruction:
{instruction}
### Input:
{input}
### Response:
input_features:
- name: prompt
type: text
output_features:
- name: output
type: text
trainer:
type: finetune
learning_rate: 0.0001
batch_size: 1
gradient_accumulation_steps: 16
epochs: 3
learning_rate_scheduler:
warmup_fraction: 0.01
preprocessing:
sample_ratio: 0.1
现在我们来训练模型
ludwig train --config model.yaml --dataset "ludwig://alpaca"
监督式机器学习¶
让我们构建一个神经网络,预测 烂番茄 上某位影评人的评论是正面还是负面。
我们的数据集将是一个 CSV 文件,看起来像这样
movie_title | content_rating | genres | runtime | top_critic | review_content | recommended |
---|---|---|---|---|---|---|
Deliver Us from Evil | R | 动作与冒险,恐怖 | 117.0 | TRUE | 导演 Scott Derrickson 和他的合著者 Paul Harris Boardman 带来了一部平庸的程序化电影,惊悚感不强。 | 0 |
Barbara | PG-13 | 艺术影院与国际片,剧情 | 105.0 | FALSE | 不知怎的,在这激动人心的叙事中,芭芭拉设法坚守了她的原则、人性和勇气,并努力拯救一个共产党员试图摧毁其生命的异议少女。 | 1 |
Horrible Bosses | R | 喜剧 | 98.0 | FALSE | 这些老板既无法为谋杀辩解,也无法留下持久的喜剧回忆,这致命地损害了一部本可以很棒的闹剧,最终却只是平庸。 | 0 |
... | ... | ... | ... | ... | ... | ... |
从此处下载数据集样本。
wget https://ludwig.net.cn/latest/data/rotten_tomatoes.csv
接下来创建一个名为 model.yaml
的 YAML 配置文件,内容如下
input_features:
- name: genres
type: set
preprocessing:
tokenizer: comma
- name: content_rating
type: category
- name: top_critic
type: binary
- name: runtime
type: number
- name: review_content
type: text
encoder:
type: embed
output_features:
- name: recommended
type: binary
就这样!现在我们来训练模型
ludwig train --config model.yaml --dataset rotten_tomatoes.csv
建模愉快
尝试将 Ludwig 应用到您的数据。如果您有任何问题,请联系我们。
❓ 为何选择 Ludwig¶
- 最小化的机器学习样板代码
Ludwig 开箱即用地处理了机器学习的工程复杂性,使研究人员能够专注于在最高抽象级别构建模型。数据预处理、超参数优化、设备管理以及针对 torch.nn.Module
模型的分布式训练完全免费提供。
- 轻松构建您的基准
创建最先进的基准并将其与新模型进行比较只需简单的配置更改。
- 轻松将新架构应用于多个问题和数据集
将新模型应用于 Ludwig 支持的广泛任务和数据集。Ludwig 包含一个任何用户都可以访问的完整的基准测试工具包,只需一个简单的配置即可在多个数据集上使用多个模型运行实验。
- 高度可配置的数据预处理、建模和指标
模型架构、训练循环、超参数搜索和后端基础设施的任何方面都可以作为声明性配置中的附加字段进行修改,以定制管道来满足您的要求。有关可配置内容的详细信息,请查看 Ludwig 配置文档。
- 开箱即用的多模态、多任务学习
无需编写代码即可将表格数据、文本、图像甚至音频混合搭配到复杂的模型配置中。
- 丰富的模型导出和跟踪功能
使用 Tensorboard、Comet ML、Weights & Biases、MLFlow 和 Aim Stack 等工具自动跟踪所有实验和指标。
- 自动将训练扩展到多 GPU、多节点集群
无需更改代码即可从本地机器训练转移到云端。
- 用于最先进模型的低代码接口,包括预训练的 Huggingface Transformers
Ludwig 还原生集成了预训练模型,例如 Huggingface Transformers 中提供的模型。用户可以从庞大的最先进预训练 PyTorch 模型集合中选择使用,而无需编写任何代码。例如,使用 Ludwig 训练一个基于 BERT 的情感分析模型就像这样简单
ludwig train --dataset sst5 --config_str "{input_features: [{name: sentence, type: text, encoder: bert}], output_features: [{name: label, type: category}]}"
- AutoML 的低代码接口
Ludwig AutoML 允许用户只需提供数据集、目标列和时间预算即可获得训练好的模型。
auto_train_results = ludwig.automl.auto_train(dataset=my_dataset_df, target=target_column_name, time_limit_s=7200)
- 易于生产部署
Ludwig 使深度学习模型易于部署,包括在 GPU 上。为您的训练好的 Ludwig 模型启动一个 REST API。
ludwig serve --model_path=/path/to/model
Ludwig 支持将模型导出为高效的 Torchscript 包。
ludwig export_torchscript -–model_path=/path/to/model
📚 教程¶
🔬 示例用例¶
- 命名实体识别标注
- 自然语言理解
- 机器翻译
- 通过 seq2seq 进行闲聊对话建模
- 情感分析
- 使用 Siamese Networks 进行一次学习
- 视觉问答
- 口语数字语音识别
- 说话人确认
- 二分类 (Titanic)
- 时间序列预测
- 时间序列预测 (天气)
- 电影评分预测
- 多标签分类
- 多任务学习
- 简单回归:燃油效率预测
- 欺诈检测
💡 更多信息¶
阅读我们关于 Ludwig、声明式机器学习 和 Ludwig 的最先进基准测试的出版物。
了解更多关于 Ludwig 工作原理、如何入门,并学习更多示例。
如果您有兴趣贡献,有疑问、意见或想法分享,或者您只是想了解最新动态,请考虑加入我们的社区 Discord 并关注我们的 X!
🤝 加入社区与我们共建 Ludwig¶
Ludwig 是一个积极维护的开源项目,依赖于像您一样的社区成员的贡献。考虑加入 Ludwig 贡献者活跃群体,使 Ludwig 成为一个对所有人来说更易于访问且功能更丰富的框架!