피드로 돌아가기
Convert Transformers to ONNX with Hugging Face Optimum
Hugging Face BlogHugging Face Blog
AI/ML

Hugging Face가 Transformers 모델을 ONNX로 변환하는 3가지 방법을 제시해 저수준 torch.onnx API부터 고수준 Optimum까지 복잡도와 사용성의 트레이드오프 해결

Convert Transformers to ONNX with Hugging Face Optimum

2022년 6월 22일6intermediate

Context

Hugging Face Transformers 모델을 ONNX 형식으로 변환하는 과정에서 개발자는 저수준 API 사용 시 input_names, dynamic_axes 등 복잡한 매개변수를 직접 관리해야 했다. 모델 변환 방식의 선택지가 다양하지만 각 방법의 복잡도와 유연성 차이를 명확하게 이해하고 비교할 필요가 있었다.

Technical Solution

  • torch.onnx (저수준): torch.onnx.export() 메서드로 모델 체크포인트를 ONNX 그래프로 변환하되, input_names=['input_ids', 'attention_mask'], output_names=['logits'], dynamic_axes, opset_version=13 등을 명시적으로 제공
  • transformers.onnx (중간수준): FeaturesManager.check_supported_model_or_raise()로 모델 지원 여부 확인 후 configuration 객체 기반 변환으로 dynamic_axes 같은 복잡한 설정 자동화
  • Optimum (고수준): ORTModelForSequenceClassification.from_pretrained(model_id, from_transformers=True)로 한 줄 코드만으로 transformers.onnx 패키지를 내부적으로 활용해 변환 및 즉시 추론 실행 가능
  • 의존성 관리: torch.onnx는 pip install transformers torch, transformers.onnx는 pip install transformers[onnx] torch, Optimum은 pip install optimum[onnxruntime] 으로 설치 요구사항 단계적 증가
  • 사용 사례: distilbert-base-uncased-finetuned-sst-2-english 모델의 text-classification 작업에서 세 방식 모두 동일한 변환 결과 생성

Key Takeaway

Transformers 모델 ONNX 변환에서 저수준 API는 세밀한 제어를, 고수준 API는 사용성과 즉시 추론 실행을 제공하므로, 프로덕션 배포 목표가 있으면 Optimum을 선택하고 커스텀 설정이 필요하면 torch.onnx를 선택하는 명확한 기준이 존재한다.


Hugging Face 사전학습 모델을 프로덕션 추론 환경에 배포해야 하는 엔지니어라면 Optimum의 ORTModelForSequenceClassification.from_pretrained(model_id, from_transformers=True) 패턴을 사용해 모델 변환과 파이프라인 통합을 단일 단계로 완료할 수 있고, 특정 opset 버전이나 동적 축 설정이 필요한 경우만 transformers.onnx나 torch.onnx로 하향식 제어를 수행하면 된다.

원문 읽기