멀티 노드 사용하기
    • PDF

    멀티 노드 사용하기

    • PDF

    Article Summary

    VPC 환경에서 이용 가능합니다.

    주의

    CLOVA NSML은 현재 Closed Beta로 일부 파트너사에게만 제공되어 있으며, 일반 사용자 대상 오픈 시기는 미정입니다.

    CLOVA NSML에서 Run(실험)을 생성할 때 둘 이상의 노드를 설정하여 분산 학습을 수행할 수 있습니다. 이런 형태를 멀티 노드라고 하며, 실험 단위로 구성할 수 있습니다. 실험을 생성할 때 다음과 같이 실험에 사용할 노드의 수만큼 노드 개수(VM)를 설정하면 됩니다.
    ai-clova-nsml-high-3-3_6_ko

    멀티 노드로 구성된 실험의 각 노드에는 순서대로 번호가 부여되며 이를 랭크라고 부릅니다. 번호는 0부터 1씩 증가하며 노드 환경 변수 NSML_RANK를 통해 각 노드의 랭크를 확인할 수 있습니다. 또한, 각 노드에서 현재 소속된 멀티 노드 실험이 몇 개의 노드로 구성되어 있는지 NSML_WORLD_SIZE 변수를 통해 파악할 수 있습니다.

    예를 들어, 4개의 멀티 노드를 사용하는 실험에서 NSML_WORLD_SIZE 변수의 값은 4이며, 두 번째 노드의 랭크 번호는 1입니다. 아래의 명령으로 각 노드의 랭크 번호와 멀티 노드 구성 크기를 확인할 수 있습니다.

    $ echo $NSML_RANK / $NSML_WORLD_SIZE
    

    멀티 노드로 구성된 실험의 노드는 서로 자유롭게 통신할 수 있으며, 각 노드의 호스트 이름은 노드 환경 변수 NSML_HOST_RANK{n}을 통해 파악할 수 있습니다. 만약, 위 예에서 두 번째 노드의 호스트 이름을 확인하고 싶다면 아래와 같은 명령을 실행하면 됩니다.

    $ echo $NSML_HOST_RANK1
    

    PyTorch를 사용하여 분산 학습을 할 때 torch.distributed API를 사용할 수 있습니다. 이때, 환경 변수를 사용하여 다음과 같이 초기화할 수 있습니다.

    import os
    import torch.distributed as dist
    
    dist.init_process_group(
      backend='nccl',
      init_method=f'tcp://{os.environ['NSML_HOST_RANK0']}:23456',
      world_size=int(os.environ['NSML_WORLD_SIZE']),
      rank=int(os.environ['NSML_RANK']),
    )
    

    뿐만 아니라 다음과 같이 PyTorch가 자동으로 수용하는 환경 변수를 지정할 수도 있습니다.

    export MASTER_PORT=23456
    export MASTER_ADDR="$NSML_HOST_RANK0"
    export WORLD_SIZE="$NSML_WORLD_SIZE"
    export RANK="$NSML_RANK"
    
    ...
    
    dist.init_process_group(backend='nccl')
    

    멀티 노드로 구성된 실험에서는 모든 노드가 동시에 시작되는 것이 보장되지 않습니다. 따라서 모든 노드가 준비될 때까지 작업이나 코드 실행을 기다릴 수 있도록 다음과 같은 스크립트 사용을 권장합니다.

    #!/bin/bash
    
    # 모든 노드가 통신 가능한 상태인지 확인하는 fping 패키지를 설치합니다.
    # 매번 패키지를 설치할 필요없이 개인 이미지로 저장하여 사용하면 편리합니다. 
    sudo apt-get update
    sudo apt-get install fping -y
    
    # 모든 노드가 통신 가능한 상태인지 확인합니다. 
    while ! fping $(seq $NSML_WORLD_SIZE | awk '{ print "node" $1-1 }'); do sleep 1; done
    
    # 모두 통신 가능하다면, 아래 MAIN_COMMAND를 실행하게 됩니다.
    {MAIN_COMMAND}
    

    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.