Optimum 1.2 推理發布加入 ONNX Runtime 加速管線

TL;DR

Optimum 1.2 引入了使用 ONNX Runtime 的 Hugging Face Transformers 管線推理支援,讓使用者可以將標準的 AutoModel 類別替換為 ORTModel 等價類別,套用圖形最佳化與動態量化,並在保留超過 99% 原始準確度的同時,達到最高 2 倍的延遲降低。


Optimum 是什麼?

Optimum 是一個開源函式庫,為 Hugging Face Transformers 擴充了統一的 API,以在加速硬體上進行效能最佳化。它提供加速訓練、量化、圖形最佳化以及現在的推理工具,支援如 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 執行個體上,六步驟的工作流程:

  1. 安裝 Optimum 與 ONNX Runtime
    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 倍加速)。

目前限制

  • 模型大小 – 只能載入小於 2 GB 的模型自 Hub。
  • Seq2Seq 支援 – 如摘要(例如 T5)等任務尚未提供。
  • 過去鍵值 – 因果語言模型(例如 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 目標成為 transformer 加速的參考工具組。未來的里程碑包括:

  • 新增語音(Wav2Vec 2.0)與視覺(ViT)模型支援。
  • 整合 OrtValueIOBinding 以提升底層效能。
  • 提供更簡易的加速模型評估工具。
  • 擴展執行環境支援至 TensorRT、AWS‑Neuron 與其他提供者。

如果您有興趣貢獻或想了解更多資訊,Optimum 的倉庫、Hugging Face 論壇以及作者的社群渠道皆歡迎討論。


SUMMARY: Hugging Face 宣佈了 Optimum 1.2,新增了透過 ONNX Runtime 的推理支援與 Transformers 管線整合,使模型服務更快速、具量化且經過最佳化。

TITLE: Optimum 1.2 推理發布加入 ONNX Runtime 加速管線

Sources