노드 종료 유예 대비하기
    • PDF

    노드 종료 유예 대비하기

    • PDF

    Article Summary

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

    주의

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

    Node(노드)는 언제든지 중지될 수 있으며, 노드가 중지될 때 10분간 종료 유예 기간(graceful termination period)을 가질 수 있습니다. 종료 유예 기간에 학습 상태를 보존하는 조치를 취할 수 있으며, 다음과 같은 상황에 노드 종료 유예 기간을 가집니다.

    • 사용자가 유예 시간을 갖도록 설정(Graceful Termination 옵션)한 후 Run(실험)을 중지했거나 노드를 중지 중지
    • 노드가 사용할 수 있는 프로젝트의 크레딧이 모두 소진
    • 선점 가능(preemtible)한 노드로 설정되어 자원 부족으로 종료

    노드가 종료될 때는 다음과 같은 과정을 거칩니다.

    1. CLOVA NSML은 사용자에게 Slack으로 대상 Run(실험)이 중단됨을 알립니다.
    2. 실행 중인 프로세스에 종료 시그널(SIGTERM)이 전송됩니다. 노드의 상태는 종료 중인 상태(Finalizing)로 바뀝니다.
    3. 10분 정도 종료 유예 시간을 가집니다.
    4. 실험을 강제 종료(SIGKILL)합니다.

    SIGTERM 시그널은 사용자 정의 명령을 사용했을 때만 수신할 수 있습니다. 사용자 정의 명령을 사용하지 않은 노드는 종료 유예 기간 없이 바로 노드 상태가 종료된 상태(Succeeded)로 바뀝니다.

    SIGTERM 시그널이 전달되는 대상 프로세스는 사용자 프로세스와 같은 프로세스 그룹 ID(pgid)를 갖는 프로세스입니다.

    위 과정 중 종료 시그널(SIGTERM)을 프로세스가 받을 때 동작하는 핸들러를 코드에 등록하면 필요한 작업을 수행할 수 있습니다. 다음은 Python 표준 라이브러리로 SIGTERM 시그널에 대한 핸들러를 등록한 예입니다.

    def sigterm_handler(s: signal.Signals, f: types.FrameType) -> None:
      raise KeyboardInterrupt
    signal.signal(signal.SIGTERM, sigterm_handler)
    
    try:
      train(model, optimizer)  # 학습 등의 메인 프로세스
    except KeyboardInterrupt:
      # 종료 유예 기간 중에 할 것: 현재 model, optimizer 상태 저장 등
      torch.save(model, 'model.pt')
      torch.save(optimizer, optimizer.pt')
    

    학습 데이터나 모델이 크면 필요한 데이터를 저장하기에 유예 기간이 짧을 수도 있습니다. 그뿐만 아니라 시간이 충분하더라도 데이터를 저장할 때 오류가 발생할 수도 있습니다. 이를 위해 학습 상태를 주기적으로 저장할 수도 있습니다. 다만, 데이터를 저장할 때 GPU 활용률이 떨어질 수 있기 때문에 비용과 자원 활용을 고려하여 적정 저장 주기를 탐색할 필요가 있습니다. 다음은 10 회의 에포크(epoch) 주기로 데이터를 저장하는 예입니다.

    for epoch in range(epochs):
      train(model, optimizer)
      if (epoch+1) % 10 == 0:
        torch.save(model, 'model.pt')
        torch.save(optimizer, 'optimizer.pt')
    

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

    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.