Ludwig 如何工作
配置¶
Ludwig 提供了一个富有表达力的声明式配置系统,用于用户构建其机器学习流程,例如数据预处理、模型架构设计、后端基础设施、训练循环、超参数优化等等。
input_features:
-
name: title
type: text
encoder:
type: rnn
cell: lstm
num_layers: 2
state_size: 128
preprocessing:
tokenizer: space_punct
-
name: author
type: category
encoder:
embedding_size: 128
preprocessing:
most_common: 10000
-
name: description
type: text
encoder:
type: bert
-
name: cover
type: image
encoder:
type: 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.encoder.num_layers:
lower: 1
upper: 5
training.learning_rate:
values: [0.01, 0.003, 0.001]
有关详细参考,请参阅Ludwig 配置。
数据类型抽象¶
Ludwig 中的每个特征都由特定的数据类型描述。每种数据类型都映射到一组特定的模块,用于处理该类型的预处理、编码、解码和后处理。反之亦然,每个模块(预处理器、编码器、解码器)都注册到该模块支持的一组特定的数据类型。
阅读更多关于Ludwig 支持的特征类型。
ECD 架构¶
Ludwig 的核心建模架构被称为 ECD(编码器-组合器-解码器)。多个输入特征被编码并通过组合器模型进行处理,该模型对编码后的输入进行操作以将它们组合。在输出侧,组合器模型的输出被馈送到每个输出特征的解码器,用于预测和后处理。了解更多关于 Ludwig 的组合器模型,例如 TabNet、Transformer 和 Concat(Wide and Deep learning)。
可视化来看,ECD 架构像一只蝴蝶,有时我们也将其称为“蝴蝶架构”。
ECD 灵活处理多种不同的输入和输出数据类型组合,使该工具非常适合许多不同的应用场景。
查看示例,了解如何在多种不同的应用中使用 Ludwig。
使用 Ray 进行分布式训练、数据处理和超参数搜索¶
Ludwig on Ray 使用户能够将训练过程从在本地笔记本电脑上运行扩展到在云端 GPU 实例上运行,再到在数百台机器上并行扩展,所有这些都无需更改一行代码。
通过与 Ray 集成,Ludwig 能够提供一种进行分布式训练的统一方式
- Ray 通过其集群启动器使您能够通过一个命令配置机器集群。
- Horovod on Ray 使您无需在环境中配置 MPI 即可进行分布式训练。
- Dask on Ray 使您能够处理无法在单台机器内存中容纳的大型数据集。
- Ray Tune 使您能够轻松地在多台机器上并行运行分布式超参数搜索。