Accelerate documentation

실행 과정

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.15.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

실행 과정

분산 학습 시스템에서 작업할 때, 프로세스가 GPU 간에 어떻게 그리고 언제 실행되는지를 관리하는 것이 중요합니다. 일부 프로세스는 다른 프로세스보다 더 빠르게 완료되며, 다른 프로세스가 아직 완료되지 않은 경우 시작해서는 안 되는 프로세스도 있습니다. Accelerate는 모든 프로세스가 모든 장치 간에 동기화 상태를 유지하도록 프로세스 실행 시점을 조정하는 도구를 제공합니다.

이 튜토리얼에서는 프로세스를 단일 머신에서만 실행하는 방법과 모든 프로세스가 특정 지점에 도달할 때까지 실행을 지연시키는 방법을 배웁니다.

프로세스 하나에서 실행

특정 코드는 주어진 머신에서 한 번만 실행되어야 하는 경우가 있습니다. 예를 들어, 로그 문구를 출력하거나 로컬 메인 프로세스에서 진행률 바를 하나만 표시하는 경우입니다.

statements
함수

한 번만 실행되어야 하는 코드를 나타내기 위해 accelerator.is_local_main_process를 사용해야 합니다.

from tqdm.auto import tqdm

progress_bar = tqdm(range(args.max_train_steps), disable=not accelerator.is_local_main_process)

accelerator.is_local_main_process로 문장을 감싸는 것도 가능합니다.

accelerator.is_local_main_process로 감싸지 않은 독립적인 print 문장의 경우, print를 Accelerate의 print() 메서드로 교체하여 프로세스당 한 번만 출력하도록 하세요.

if accelerator.is_local_main_process:
    print("Accelerate is the best")

Accelerate가 기계의 수와 관계없이 모든 프로세스에서 코드를 한 번만 실행하도록 지시할 수도 있습니다. 이는 최종 모델을 Hub에 업로드할 때 유용합니다.

statement
함수

모든 프로세스에서 한 번만 실행되어야 하는 코드를 나타내기 위해 accelerator.is_main_process를 사용해야 합니다.

if accelerator.is_main_process:
    repo.push_to_hub()

특정 프로세스에서 실행

Accelerate는 특정 프로세스 또는 로컬 프로세스 인덱스에서만 실행되어야 하는 함수를 실행하는 데에도 도움을 줄 수 있습니다.

특정 프로세스
로컬 프로세스

on_process() 메서드를 사용하여 함수를 실행할 프로세스 인덱스를 지정합니다.

@accelerator.on_process(process_index=0)
def do_my_thing():
    "Something done on process index 0"
    do_thing_on_index_zero()

실행 지연

여러 GPU에서 스크립트를 동시에 실행할 때 일부 코드는 다른 코드보다 빠르게 실행될 수 있습니다. 다음 명령 집합을 실행하기 전에 모든 프로세스가 특정 지점에 도달했는지 기다려야 할 수 있습니다. 예를 들어, 모든 프로세스가 학습을 완료했는지 확인하기 전에 모델을 저장해서는 안 됩니다.

이를 위해 코드에 wait_for_everyone()를 추가합니다. 이는 먼저 완료된 모든 프로세스가 나머지 모든 프로세스가 동일한 지점에 도달할 때까지 계속 진행하는 것을 차단합니다(단일 GPU 또는 CPU에서 실행하는 경우 이 효과는 없습니다).

accelerator.wait_for_everyone()
Update on GitHub