Redis 多节点训练

Driverless AI 中的 Redis 多节点训练可以用来同时运行多个实验。当您需要 在较短的时间 内同时运行和完成多个实验而无需等待各个实验结束的情况下, Redis 多节点训练会很有效

了解 Redis 多节点训练

Redis 多节点训练采用了负载分布技术,利用一系列机器(工作线程节点)帮助主服务器节点处理实验。这些机器可以是 CPU 或 CPU + GPU,实验也将被相应地分配。

Multinode Training

多节点环境中的作业(实验)被整理成队列 Driverless AI 中的实验队列 . 当没有处理器可用时,作业将保留在队列中。当工作线程的处理器变为可用时,其会请求作业队列服务为其分配新作业。默认每个工作节点一次处理两个作业(使用 config.toml 文件中的 worker_remote_processors 选项配置)。每个工作线程能同时处理多个作业,但两个工作线程不能同时处理同一个实验。此外,还会执行消息和数据交换服务,以允许工作线程有效地与主服务器节点通信。

请注意

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

  • Redis 多节点训练要求将数据传输给多个不同的工作线程。例如,如果实验被调度到远程工作线程节点,则需要通过使用 Minio 服务将正在使用的数据集复制到工作线程机器。视传输对象的大小,实验的初始化会花费更长的时间。

  • 通过 config.toml 文件中的 worker_remote_processors 选项控制每个工作线程节点处理的作业数量。

  • 为了实现与工作线程的最佳配合,将不会分配任务。工作线程将按照先进先出 (FIFO) 原则消耗队列中的任务。

  • 单个实验完全在一台机器(或节点)上运行 。因此,在多节点环境中使用大量的商用级硬件并没有用。

要求

Redis 多节点设置实例

以下示例使用 bashtar 分布在 AWS EC2 实例上配置了一个双节点 Redis 多节点 Driverless AI 聚类。此示例可以扩展成多个工作线程节点。在此示例中,假设您加速了 AWS 上的同一 VPC 内的两个 EC2 实例 (Ubuntu 16.04)。

VPC 设置

在 VPC 设置中,启用入站规则,分别在端口 6379 (Redis) 和端口 9000 (MinIO) 上侦听 TCP 连接。

本机安装 Driverless AI

在服务器节点上安装 Driverless AI。关于如何在 Linux 系统本机安装的信息,请参阅以下任一文档。

编辑 Driverless AI config.toml

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

#set worker mode to multinode
worker_mode = "multinode"

# Redis settings -- set the ip address of redis server to aws instance ip
redis_ip = "<host_ip>"

# Redis settings
redis_port = 6379

# Redis settings
main_server_redis_password = "<main_server_redis_pwd>"

# Location of main server's minio server.
# Note that you can also use `local_minio_port` to specify a different port.
main_server_minio_address = "<host_ip>:9000"

启动 Driverless AI 服务器节点

cd dai-1.9.2.1-linux-x86_64
./run-dai.sh

在 EC2 实例上安装 Linux deb/rpm/tar 软件包,以创建 Driverless AI 工作线程节点。安装完成后,在 config.toml 文件中编辑以下内容。

# Redis settings, point to the dai main server's redis server ip address
redis_ip = "<dai_main_server_host_ip>"

# Redis settings
redis_port = 6379

# Redis settings, point to the dai main server's redis server password
main_server_redis_password = "<dai_main_server_host_redis_pwd>"

# Location of the dai main server's minio server.
main_server_minio_address = "<dai_main_server_host>:9000"

启动 Driverless AI 工作线程节点

cd dai-1.9.2.1-linux-x86_64
./run-dai.sh --worker

# Note that when using rpm/deb you can run the following:
sudo systemctl start dai-worker

启动工作线程节点后,使用 Driverless AI 服务器 IP 登录 Driverless Ai。点击 资源 > 系统信息,确认只使用一个工作线程的情况下工作线程的数量为 “2”。(默认情况下,每个工作线程节点一次处理两个作业,这可以通过 config.toml 文件中的 worker_remote_processors 选项配置。)

System info

配置属性说明

  • worker_mode: 指定长期任务的调度方式。可用的选项包括:

    • multiprocessing: 立即将当前进程分叉。

    • singlenode: 通过 Redis 共享任务,需要工作线程运行。

    • multinode: 与 singlenode 相同。也通过 MinIO 共享数据,允许工作线程在不同机器上运行。

  • redis_ip: Redis IP 地址。默认为 127.0.0.1。

  • redis_port: Redis 端口。默认为 6379。

  • redis_db: Redis 数据库。在 Redis 服务器上运行的每个 DAI 实例应具有唯一的整数。默认为 0。

  • main_server_redis_password: 主服务器 Redis 密码。默认为空字符串。

  • local_minio_port: MinIO 会侦听的端口。只有在当前系统为多节点主服务器时,此设置才会生效。

  • main_server_minio_address: 主服务器的 MinIO 服务器地址。默认为 127.0.0.1:9000。

  • main_server_minio_access_key_id: 主服务器的 MinIO 服务器访问密钥。

  • main_server_minio_secret_access_key: 主服务器的 MinIO 服务器密码访问密钥。

  • main_server_minio_bucket: 用于文件同步的 MinIO 存储桶名称。

  • worker_local_processors: 一次可处理的最大本地任务数量。默认为 32。

  • worker_remote_processors: 一次可处理最大远程任务数量。默认为 2。

  • redis_result_queue_polling_interval: 服务器应从 Redis 队列提取结果的频率,单位为毫秒。默认为 100。

  • main_server_minio_bucket_ping_timeout: 在主服务器 MinIO 存储桶发生故障之前工作线程应等待的秒数。默认为 30。

  • worker_healthy_response_period: 在被标记为“不正常”之前需等待工作线程响应的秒数。默认为 300。