跳到内容

云存储

Amazon S3 等云对象存储系统对于处理大型数据集或在机器集群上运行以进行分布式训练非常有用。Ludwig 通过 fsspec 提供对远程系统的开箱即用读写支持。

示例

ludwig train \
    --dataset s3://my_datasets/subdir/dataset.parquet \
    --output_directory s3://my_experiments/foo

环境设置

以下部分介绍了如何在 Ludwig 中使用您首选的远程文件系统进行读写。

Amazon S3

在您的 Docker 镜像中安装文件系统驱动程序:pip install s3fs

将您的 $HOME/.aws/credentials 文件挂载到容器中,或设置以下环境变量

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

使用 s3:// 协议引用路径。

MinIO

MinIO 使用与 s3 相同的协议,但需要额外设置一个环境变量

  • AWS_ENDPOINT_URL

Google Cloud Storage

在您的 Docker 镜像中安装文件系统驱动程序:pip install gcsfs

此处的描述生成令牌。

将令牌文件挂载到容器中,位置参考 gcsfs 文档中描述的任一位置。

使用 gs://gcs:// 协议引用路径。

Azure Storage

在您的 Docker 镜像中安装文件系统驱动程序:pip install adlfs

将您的 $HOME/.aws/credentials 文件挂载到容器中,或设置以下环境变量

  • AZURE_STORAGE_CONNECTION_STRING

更多详情请参阅 adlfs 文档

使用 az://abfs:// 协议引用路径。

附加配置

远程数据集缓存

您的输入数据集通常位于只读位置,例如共享数据湖。在这种情况下,您不会希望依赖 Ludwig 将缓存文件写入与输入数据集相同的基础目录的默认缓存行为。相反,您可以通过配置 config 中的 backend 部分,将 Ludwig 配置为写入专用的缓存目录/存储桶

backend:
  cache_dir: "s3://ludwig_cache"

单个条目将使用根据数据集校验和以及用于训练的 Ludwig config 计算出的文件名写入。

设置专用缓存的另一个好处是可以利用缓存逐出策略。例如,设置 TTL (生存时间),以便缓存的数据集在几天后自动清理。

使用不同的缓存和数据集文件系统

在某些情况下,您可能希望数据集缓存位于与输入数据集不同的文件系统或帐户中。由于这需要维护两组凭据——一组用于输入数据,一组用于缓存——Ludwig 为缓存凭据提供了额外的配置选项。

可以在 config 中明确提供凭据

backend:
  cache_dir: "s3://ludwig_cache"
  cache_credentials:
    s3:
      client_kwargs:
        aws_access_key_id: "test"
        aws_secret_access_key: "test"

或挂载到文件中以提高安全性

backend:
  cache_dir: "s3://ludwig_cache"
  cache_credentials: /home/user/.credentials.json