Dask 多节点训练 (Alpha)

Driverless AI 可配置为以多节点工作线程模式运行,其中每个工作线程均有 Dask CPU 工作线程和(如果工作线程有 GPU)Dask GPU 工作线程。此设置中的主节点具有 Dask 调度器。本文档介绍 Dask 训练过程以及如何对其进行配置。

在设置 Dask 多节点训练前,您必须配置 Redis Multinode training in Driverless AI.

了解 Dask 多节点训练

Driverless AI 中的 Dask 多节点训练可用于运行跨多节点聚类训练的单个实验。在您需要运行并完成 带有大量数据的单个实验大规模超参数空间搜索 的情况下,Dask 多节点训练 十分有效 。Dask 分布式 机器可仅使用 CPU 或使用 CPU + GPU ,且 Dask 实验会相应地使用资源。

请参阅 https://dask.org/,了解更多关于 Dask 多节点设计概念的信息。

请注意

  • Driverless AI 中的 Dask 多节点训练目前处于预览阶段。如果您对使用 Dask 多节点配置感兴趣,请联系 support@h2o.ai

  • Dask 多节点训练需要在几个不同的工作线程之间传输数据。例如,如果一个实验使用 Dask 聚类,则必须在需使用 XGBoost 或 Optuna 超参数搜索进行训练的聚类工作线程之间分发数据。

  • Dask 任务将根据先进先出 (FIFO) 原则调度。

  • 用户可在“专家设置”中针对每个实验启用 Dask 多节点训练。

  • 如果实验选择使用 Dask 聚类(如适用,默认设置为 true),则 单个实验可在整个多节点聚类上运行 。因此,在 Dask 多节点环境中使用大量商用级别的硬件用处不大。

  • 默认不选择 Dask 模型,因为相较于非 Dask 模型,Dask 模型处理小数据的效率较低。在 config.toml 中设置 show_warnings_preview = true,以在用户未选择 Dask 模型而系统却能使用这些模型时显示警告。

  • 更多关于 Driverless AI 中的队列信息,请参见 Driverless AI 中的实验队列.

Dask 多节点设置示例

本节提供关于对多节点聚类启用 Dask 的补充说明。目前,启用 Dask 多节点需要设置 Redis 多节点。请参阅 see,了解更多关于在 Driverless AI 中设置和启动 Redis 多节点的信息。

VPC 设置

在 VPC 设置中,启用入站规则侦听 dask_server_portdask_cuda_server_port 端口上 TCP 连接接收的信息(如果使用 GPU)。如果您希望 Dask 仪表板获取访问权限以监控 Dask 操作,则还应包含 dask_dashboard_portdask_cuda_dashboard_port``(如果使用 GPU)。若要同时使用 LightGBM Dask,则还需启用 ``lightgbm_listen_port.

编辑 Driverless AI config.toml

安装 Driverless AI 后,在 config.toml 文件中编辑以下配置选项。

# Dask settings -- set the IP address of the Dask server. Same as the IP of the main Driverless AI node, and usually same as the Redis/MinIO IP
dask_server_ip = "<host_ip>"

关于 dask_server_ip 参数,Driverless AI 将自动尝试 Redis、MinIO 和本地 IP 地址,查看是否能找到 Dask 调度器。在这种情况下,不必设置 dask_server_ip 参数。

在 EC2 系统上,如果主服务器为 http://ec2-52-71-252-183.compute-1.amazonaws.com:12345/ ,则由于 Dask 和 XGBoost(带 rabit)的操作方式,我们建议使用 nslookup-resolved IP,而非 EC2 IP。例如 nslookup ec2-52-71-252-183.compute-1.amazonaws.com 应为 10.10.4.103. 随后,Redis、MinIO 和 Dask 均在 config.toml 文件中将其用作 IP。如果未指定 dask_server_ip ,将自动从 Redis 或 MinIO 中推测其值。

工作线程节点启动后,使用 Driverless AI 服务器 IP 地址和 Dask 仪表板端口,查看 Dask 聚类状态。

Dask (CUDA) Dashboard

配置属性说明

Dask 通用设置

  • enable_dask_cluster: 指定是否在每个多节点工作线程上启用 Dask 工作线程。

  • dask_server_ip: 服务器使用的 IP 地址,用于 Dask 和 Dask CUDA 通信。

CPU 聚类 Dask 设置

  • dask_server_port: 服务器使用的端口,用于 Dask 通信。

  • dask_dashboard_port: Dask 仪表板端口,用于 Dask 诊断。

  • dask_cluster_kwargs: 设置 Dask CUDA/RAPIDS 聚类设置,用于单节点工作线程。

  • dask_scheduler_env: 设置 Dask 调度器环境。

  • dask_scheduler_options: 设置 Dask 调度器命令行选项。

  • dask_worker_env: 设置 Dask 工作线程环境变量。

  • dask_worker_options: 设置 Dask 工作线程命令行选项。

  • dask_protocol: 用于 Dask 通信的协议。

  • dask_worker_nprocs: 每个 Dask 工作线程的进程数。

  • dask_worker_nthreads: 每个 Dask 进程的线程数。

GPU CUDA 聚类 Dask 设置

  • dask_cuda_server_port: 服务器用于 Dask cuda 通信的端口。

  • dask_cuda_dashboard_port: 用于 dask_cuda 诊断的 Dask 仪表板端口。

  • dask_cuda_cluster_kwargs: 设置 Dask CUDA/RAPIDS 聚类设置,用于单节点工作线程。

  • dask_cuda_scheduler_env: 设置 Dask CUDA 调度器环境。

  • dask_cuda_scheduler_options: 设置 Dask CUDA 调度器命令行选项。

  • dask_cuda_worker_options: 设置 Dask CUDA 工作线程选项。

  • dask_cuda_worker_env: 设置 Dask CUDA 工作线程环境变量。

  • dask_cuda_protocol: 用于 dask cuda 通信的协议。

  • dask_cuda_worker_nthreads: dask_cuda 每个进程的线程数。

其他聚类 Dask 设置

  • lightgbm_listen_port: LightGBM 本地侦听端口(同时使用 Dask 和 LightGBM 时)。

示例:用户实验 Dask 设置

若要在 Dask GPU 聚类上启用 XGBoost GBM:

  1. num_gpus_for_prediction 设置为每个工作线程节点的 GPU 数量。

  2. 转至“专家设置”并在“插件”选项卡中选择 Include specific models,确保仅选择 XGBoostGBMDaskModel 模型。

请参阅 用户实验 Dask 设置,了解更多配置选项。

请注意

  • 也可将相同步骤用于多 GPU 单节点上的本地 Dask 聚类。

  • 如果有 Dask 聚类,但是只想使用工作线程节点的 GPU,则将 use_dask_cluster 设置为 False。

  • 若要将 Dask 聚类或单个 dask 节点作为单个用户使用,可在“专家设置”中将 exclusive_mode 设置为 “max”,以最大限度地使用聚类中的工作线程。

用户实验 Dask 设置

请注意

    1. 如果设置 num_gpus_for_prediction > 0,则会自动启用。

    1. 另请参阅“插件”选项卡和 “包括特定模型” 部分。

    1. 另请参阅 num_inner_hyperopt_trials_prefinal num_inner_hyperopt_trials_final。目前仅 XGBoost 完全支持。