AWS Trainium & Inferentia 文档
使用 AWS Neuron (Inf2/Trn1) 的推理管道
并获得增强的文档体验
开始使用
使用 AWS Neuron (Inf2/Trn1) 的推理管道
pipeline()
函数可以方便地使用 模型中心 中的模型在各种任务(如文本分类、问答和图像分类)上进行加速推理。
您也可以使用 Transformers 中的 pipeline() 函数,并提供您的 NeuronModel 模型类。
目前支持的任务有
特征提取
掩码填充
文本分类
词元分类
问题回答
零样本分类
Optimum 管道用法
虽然每个任务都有一个关联的管道类,但使用通用的 pipeline()
函数更为简单,它将所有特定于任务的管道包装在一个对象中。pipeline()
函数会自动加载一个能够为您的任务执行推理的默认模型和分词器/特征提取器。
- 首先通过指定推理任务来创建管道
>>> from optimum.neuron.pipelines import pipeline
>>> classifier = pipeline(task="text-classification")
- 将您的输入文本/图像传递给
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)