Optimum 文件

快速入門

您正在檢視的是需要從原始碼安裝。如果您想進行常規的 pip 安裝,請檢視最新的穩定版本 (v1.27.0)。
Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

快速入門

其核心是,🤗 Optimum 使用_配置物件_來定義不同加速器上的最佳化引數。然後,這些物件用於例項化專用的_最佳化器_、_量化器_和_剪枝器_。

在應用量化或最佳化之前,我們首先需要將模型匯出為 ONNX 格式。

>>> from optimum.onnxruntime import ORTModelForSequenceClassification
>>> from transformers import AutoTokenizer

>>> model_checkpoint = "distilbert-base-uncased-finetuned-sst-2-english"
>>> save_directory = "tmp/onnx/"
>>> # Load a model from transformers and export it to ONNX
>>> ort_model = ORTModelForSequenceClassification.from_pretrained(model_checkpoint, export=True)
>>> tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
>>> # Save the onnx model and tokenizer
>>> ort_model.save_pretrained(save_directory)
>>> tokenizer.save_pretrained(save_directory)

現在讓我們看看如何使用 ONNX Runtime 應用動態量化

>>> from optimum.onnxruntime.configuration import AutoQuantizationConfig
>>> from optimum.onnxruntime import ORTQuantizer
>>> # Define the quantization methodology
>>> qconfig = AutoQuantizationConfig.arm64(is_static=False, per_channel=False)
>>> quantizer = ORTQuantizer.from_pretrained(ort_model)
>>> # Apply dynamic quantization on the model
>>> quantizer.quantize(save_dir=save_directory, quantization_config=qconfig)

在此示例中,我們量化了一個來自 Hugging Face Hub 的模型,但它也可以是本地模型目錄的路徑。應用 `quantize()` 方法的結果是一個 `model_quantized.onnx` 檔案,可用於執行推理。以下是如何載入 ONNX Runtime 模型並使用它生成預測的示例

>>> from optimum.onnxruntime import ORTModelForSequenceClassification
>>> from transformers import pipeline, AutoTokenizer
>>> model = ORTModelForSequenceClassification.from_pretrained(save_directory, file_name="model_quantized.onnx")
>>> tokenizer = AutoTokenizer.from_pretrained(save_directory)
>>> cls_pipeline = pipeline("text-classification", model=model, tokenizer=tokenizer)
>>> results = cls_pipeline("I love burritos!")

同樣,您只需在例項化 `QuantizationConfig` 物件時將 `is_static` 設定為 `True`,即可應用靜態量化。

>>> qconfig = AutoQuantizationConfig.arm64(is_static=True, per_channel=False)

靜態量化依賴於透過模型饋送批次資料,以在推理時間之前估算啟用量化引數。為了支援這一點,🤗 Optimum 允許您提供一個_校準資料集_。校準資料集可以是來自 🤗 Datasets 庫的簡單 `Dataset` 物件,或者託管在 Hugging Face Hub 上的任何資料集。對於此示例,我們將選擇模型最初訓練所用的 `sst2` 資料集。

>>> from functools import partial
>>> from optimum.onnxruntime.configuration import AutoCalibrationConfig

# Define the processing function to apply to each example after loading the dataset
>>> def preprocess_fn(ex, tokenizer):
...     return tokenizer(ex["sentence"])

>>> # Create the calibration dataset
>>> calibration_dataset = quantizer.get_calibration_dataset(
...     "glue",
...     dataset_config_name="sst2",
...     preprocess_function=partial(preprocess_fn, tokenizer=tokenizer),
...     num_samples=50,
...     dataset_split="train",
... )
>>> # Create the calibration configuration containing the parameters related to calibration.
>>> calibration_config = AutoCalibrationConfig.minmax(calibration_dataset)
>>> # Perform the calibration step: computes the activations quantization ranges
>>> ranges = quantizer.fit(
...     dataset=calibration_dataset,
...     calibration_config=calibration_config,
...     operators_to_quantize=qconfig.operators_to_quantize,
... )
>>> # Apply static quantization on the model
>>> quantizer.quantize(
...     save_dir=save_directory,
...     calibration_tensors_range=ranges,
...     quantization_config=qconfig,
... )

最後一個例子,讓我們來看看應用_圖最佳化_技術,例如運算子融合和常量摺疊。和以前一樣,我們載入一個配置物件,但這次是透過設定最佳化級別而不是量化方法。

>>> from optimum.onnxruntime.configuration import OptimizationConfig

>>> # Here the optimization level is selected to be 1, enabling basic optimizations such as redundant node eliminations and constant folding. Higher optimization level will result in a hardware dependent optimized graph.
>>> optimization_config = OptimizationConfig(optimization_level=1)

接下來,我們載入一個_最佳化器_來將這些最佳化應用於我們的模型

>>> from optimum.onnxruntime import ORTOptimizer

>>> optimizer = ORTOptimizer.from_pretrained(ort_model)

>>> # Optimize the model
>>> optimizer.optimize(save_dir=save_directory, optimization_config=optimization_config)

就是這樣——模型現在已經最佳化並準備好進行推理了!如你所見,每種情況下的過程都相似。

  1. 透過 `OptimizationConfig` / `QuantizationConfig` 物件定義最佳化/量化策略
  2. 例項化 `ORTQuantizer` 或 `ORTOptimizer` 類
  3. 應用 `quantize()` 或 `optimize()` 方法
  4. 執行推理

檢視 `examples` 目錄以獲取更高階的用法。

祝您最佳化愉快 🤗!

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.