跳到内容

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 架构像一只蝴蝶,有时我们也将其称为“蝴蝶架构”。

img

ECD 灵活处理多种不同的输入和输出数据类型组合,使该工具非常适合许多不同的应用场景。

gif

查看示例,了解如何在多种不同的应用中使用 Ludwig。

使用 Ray 进行分布式训练、数据处理和超参数搜索

Ludwig on Ray 使用户能够将训练过程从在本地笔记本电脑上运行扩展到在云端 GPU 实例上运行,再到在数百台机器上并行扩展,所有这些都无需更改一行代码。

img

通过与 Ray 集成,Ludwig 能够提供一种进行分布式训练的统一方式

  • Ray 通过其集群启动器使您能够通过一个命令配置机器集群。
  • Horovod on Ray 使您无需在环境中配置 MPI 即可进行分布式训练。
  • Dask on Ray 使您能够处理无法在单台机器内存中容纳的大型数据集。
  • Ray Tune 使您能够轻松地在多台机器上并行运行分布式超参数搜索。