什么是 Ludwig?
引言¶
Ludwig 是一个开源的声明式机器学习框架,通过简单灵活的数据驱动配置系统,可以轻松定义深度学习流水线。Ludwig 适用于各种 AI 任务,并由 Linux Foundation AI & Data 托管。
只需几条简短的命令,Ludwig 即可将最先进的表格、自然语言处理和计算机视觉模型应用于现有数据并投入生产。
ludwig train --config config.yaml --dataset data.csv
ludwig predict --model_path results/experiment_run/model --dataset test.csv
from ludwig.api import LudwigModel
import pandas as pd
# train a model
config = {
"input_features": [
{
"name": "sepal_length_cm",
"type": "number"
},
{
"name": "sepal_width_cm",
"type": "number"
},
{
"name": "petal_length_cm",
"type": "number"
},
{
"name": "petal_width_cm",
"type": "number"
}
],
"output_features": [
{
"name": "class",
"type": "category"
}
]
}
model = LudwigModel(config)
data = pd.read_csv("data.csv")
train_stats, _, model_dir = model.train(data)
# or load a model
model = LudwigModel.load(model_dir)
# obtain predictions
predictions = model.predict(data)
sepal_length_cm,sepal_width_cm,petal_length_cm,petal_width_cm
4.9,3.0,1.4,0.2
4.7,3.2,1.3,0.2
4.6,3.1,1.5,0.2
5.0,3.6,1.4,0.2
5.4,3.9,1.7,0.4
4.6,3.4,1.4,0.3
5.0,3.4,1.5,0.2
4.4,2.9,1.4,0.2
4.9,3.1,1.5,0.1
input_features:
- name: sepal_length_cm
type: number
- name: sepal_width_cm
type: number
- name: petal_length_cm
type: number
- name: petal_width_cm
type: number
output_features:
- name: class
type: category
Ludwig 通过其声明式方法来构建机器学习流水线,从而实现这一目标。无需为模型、训练循环、预处理、后处理、评估和超参数优化编写代码,你只需使用简单的 YAML 配置声明数据模式即可。
input_features:
- name: title
type: text
- name: author
type: category
- name: description
type: text
- name: cover
type: image
output_features:
- name: genre
type: set
- name: price
type: number
从上面这样一个简单的配置开始,模型架构、训练循环、超参数搜索和后端基础设施的所有方面都可以作为附加字段在声明式配置中修改,以定制流水线来满足你的需求。
input_features:
- name: title
type: text
encoder: rnn
cell: lstm
num_layers: 2
state_size: 128
preprocessing:
tokenizer: space_punct
- name: author
type: category
embedding_size: 128
preprocessing:
most_common: 10000
- name: description
type: text
encoder: bert
- name: cover
type: image
encoder: resnet
num_layers: 18
output_features:
- name: genre
type: set
- name: price
type: number
preprocessing:
normalization: zscore
trainer:
epochs: 50
batch_size: 256
optimizer:
type: adam
beat1: 0.9
learning_rate: 0.001
backend:
type: local
cache_format: parquet
hyperopt:
metric: f1
sampler: random
parameters:
title.num_layers:
lower: 1
upper: 5
training.learning_rate:
values: [0.01, 0.003, 0.001]
Ludwig 是一个单一框架,指导你完成端到端的机器学习流程;从尝试不同的训练方案、探索最先进的模型架构,到扩展到大型内存外数据集和多节点集群,最后在生产环境中部署最佳模型。
为什么选择声明式机器学习系统¶
Ludwig 的声明式机器学习方法提供了 AutoML 解决方案的简洁性,同时兼具编写自己的 PyTorch 代码的灵活性。这是通过创建一个可扩展的声明式配置来实现的,该配置为流水线的各个方面都提供了可选参数。
开箱即用的多模态、多任务学习¶
无需编写代码即可将表格数据、文本、图像甚至音频混合搭配到复杂的模型配置中。
完全可定制和可扩展¶
模型和训练过程的每个部分都可以通过简单的配置接口进行控制。
最少的机器学习样板代码¶
深度学习的工程复杂性已开箱即用,使研究科学家能够专注于在最高抽象级别构建模型。
新注册的 torch.nn.Module
模型的数据预处理、超参数优化、设备管理和分布式训练完全免费提供。
为什么选择 Ludwig¶
Ludwig 的声明式编程模型支持以下关键功能:
高度可配置的数据预处理、建模和指标¶
模型架构、训练循环、超参数搜索和后端基础设施的所有方面都可以作为附加字段在声明式配置中修改,以定制流水线来满足你的需求。
有关可配置内容的详细信息,请查看 Ludwig 配置文档。
与任何结构化数据源集成¶
如果数据可以读入 SQL 表或 Pandas DataFrame,Ludwig 就可以在其上训练模型。
超参数优化¶
使用 Ray Tune 在本地或跨多个 Worker 并行执行各种超参数搜索算法。
丰富的模型导出和跟踪功能¶
使用 Tensorboard、Comet ML、Weights & Biases 和 MLflow 等工具自动跟踪所有试验和指标。
自动扩展训练至多 GPU、多节点集群¶
无需代码或配置更改,即可从本地机器训练扩展到云端。
轻松构建你的基准测试¶
创建一个最先进的基线并将其与新模型进行比较,只需简单的配置更改。
轻松将新架构应用于多个问题和数据集¶
将新模型应用于 Ludwig 支持的广泛任务和数据集。Ludwig 包含一个对所有用户开放的完整的基准测试工具包,只需简单配置即可在多个数据集上使用多个模型运行实验。
最先进模型的低代码接口,包括预训练的 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 支持将模型导出为高效的 Torschscript bundles。
ludwig export_torchscript -–model_path=/path/to/model