Optimum 1.2 추론 릴리스, ONNX Runtime 가속 파이프라인 추가

TL;DR

Optimum 1.2는 ONNX Runtime을 사용하여 Hugging Face Transformers 파이프라인에 대한 추론 지원을 추가합니다. 이를 통해 사용자는 표준 AutoModel 클래스를 ORTModel 클래스와 교체하고, 그래프 최적화와 동적 양자화를 적용하여 원래 정확도의 99% 이상을 유지하면서 최대 2배의 지연 시간 감소를 달성할 수 있습니다.


Optimum이란?

Optimum은 가속 하드웨어에서 성능 최적화를 위한 통합 API를 제공하여 Hugging Face Transformers를 확장하는 오픈소스 라이브러리입니다. 가속 학습, 양자화, 그래프 최적화, 그리고 이제 추론을 위한 도구를 제공하며, Graphcore IPU, Habana Gaudi, ONNX Runtime과 같은 하드웨어를 지원합니다.


Optimum 1.2의 새로운 추론 및 파이프라인 기능

  • API 호환성ORTModelForXxx 클래스는 AutoModelForXxx의 바로 대체 가능한 클래스입니다. 예시:
    from transformers import AutoTokenizer, pipeline
    from optimum.onnxruntime import ORTModelForQuestionAnswering
    
    model = ORTModelForQuestionAnswering.from_pretrained("optimum/roberta-base-squad2")
    tokenizer = AutoTokenizer.from_pretrained("deepset/roberta-base-squad2")
    qa = pipeline("question-answering", model=model, tokenizer=tokenizer)
    
  • ONNX Runtime 통합 – 모델이 ONNX로 내보내지고 ONNX Runtime으로 실행되어 연산자 융합, 상수 폴딩, 하드웨어 전용 커널을 활용합니다.
  • 최적화 및 양자화ORTOptimizer는 그래프 수준 최적화를 적용하고, ORTQuantizer는 동적 양자화(예: AVX‑512 VNNI)를 수행하여 모델 크기를 줄이고 지연 시간을 개선합니다.
  • Hub 호환성 – 최적화된 체크포인트를 Hugging Face Hub에 푸시하거나 풀 수 있어 가속 모델을 커뮤니티와 공유할 수 있습니다.
  • 파이프라인 안전 레이어optimum.pipelines.pipeline은 작업‑모델 호환성을 검증하고 지원되지 않는 구성에 대해 오류를 발생시킵니다.

엔드‑투‑엔드 튜토리얼: 질문‑응답을 위한 RoBERTa 가속

블로그 게시물에서는 AWS m5.xlarge 인스턴스에서 6단계 워크플로우를 안내합니다:

  1. ONNX Runtime과 함께 Optimum 설치
    pip install "optimum[onnxruntime]==1.2.0"
    
  2. Transformers 모델을 ONNX로 변환
    from optimum.onnxruntime import ORTModelForQuestionAnswering
    model = ORTModelForQuestionAnswering.from_pretrained(
        "deepset/roberta-base-squad2", from_transformers=True)
    model.save_pretrained("onnx")
    
  3. 그래프 최적화 적용
    from optimum.onnxruntime import ORTOptimizer, OptimizationConfig
    optimizer = ORTOptimizer.from_pretrained("deepset/roberta-base-squad2", feature="question-answering")
    optimizer.export(
       
       
        optimization_config=OptimizationConfig(optimization_level=99),
    )
    
  4. 동적 양자화
    from optimum.onnxruntime import ORTQuantizer, AutoQuantizationConfig
    quantizer = ORTQuantizer.from_pretrained("deepset/roberta-base-squad2", feature="question-answering")
    qconfig = AutoQuantizationConfig.avx512_vnni(is_static=False, per_channel=True)
    quantizer.export(
       
       
        quantization_config=qconfig,
    )
    
  5. Transformers 파이프라인으로 추론 실행
    from transformers import pipeline, AutoTokenizer
    from optimum.onnxruntime import ORTModelForQuestionAnswering
    tokenizer = AutoTokenizer.from_pretrained("onnx")
    model = ORTModelForQuestionAnswering.from_pretrained("onnx", file_name="model-quantized.onnx")
    qa = pipeline("question-answering", model=model, tokenizer=tokenizer)
    
  6. 정확도 및 지연 시간 평가
    • SQuAD‑v2 정확도: 기본 82.15 F1, 최적화 82.15 F1, 양자화 81.83 F1 (원본의 약 99.6 %).
    • 2코어 CPU에서의 지연 시간: 기본 ≈ 117 ms, 최적화 + 양자화 ≈ 65 ms (약 2배 속도 향상).

현재 제한 사항

  • 모델 크기 – Hub에서 2 GB 미만의 모델만 로드할 수 있습니다.
  • Seq2Seq 지원 – 요약과 같은 작업(예: T5)은 아직 제공되지 않습니다.
  • Past key values – 인과 언어 모델(예: GPT‑2)은 아직 캐시된 어텐션 상태를 사용하지 않습니다.
  • 로컬 캐싱 – 최적화된 ONNX 파일은 다운로드 후 로컬에 캐시되지 않습니다.

자주 묻는 질문

  • 지원 작업 – 특징 추출, 텍스트 분류, 토큰 분류, 질문 응답, 제로샷 분류, 텍스트 생성.
  • 지원 모델transformers.onnx를 통해 내보낼 수 있는 모든 모델, 예: BERT, ALBERT, RoBERTa, XLM‑R, DistilBERT, GPT‑2 등.
  • 지원 런타임 – 현재는 ONNX Runtime이며, 추가 런타임(TensorRT, AWS‑Neuron)도 계획 중입니다.
  • GPU 사용optimum[onnxruntime-gpu]를 설치하면 GPU 제공자를 자동으로 활성화합니다.
  • 최적화 모델 로드ORTModelForXXX.from_pretrained(..., file_name="model‑optimized.onnx") 패턴을 사용합니다.

로드맵 및 향후 작업

Optimum은 트랜스포머 가속을 위한 레퍼런스 툴킷이 되는 것을 목표로 합니다. 향후 주요 마일스톤은 다음과 같습니다:

  • 음성(Wav2Vec 2.0) 및 비전(ViT) 모델 지원 추가.
  • OrtValueIOBinding을 통합하여 저수준 성능 향상.
  • 가속 모델을 위한 평가 유틸리티 제공을 간소화.
  • 런타임 지원을 TensorRT, AWS‑Neuron 및 기타 제공자로 확대.

기여에 관심이 있거나 더 알고 싶다면, Optimum 저장소, Hugging Face 포럼, 그리고 저자의 소셜 채널에서 논의할 수 있습니다.

Sources