Redis 다중 노드 학습

Driverless AI의 Redis 다중 노드 학습은 동시에 여러 실험을 실행할 때 사용할 수 있습니다. 개별 실험이 끝날 때까지 기다릴 필요 없이 to run and complete many experiments simultaneously in a short amount of time 해야 하는 상황에서 효과적 입니다.

Redis 다중노드 학습의 이해

Redis 다중 노드 학습은 시스템(작업자 노드)을 사용하여 기본 서버 노드 프로세스 실험을 지원하는 부하 분산 기술을 사용합니다. 이러한 시스템은 CPU로만 이루어지거나 CPU + GPU으로 구성될 수 있으며 이에 따라 실험이 배포됩니다.

Multinode Training

다중 노드 설정 내 작업(실험)은 queue 로 정렬됩니다. 사용 가능한 프로세서가 없을 때 작업은 이 대기열에 남아 있습니다. 작업자의 프로세서를 사용할 수 있게 되면 작업 대기열 서비스에 새 작업을 할당하도록 요청합니다. 기본적으로 각 작업자 노드는 한 번에 두 개의 작업을 처리합니다(config.toml 파일에서 worker_remote_processors 옵션으로 구성). 각 작업자는 동시에 여러 작업을 처리할 수 있지만, 두 작업자는 동일한 실험을 동시에 처리할 수 없습니다. 메시징 및 데이터 교환 서비스도 구현되어 작업자가 주 서버 노드와 효과적으로 통신할 수 있습니다.

Notes:

  • Driverless AI의 Redis 다중 노드 학습은 현재 미리보기 단계에 있습니다. 다중 노드 구성에 관심이 있는 경우 support@h2o.ai로 문의하시기 바랍니다.

  • Redis 멀티 노드 학습에서는 여러 작업자에게 데이터를 전송해야 합니다. 예를 들어, 원격 작업자 노드에서 실험이 예정되어 있는 경우 사용 중인 데이터 세트를 MinIo 서비스를 사용하여 작업자 시스템에 복사해야 합니다. 실험은 전송되는 객체의 크기에 따라 초기화가 더 오래 걸릴 수 있습니다.

  • 각 작업자 노드가 처리하는 작업 수는 config.toml 파일의 worker_remote_processors 옵션으로 제어합니다.

  • 태스크는 최적의 작업자에게 배포되지 않습니다. 작업자는 선입 선출(FIFO) 기반으로 큐의 태스크를 사용합니다.

  • 단일 실험은 전적으로 하나의 시스템(또는 노드)에서 실행됩니다. 이러한 이유로 많은 상용 하드웨어를 사용하는 것은 다중 노드의 상태에서 유용하지 않습니다.

  • Driverless AI의 대기에 대한 자세한 내용은 Driverless AI의 실험 큐잉 을 참조하십시오.

요구 사항

Redis 다중 노드 설정의 예

다음 예에서는 bashtar 배포를 사용하여 AWS EC2 인스턴스에서 2-노드 Redis 다중 노드 Driverless AI 클러스터를 구성합니다. 이 예를 여러 작업자 노드로 확장할 수 있습니다. 이 예는 AWS의 동일한 VPC 내에서 두 개의 EC2 인스턴스(Ubuntu 16.04)를 스핀 업한 것으로 가정합니다.

VPC 설정

VPC 설정에서 Redis용 포트 6379 및 MinIO 용 9000에서 TCP 연결을 수신하도록 인바운드 규칙을 활성화합니다.

Driverless AI의 기본적인 설치

서버 노드에 Driverless AI를 설치합니다. Linux 시스템에서 Native 설치를 수행하는 방법에 대한 정보는 다음 문서 중 하나를 참조하십시오.

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에 로그인합니다. Resources > System Info 를 클릭하여 작업자를 1명만 사용하는 경우, 작업자 수가 《2》 인지 확인합니다. (기본적으로 각 작업자는 한 번에 두 개의 작업을 처리합니다. 이는 config.toml 파일에서 worker_remote_processors 옵션으로 설정할 수 있습니다.)

System info

구성 속성에 관한 설명

  • worker_mode: 장기 실행 태스크를 예약하는 방법을 지정합니다. 사용 가능한 옵션은 다음과 같습니다.

    • multiprocessing: 현재 프로세스를 즉시 포크합니다.

    • singlenode: Redis를 통해 태스크를 공유하며, 작업자가 실행되어야 합니다.

    • Multinode: singlenode 와 동일합니다. Also shares the data through 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입니다.