철학

철학 (Philosophy)

Transformers는 PyTorch 우선(PyTorch-first) 라이브러리입니다. 논문에 충실하면서도 사용하기 쉽고, 해킹하기 쉬운 모델을 제공해요.

출처: 문서

본문

예시, 시각화, 타임라인을 담은 더 길고 심층적인 글은 여기에서 우리의 표준 참고 자료로 확인할 수 있습니다.

[!NOTE] 우리의 철학은 실무를 통해 진화합니다. 아래는 현재 안정된 원칙들이에요.

이 라이브러리가 필요한 사람 (Who this library is for)

  • 모델 아키텍처를 탐구하거나 확장하는 연구자·교육자
  • 모델을 미세 조정하거나 평가하거나 서빙하는 실무자
  • 예측 가능한 API로 "그냥 동작하는" 사전 훈련 모델을 원하는 엔지니어

무엇을 기대할 수 있는지 (What you can expect)

  • 각 모델에는 세 가지 핵심 클래스가 필요합니다: 설정(configuration), 모델(models), 그리고 전처리(preprocessing) 클래스입니다. 토크나이저(Tokenizers)는 NLP를, 이미지 프로세서(image processors)는 이미지를, 비디오 프로세서(video processors)는 비디오를, 특징 추출기(feature extractors)는 오디오를, 프로세서(processors)는 멀티모달 입력을 처리합니다.

  • 이 모든 클래스는 공통된 from_pretrained() 메서드로 사전 훈련된 인스턴스에서 간단하고 통일된 방식으로 초기화할 수 있어요. 이 메서드는 필요한 경우 다운로드하고, 캐시하고, 관련 클래스 인스턴스와 연결 데이터(설정의 하이퍼파라미터, 토크나이저의 어휘, 프로세서의 매개변수, 모델의 가중치)를 Hugging Face Hub에서 제공하는 사전 훈련 체크포인트나 직접 저장한 체크포인트에서 로드합니다.

  • 이 세 가지 기본 클래스 위에, 라이브러리는 두 개의 API를 제공합니다: 주어진 작업에서 모델을 추론에 빠르게 사용하게 해주는 pipeline()과, PyTorch 모델을 빠르게 훈련·미세 조정하게 해주는 Trainer입니다.

핵심 원칙 (Core tenets)

아래 원칙들은 시간이 지나며 굳어졌고, 우리의 새 철학 블로그 포스트에 자세히 나와 있습니다. PR과 기여를 검토할 때 메인테이너 결정을 이끄는 기준이에요.

  • 진실의 원천 (Source of Truth). 구현은 공식 결과와 의도된 동작에 충실해야 합니다.
  • 모델 하나, 파일 하나 (One Model, One File). 핵심 추론·훈련 로직이 사용자가 읽는 모델 파일에서 위에서 아래로 보여야 해요.
  • 코드가 곧 제품 (Code is the Product). 읽기와 diff에 최적화합니다. 영리한 간접화(clever indirection)보다 명시적인 이름을 선호해요.
  • 추상화보다 표준화 (Standardize, Don't Abstract). 모델 특정 동작은 모델에 두세요. 공유 인터페이스는 일반적인 인프라에만 사용합니다.
  • DRY* (사용자에게 도움이 될 때는 반복하라). 최종 사용자 모델링 파일은 자체 포함(self-contained) 상태를 유지합니다. 인프라는 분리돼요.
  • 최소 사용자 API (Minimal User API). 코드 경로가 적고, kwargs가 예측 가능하며, 메서드가 안정적입니다.
  • 하위 호환성 (Backwards Compatibility). 공개 표면(public surface)은 깨지지 않아야 합니다. 오래된 Hub 아티팩트는 계속 동작해야 해요.
  • 일관된 공개 표면 (Consistent Public Surface). 이름, 출력, 선택적 진단이 정렬되어 있고 테스트됩니다.

주요 클래스 (Main classes)

  • 설정 클래스 (Configuration classes)는 모델을 만드는 데 필요한 하이퍼파라미터를 저장합니다. 여기에는 레이어 수와 히든 크기가 포함돼요. 항상 직접 인스턴스화할 필요는 없습니다. 사전 훈련 모델을 수정 없이 사용할 때는 모델을 만들면 설정이 자동으로 인스턴스화됩니다.

  • **모델 클래스 (Model classes)**는 적어도 하나의 PreTrainedModel로 감싸진 PyTorch 모델(torch.nn.Module)입니다.

  • 모듈식 transformer (Modular transformers). 기여자는 기존 구성요소의 재사용을 선언하는 작은 modular_*.py 샤드(shard)를 작성합니다. 라이브러리는 이를 자동으로 사용자가 읽고 디버깅하는 보이는 modeling_*.py 파일로 확장해요. 메인테이너는 샤드를 검토하고, 사용자는 확장된 파일을 해킹합니다. 이렇게 하면 템플릿 코드 드리프트(boilerplate drift) 없이 "모델 하나, 파일 하나"를 지킬 수 있어요. 자세한 내용은 기여 문서를 참고하세요.

  • **전처리 클래스 (Preprocessing classes)**는 원시 데이터를 모델이 받아들이는 형식으로 변환합니다. 토크나이저(tokenizer)는 각 모델의 어휘를 저장하고, 문자열을 토큰 임베딩 인덱스 목록으로 인코딩·디코딩하는 메서드를 제공해요. 이미지 프로세서(image processors)는 비전 입력을, 비디오 프로세서는 비디오 입력을, 특징 추출기(feature extractors)는 오디오 입력을, 프로세서(processors)는 멀티모달 입력을 전처리합니다.

이 모든 클래스는 사전 훈련된 인스턴스에서 인스턴스화하거나, 로컬에 저장하거나, Hub에 공유할 수 있게 해주는 세 가지 메서드가 있습니다:

  • from_pretrained()은 라이브러리가 제공하는(지원되는 모델은 Model Hub에서 확인) 또는 사용자가 로컬(또는 서버)에 저장한 사전 훈련 버전에서 모델, 설정, 전처리 클래스를 인스턴스화하게 해줍니다.
  • save_pretrained()은 모델, 설정, 전처리 클래스를 로컬에 저장해 from_pretrained()으로 다시 불러올 수 있게 합니다.
  • push_to_hub()은 모델, 설정, 전처리 클래스를 Hub에 공유해 누구나 쉽게 접근할 수 있게 해줘요.

더 알아보기 (Learn more)