推理
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
对权重和激活应用量化。