Optimum 文档

快速入门

您正在查看 主分支 版本,需要从源代码安装. 如果你想使用常规的 pip 安装,请查看最新的稳定版本 (v1.23.1).
Hugging Face's logo
加入 Hugging Face 社区

并获得增强型文档体验

开始使用

快速入门

本快速入门旨在帮助准备深入代码并查看集成 🤗 Optimum 到其模型训练和推理工作流程的示例的开发人员。

加速推理

OpenVINO

要使用 OpenVINO Runtime 加载模型并运行推理,您只需将 AutoModelForXxx 类替换为相应的 OVModelForXxx 类。如果您想加载 PyTorch 检查点,请设置 export=True 将您的模型转换为 OpenVINO IR(中间表示)。

- from transformers import AutoModelForSequenceClassification
+ from optimum.intel.openvino import OVModelForSequenceClassification
  from transformers import AutoTokenizer, pipeline

  # Download a tokenizer and model from the Hub and convert to OpenVINO format
  tokenizer = AutoTokenizer.from_pretrained(model_id)
  model_id = "distilbert-base-uncased-finetuned-sst-2-english"
- model = AutoModelForSequenceClassification.from_pretrained(model_id)
+ model = OVModelForSequenceClassification.from_pretrained(model_id, export=True)

  # Run inference!
  classifier = pipeline("text-classification", model=model, tokenizer=tokenizer)
  results = classifier("He's a dreadful magician.")

您可以在 文档示例 中找到更多示例。

ONNX Runtime

为了使用 ONNX Runtime 加速推理,🤗 Optimum 使用配置对象来定义图优化和量化的参数。然后使用这些对象实例化专用的优化器量化器

在应用量化或优化之前,我们需要先加载模型。要使用 ONNX Runtime 加载模型并运行推理,您只需将规范的 Transformers AutoModelForXxx 类替换为相应的 ORTModelForXxx 类。如果您想从 PyTorch 检查点加载,请设置 export=True 将模型导出为 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
>>> tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
>>> ort_model = ORTModelForSequenceClassification.from_pretrained(model_checkpoint, export=True)

>>> # 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)
>>> classifier = pipeline("text-classification", model=model, tokenizer=tokenizer)
>>> results = classifier("I love burritos!")

您可以在 文档示例 中找到更多示例。

加速训练

Habana

为了在 Habana 的 Gaudi 处理器上训练 Transformers,🤗 Optimum 提供了一个 GaudiTrainer,它与 🤗 Transformers 的 Trainer 非常相似。以下是一个简单的示例

- from transformers import Trainer, TrainingArguments
+ from optimum.habana import GaudiTrainer, GaudiTrainingArguments

  # Download a pretrained model from the Hub
  model = AutoModelForXxx.from_pretrained("bert-base-uncased")

  # Define the training arguments
- training_args = TrainingArguments(
+ training_args = GaudiTrainingArguments(
      output_dir="path/to/save/folder/",
+     use_habana=True,
+     use_lazy_mode=True,
+     gaudi_config_name="Habana/bert-base-uncased",
      ...
  )

  # Initialize the trainer
- trainer = Trainer(
+ trainer = GaudiTrainer(
      model=model,
      args=training_args,
      train_dataset=train_dataset,
      ...
  )

  # Use Habana Gaudi processor for training!
  trainer.train()

您可以在 文档示例 中找到更多示例。

ONNX Runtime

为了使用 ONNX Runtime 的加速功能训练 Transformers,🤗 Optimum 提供了一个 ORTTrainer,它与 🤗 Transformers 的 Trainer 非常相似。以下是一个简单的示例

- from transformers import Trainer, TrainingArguments
+ from optimum.onnxruntime import ORTTrainer, ORTTrainingArguments

  # Download a pretrained model from the Hub
  model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")

  # Define the training arguments
- training_args = TrainingArguments(
+ training_args = ORTTrainingArguments(
      output_dir="path/to/save/folder/",
      optim="adamw_ort_fused",
      ...
  )

  # Create a ONNX Runtime Trainer
- trainer = Trainer(
+ trainer = ORTTrainer(
      model=model,
      args=training_args,
      train_dataset=train_dataset,
+     feature="text-classification", # The model type to export to ONNX
      ...
  )

  # Use ONNX Runtime for training!
  trainer.train()

您可以在 文档示例 中找到更多示例。

开箱即用的 ONNX 导出

Optimum 库可以开箱即用地处理 Transformers 和 Diffusers 模型的 ONNX 导出!

将模型导出为 ONNX 就像

optimum-cli export onnx --model gpt2 gpt2_onnx/

查看帮助以获取更多选项

optimum-cli export onnx --help

查看 文档 以了解更多信息。

PyTorch 的 BetterTransformer 支持

BetterTransformer 是一个免费的 PyTorch 原生优化,可以将基于 Transformer 的模型的推断速度提高 1.25 倍到 4 倍。它已在 PyTorch 1.13 中被标记为稳定版。我们将 BetterTransformer 集成到 🤗 Transformers 库中最常用的模型中,使用集成非常简单,例如

>>> from optimum.bettertransformer import BetterTransformer
>>> from transformers import AutoModelForSequenceClassification

>>> model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased-finetuned-sst-2-english")
>>> model = BetterTransformer.transform(model)

查看 文档 以获取更多详细信息,并查看 PyTorch 的 Medium 博客文章 以了解更多关于集成的信息!

torch.fx 集成

Optimum 集成了 torch.fx,提供了一行代码即可完成多种图形转换。我们的目标是通过 torch.fx 更好地管理 量化,无论是量化感知训练 (QAT) 还是训练后量化 (PTQ)。

查看 文档参考 以了解更多信息!

< > 更新 on GitHub