Optimum 文档

推理

你正在查看main版本,它需要从源代码安装。如果你想要常规的 pip 安装,请签出最新稳定版本(v1.23.1)。
Hugging Face's logo
加入 Hugging Face 社区

并获得增强文档体验权限

开始行动

推理

Optimum Intel 可用于加载经过优化的 Hub 模型,并创建管道在各种英特尔处理器上使用 OpenVINO 运行时运行推断(查看支持的设备完整列表)

加载中

Transformers 模型

一旦 导出了您的型号,便可以使用它来通过对应的 OVModelForXxx 替换 AutoModelForXxx 类加载您的型号。

- from transformers import AutoModelForCausalLM
+ from optimum.intel import OVModelForCausalLM
  from transformers import AutoTokenizer, pipeline

  model_id = "helenai/gpt2-ov"
- model = AutoModelForCausalLM.from_pretrained(model_id)
  # here the model was already exported so no need to set export=True
+ model = OVModelForCausalLM.from_pretrained(model_id)
  tokenizer = AutoTokenizer.from_pretrained(model_id)
  pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
  results = pipe("He's a dreadful magician and")

正如下表所示,每个任务都关联到一个能让自动加载您的模型的类。

自动类 任务
OVModelForSequenceClassification 文本分类
OVModelForTokenClassification 标记分类
OVModelForQuestionAnswering 问答
OVModelForAudioClassification 音频分类
OVModelForImageClassification 图像分类
OVModelForFeatureExtraction 特征提取
OVModelForMaskedLM 填充掩码
OVModelForImageClassification 图像分类
OVModelForAudioClassification 音频分类
OVModelForCausalLM 与过去一起的文本生成
OVModelForSeq2SeqLM 与过去一起的文本到文本生成
OVModelForSpeechSeq2Seq 自动语音识别
OVModelForVision2Seq 图片到文本

扩散器模型

请确保已安装 🤗 Diffusers。若要安装 diffusers

pip install optimum[diffusers]
- from diffusers import StableDiffusionPipeline
+ from optimum.intel import OVStableDiffusionPipeline

  model_id = "echarlaix/stable-diffusion-v1-5-openvino"
- pipeline = StableDiffusionPipeline.from_pretrained(model_id)
+ pipeline = OVStableDiffusionPipeline.from_pretrained(model_id)
  prompt = "sailing ship in storm by Rembrandt"
  images = pipeline(prompt).images

正如下表所示,每个任务都关联到一个能让自动加载您的模型的类。

自动类 任务
OVStableDiffusionPipeline 文本-到-图像
OVStableDiffusionImg2ImgPipeline 图像-到-图像
OVStableDiffusionInpaintPipeline 修复
OVStableDiffusionXLPipeline 文本-到-图像
OVStableDiffusionXLImg2ImgPipeline 图像-到-图像
OVLatentConsistencyModelPipeline 文本-到-图像

有关参数和不同任务的示例的更多信息,请参阅参考文档

编译

默认情况下,在实例化 OVModel 时将编译模型。如果对模型进行形状调整或将其放置到另一个设备,则需要重新编译模型,这将在第一次推理之前默认发生(因此会增加第一次推理的延迟)。若要避免不必要的编译,可以通过将 compile=False 设置为 compile=False 来禁用第一次编译。

from optimum.intel import OVModelForQuestionAnswering

model_id = "distilbert/distilbert-base-cased-distilled-squad"
# Load the model and disable the model compilation
model = OVModelForQuestionAnswering.from_pretrained(model_id, compile=False)

要在 Intel 集成或独立 GPU 上运行推理,请使用 .to("gpu")。在 GPU 上,默认情况下模型以 FP16 精度运行。(请参阅OpenVINO 文档,了解有关安装 GPU 推理驱动程序的信息)。

model.to("gpu")

模型可以编译

model.compile()

静态形状

默认情况下,支持动态形状,能够对任意形状的输入进行推理。要加速推理,可以通过 .reshape() 给出期望的输入形状来启用静态形状。

# Fix the batch size to 1 and the sequence length to 40
batch_size, seq_len = 1, 40
model.reshape(batch_size, seq_len)

当使用 `reshape()` 方法固定形状时,无法针对不同形状的输入执行推理。


from transformers import AutoTokenizer
from optimum.intel import OVModelForQuestionAnswering

model_id = "distilbert/distilbert-base-cased-distilled-squad"
model = OVModelForQuestionAnswering.from_pretrained(model_id, compile=False)
tokenizer = AutoTokenizer.from_pretrained(model_id)
batch_size, seq_len = 1, 40
model.reshape(batch_size, seq_len)
# Compile the model before the first inference
model.compile()

question = "Which name is also used to describe the Amazon rainforest ?"
context = "The Amazon rainforest, also known as Amazonia or the Amazon Jungle"
tokens = tokenizer(question, context, max_length=seq_len, padding="max_length", return_tensors="np")

outputs = model(**tokens)

对于处理图像的模型,还可以在重塑模型时指定 `height` 和 `width`

batch_size, num_images, height, width = 1, 1, 512, 512
pipeline.reshape(batch_size=batch_size, height=height, width=width, num_images_per_prompt=num_images)
images = pipeline(prompt, height=height, width=width, num_images_per_prompt=num_images).images

配置

ov_config 参数允许提供自定义 OpenVINO 配置值。例如,这可用于在默认情况使用 FP16 或 BF16 推理精度的设备上启用全精度推理。

ov_config = {"INFERENCE_PRECISION_HINT": "f32"}
model = OVModelForSequenceClassification.from_pretrained(model_id, ov_config=ov_config)

Optimum Intel 利用 OpenVINO 的模型缓存加速在 GPU 上编译模型。默认情况下,在 Hugging Face 集线器缓存 中模型目录中创建一个 `model_cache` 目录。要覆盖此设置,请使用 ov_config 参数并将 `CACHE_DIR` 设置为其他值。要在 GPU 上禁用模型缓存,请将 `CACHE_DIR` 设置为空字符串。

ov_config = {"CACHE_DIR": ""}
model = OVModelForSequenceClassification.from_pretrained(model_id, device="gpu", ov_config=ov_config)

权重量化

加载模型时,还可以对线性层、卷积层和嵌入层应用 fp16、8 位或 4 位的权重压缩,以减少内存占用和推理延迟。

有关量化参数的更多信息,请参阅文档

如果未指定,将模型以大于 10 亿个参数导出为 OpenVINO 格式(使用 export=True)时,load_in_8bit 将默认设置为 True。你可以使用 load_in_8bit=False 禁用它。

还可以使用 OVQuantizer 对权重和激活应用量化。

< > 更新在 GitHub 上