Redis 多节点训练

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

了解 Redis 多节点训练

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

Multinode Training

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

请注意

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

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

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

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

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

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

要求

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.10.1.2-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.10.1.2-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。