AWS Trainium & Inferentia 文档

使用 AWS Neuron (Inf2/Trn1) 的推理管道

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

使用 AWS Neuron (Inf2/Trn1) 的推理管道

pipeline() 函数可以方便地使用 模型中心 中的模型在各种任务(如文本分类、问答和图像分类)上进行加速推理。

您也可以使用 Transformers 中的 pipeline() 函数,并提供您的 NeuronModel 模型类。

目前支持的任务有

  • 特征提取
  • 掩码填充
  • 文本分类
  • 词元分类
  • 问题回答
  • 零样本分类

Optimum 管道用法

虽然每个任务都有一个关联的管道类,但使用通用的 pipeline() 函数更为简单,它将所有特定于任务的管道包装在一个对象中。pipeline() 函数会自动加载一个能够为您的任务执行推理的默认模型和分词器/特征提取器。

  1. 首先通过指定推理任务来创建管道
>>> from optimum.neuron.pipelines import pipeline

>>> classifier = pipeline(task="text-classification")
  1. 将您的输入文本/图像传递给 pipeline() 函数
>>> classifier("I like you. I love you.")
[{'label': 'POSITIVE', 'score': 0.9998838901519775}]

注意:pipeline() 函数中使用的默认模型并未针对推理进行优化或量化,因此与它们的 PyTorch 对应版本相比,性能上不会有提升。

使用原生 Transformers 模型并转换为 AWS Neuron

pipeline() 函数接受来自 Hugging Face Hub 的任何受支持的模型。模型中心上有标签,可让您筛选出想要用于任务的模型。

为了能够使用 Neuron 运行时加载模型,所考虑的架构需要支持导出到 Neuron。

您可以在这里查看支持的架构列表。

一旦选择了合适的模型,您可以通过指定模型仓库来创建 pipeline()

>>> from optimum.neuron.pipelines import pipeline

# The model will be loaded to an NeuronModelForQuestionAnswering.
>>> neuron_qa = pipeline("question-answering", model="deepset/roberta-base-squad2", export=True)
>>> question = "What's my name?"
>>> context = "My name is Philipp and I live in Nuremberg."

>>> pred = neuron_qa(question=question, context=context)

也可以使用与 NeuronModelForXXX 类关联的 from_pretrained(model_name_or_path, export=True) 方法来加载它。

例如,以下是如何加载用于问答任务的 ~neuron.NeuronModelForQuestionAnswering

>>> from transformers import AutoTokenizer
>>> from optimum.neuron import NeuronModelForQuestionAnswering, pipeline

>>> tokenizer = AutoTokenizer.from_pretrained("deepset/roberta-base-squad2")

>>> # Loading the PyTorch checkpoint and converting to the neuron format by providing export=True
>>> model = NeuronModelForQuestionAnswering.from_pretrained(
...     "deepset/roberta-base-squad2",
...     export=True
... )

>>> neuron_qa = pipeline("question-answering", model=model, tokenizer=tokenizer)
>>> question = "What's my name?"
>>> context = "My name is Philipp and I live in Nuremberg."

>>> pred = neuron_qa(question=question, context=context)

定义输入形状

NeuronModels 当前需要静态的 input_shapes 来运行推理。如果您在提供 export=True 参数时未提供输入形状,则将使用默认的输入形状。下面是一个示例,演示如何为序列长度和批处理大小指定输入形状。

>>> from optimum.neuron.pipelines import pipeline

>>> input_shapes = {"batch_size": 1, "sequence_length": 64} 
>>> clt = pipeline("token-classification", model="dslim/bert-base-NER", export=True,input_shapes=input_shapes)
>>> context = "My name is Philipp and I live in Nuremberg."

>>> pred = clt(context)