Hugging Face Accelerate 라이브러리 출시

Hugging Face는 PyTorch 사용자가 분산 학습이나 혼합 정밀도(mixed precision)를 위한 보일러플레이트 코드를 다시 작성할 필요 없이 단일 GPU, 멀티 GPU 클러스터, TPU를 포함한 다양한 하드웨어 설정에서 원본 학습 스크립트를 실행할 수 있도록 설계된 🤗 Accelerate 라이브러리를 출시했습니다.

단순화된 분산 학습 및 혼합 정밀도

Accelerate는 개발자가 디바이스 배치 및 분산 설정을 관리하는 복잡성을 제거하면서 학습 루프에 대한 완전한 제어권을 유지할 수 있도록 합니다. 표준 PyTorch 스크립트에 몇 줄의 코드만 추가하면, 사용자는 DistributedDataParallel이나 DistributedSampler를 수동으로 구현하지 않고도 단일 디바이스 설정에서 분산 환경으로 전환할 수 있습니다.

주요 이점은 다음과 같습니다:

  • 최소한의 코드 변경: 스크립트를 Accelerate로 전환하는 데는 일반적으로 학습 루프에 몇 가지 수정만 필요합니다.
  • 통합 API: 동일한 함수가 다양한 분산 설정에서 작동하므로 디바이스별 if-statements가 필요하지 않습니다.
  • 하드웨어 불가지론(Hardware Agnostic): 스크립트는 CPU, 단일 GPU, 분산 구성과 호환됩니다.

기술적 구현 및 핵심 API

Accelerate는 핵심 PyTorch 객체의 초기화 및 준비 과정을 추상화함으로써 작동합니다. 주요 인터페이스는 Accelerator 클래스입니다.

초기화

accelerator = Accelerator()는 환경을 분석하여 분산 학습 실행 유형을 결정하고 필요한 초기화를 수행합니다. 사용자는 초기화 시 cpu=True 또는 fp16=True를 전달하여 CPU 학습 또는 혼합 정밀도를 명시적으로 강제할 수 있습니다.

prepare 메서드

accelerator.prepare() 메서드는 라이브러리의 핵심 구성 요소입니다. 이 메서드는 세 가지 주요 객체 유형을 분산 환경과 호환되도록 래핑(wrap)합니다:

  • Models: 모델을 적절한 컨테이너(예: DistributedDataParallel)로 래핑하고 디바이스 배치를 관리합니다. 모델은 저장하거나 특정 메서드에 접근하기 위해 accelerator.unwrap_model(model)을 통해 가져올 수 있습니다.
  • Optimizers: 옵티마이저를 래핑하여 혼합 정밀도 연산을 처리하고 state dict의 디바이스 배치를 관리합니다.
  • DataLoaders: 데이터로더를 래핑하여 각 프로세스가 샘플러로부터 관련 인덱스만 가져오도록 보장합니다. 이는 사용자가 DistributedSampler를 수동으로 구현해야 하는 요구사항을 제거하며, 데이터로더에 제공된 모든 샘플러와 함께 작동합니다.

역전파(Backward Pass)

accelerator.backward(loss)는 혼합 정밀도 및 기타 특수 통합을 위해 필요한 단계를 포함하기 위해 표준 loss.backward()를 대체합니다.

분산 평가

Accelerate는 단일 프로세스 및 분산 평가를 모두 지원합니다. 메인 프로세스에서만 실행되어야 하는 작업의 경우, 사용자는 if accelerator.is_main_process():를 활용할 수 있습니다.

분산 평가를 위해 라이브러리는 모든 프로세스에 걸쳐 예측값과 레이블의 텐서를 수집하는 accelerator.gather()를 제공합니다. 준비된 평가 데이터로더가 프로세스 간 일관된 배치 크기를 보장하기 위해 추가 요소를 반返回할 수 있으므로, 사용자는 정확성을 보장하기 위해 수집된 결과를 원래 데이터셋 길이로 잘라내야(truncate) 합니다.

배포 및 실행

Accelerate는 다양한 하드웨어 구성에서 스크립트 실행을 단순화하기 위한 CLI 도구를 포함합니다:

  1. Configuration: accelerate config는 기본 학습 설정이 포함된 구성 파일을 생성하기 위한 설문조사를 시작합니다.
  2. Execution: accelerate launch path_to_script.py는 저장된 기본 설정을 사용하여 스크립트를 실행합니다.

Accelerate는 torch.distributed.launch와 같은 전통적인 런처를 지원하지만, 자체 CLI는 더 효율적인 경험을 제공합니다. 또한 이 런처는 SageMaker를 통해 AWS 인스턴스를 스폰(spawn)하는 기능도 지원합니다.

향후 로드맵

Hugging Face는 fairscale, deepspeed, 그리고 AWS SageMaker 전용 데이터 병렬성(data-parallelism) 및 모델 병렬성(model parallelism) 지원을 통해 Accelerate를 확장할 계획입니다."} ,

Sources