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 執行個體上,六步驟的工作流程:
- 安裝 Optimum 與 ONNX Runtime
pip install "optimum[onnxruntime]==1.2.0" - 將 Transformers 模型轉換為 ONNX
from optimum.onnxruntime import ORTModelForQuestionAnswering model = ORTModelForQuestionAnswering.from_pretrained( "deepset/roberta-base-squad2", from_transformers=True) model.save_pretrained("onnx") - 套用圖形最佳化
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), ) - 動態量化
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, ) - 使用 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) - 評估準確度與延遲
- 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)模型支援。
- 整合
OrtValue與IOBinding以提升底層效能。 - 提供更簡易的加速模型評估工具。
- 擴展執行環境支援至 TensorRT、AWS‑Neuron 與其他提供者。
如果您有興趣貢獻或想了解更多資訊,Optimum 的倉庫、Hugging Face 論壇以及作者的社群渠道皆歡迎討論。
SUMMARY: Hugging Face 宣佈了 Optimum 1.2,新增了透過 ONNX Runtime 的推理支援與 Transformers 管線整合,使模型服務更快速、具量化且經過最佳化。
TITLE: Optimum 1.2 推理發布加入 ONNX Runtime 加速管線