Optimum 文档
模型
并获得增强的文档体验
开始使用
模型
通用模型类
以下 ORT 类可用于实例化没有特定头的基本模型类。
ORTModel
class optimum.onnxruntime.ORTModel
< source 源 >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
参数
- - config (PretrainedConfig — 模型的配置。—
- - session (
~onnxruntime.InferenceSession
) — 运行模型的 ONNX Runtime 推理会话。— - - use_io_binding (
bool
, 可选, 默认为True
) — 是否在 **ONNX Runtime 中使用 I/O 绑定 — - 与 CUDAExecutionProvider**, 这可以根据任务显著加快推理速度。—
- - model_save_dir (
Path
) — 导出到 ONNX 的模型保存目录。— - 默认情况下,如果加载的模型是本地模型,则使用原始模型所在的目录。否则,将使用 —
- 缓存目录。—
使用 ONNX Runtime 实现模型的基本类。
ORTModel 实现了与 Hugging Face Hub 交互的通用方法,以及使用 optimum.exporters.onnx
工具链将原生 transformers 模型导出到 ONNX。
类属性
- model_type (
str
, 可选, 默认为"onnx_model"
) — 注册 ORTModel 类时使用的模型类型名称。 - auto_model_class (
Type
, 可选, 默认为AutoModel
) — 当前 ORTModel 类表示的“AutoModel”类。
返回此模型是否可以使用 ` .generate()` 生成序列。
from_pretrained
< source 源 >( model_id: typing.Union[str, pathlib.Path] config: typing.Optional[ForwardRef('PretrainedConfig')] = None export: bool = False subfolder: str = '' revision: str = 'main' force_download: bool = False local_files_only: bool = False trust_remote_code: bool = False cache_dir: str = '/root/.cache/huggingface/hub' token: typing.Union[str, bool, NoneType] = None provider: str = 'CPUExecutionProvider' providers: typing.Optional[typing.Sequence[str]] = None provider_options: typing.Union[typing.Sequence[typing.Dict[str, typing.Any]], typing.Dict[str, typing.Any], NoneType] = None session_options: typing.Optional[onnxruntime.capi.onnxruntime_pybind11_state.SessionOptions] = None use_io_binding: typing.Optional[bool] = None **kwargs ) → ORTModel
参数
- model_id (
Union[str, Path]
) — 可以是:- 一个字符串,是托管在 huggingface.co 模型仓库中的预训练模型的 模型 ID。有效的模型 ID 可以在根级别找到,例如
bert-base-uncased
,也可以在用户或组织名称下命名空间,例如dbmdz/bert-base-german-cased
。 - 一个 目录 的路径,其中包含使用
~OptimizedModel.save_pretrained
保存的模型,例如./my_model_directory/
。
- 一个字符串,是托管在 huggingface.co 模型仓库中的预训练模型的 模型 ID。有效的模型 ID 可以在根级别找到,例如
- export (
bool
, 默认为False
) — 定义提供的model_id
是否需要导出到目标格式。 - force_download (
bool
, 默认为True
) — 是否强制(重新)下载模型权重和配置文件,如果存在缓存版本则覆盖。 - use_auth_token (
Optional[Union[bool,str]]
, 默认为None
) — 已弃用。请改用token
参数。 - token (
Optional[Union[bool,str]]
, 默认为None
) — 用作远程文件 HTTP 持有者授权的令牌。如果为True
,将使用运行huggingface-cli login
时生成的令牌(存储在huggingface_hub.constants.HF_TOKEN_PATH
中)。 - cache_dir (
Optional[str]
, 默认为None
) — 如果不应使用标准缓存,则下载的预训练模型配置应缓存到的目录路径。 - subfolder (
str
, 默认为""
) — 如果相关文件位于模型仓库的子文件夹中(本地或 huggingface.co 上),您可以在此处指定文件夹名称。 - config (
Optional[transformers.PretrainedConfig]
, 默认为None
) — 模型配置。 - local_files_only (
Optional[bool]
, 默认为False
) — 是否只查看本地文件(即不尝试下载模型)。 - trust_remote_code (
bool
, 默认为False
) — 是否允许 Hub 上自定义模型代码。此选项应仅在您信任且已阅读代码的仓库中设置为True
,因为它将在您的本地机器上执行 Hub 上存在的代码。 - revision (
Optional[str]
, 默认为None
) — 要使用的特定模型版本。它可以是分支名称、标签名称或提交 ID,因为我们使用基于 Git 的系统在 huggingface.co 上存储模型和其他工件,因此revision
可以是 Git 允许的任何标识符。 - provider (
str
, 默认为"CPUExecutionProvider"
) — 用于加载模型的 ONNX Runtime 提供程序。有关可能的提供程序,请参阅 https://runtime.onnx.org.cn/docs/execution-providers/。 - providers (
Optional[Sequence[str]]
, 默认为None
) — 用于加载模型的执行提供程序列表。此参数优先于provider
参数。 - provider_options (
Optional[Dict[str, Any]]
, 默认为None
) — 与所使用的提供程序对应的提供程序选项字典。有关每个提供程序的可用选项,请参阅:https://runtime.onnx.org.cn/docs/api/c/group___global.html。 - session_options (
Optional[onnxruntime.SessionOptions]
, 默认为None
) — 用于加载模型的 ONNX Runtime 会话选项。 - use_io_binding (
Optional[bool]
, 默认为None
) — 在推理过程中是否使用 IOBinding,以避免主机和设备之间或 numpy/torch 张量与 ONNX Runtime ORTValue 之间的内存复制。如果执行提供程序是 CUDAExecutionProvider,则默认为True
。对于 [~onnxruntime.ORTModelForCausalLM],在 CPUExecutionProvider 上默认为True
,在所有其他情况下默认为False
。 - kwargs (
Dict[str, Any]
) — 将传递给底层模型加载方法。
解码器模型参数(ORTModelForCausalLM、ORTModelForSeq2SeqLM、ORTModelForSeq2SeqLM、ORTModelForSpeechSeq2Seq、ORTModelForVision2Seq)
ORTModelForCausalLM 参数
- use_merged (
Optional[bool]
, 默认为None
) — 是否使用单个 ONNX,该 ONNX 处理不重用和重用过去键值的解码。如果从本地仓库加载并找到合并的解码器,此选项默认为True
。当使用export=True
导出时,默认为False
。应将此选项设置为True
以最小化内存使用。
返回
ORTModel
已加载的 ORTModel 模型。
从预训练模型配置实例化预训练模型。
自然语言处理
以下 ORT 类可用于以下自然语言处理任务。
ORTModelForCausalLM
class optimum.onnxruntime.ORTModelForCausalLM
< source 源 >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None generation_config: typing.Optional[ForwardRef('GenerationConfig')] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
带有因果语言建模头的 ONNX 模型,用于 ONNX Runtime 推理。此类别正式支持 bloom、codegen、falcon、gpt2、gpt-bigcode、gpt_neo、gpt_neox、gptj、llama。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< source 源 >( input_ids: LongTensor attention_mask: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[typing.Tuple[typing.Tuple[torch.Tensor]]] = None position_ids: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None **kwargs )
参数
- input_ids (
torch.LongTensor
) — 解码器输入序列标记在词汇表中的索引,形状为(batch_size, sequence_length)
。 - attention_mask (
torch.LongTensor
) — 避免对填充标记索引执行注意力机制的掩码,形状为(batch_size, sequence_length)
。掩码值在[0, 1]
中选择。 - past_key_values (
tuple(tuple(torch.FloatTensor), *可选*, 默认为
None)
— 包含用于加速解码的注意力块的预计算键和值隐藏状态。该元组的长度为config.n_layers
,每个元组包含 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)
的张量。
ORTModelForCausalLM
的 forward 方法,覆盖了 __call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
文本生成示例
>>> from transformers import AutoTokenizer
>>> from optimum.onnxruntime import ORTModelForCausalLM
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/gpt2")
>>> model = ORTModelForCausalLM.from_pretrained("optimum/gpt2")
>>> inputs = tokenizer("My name is Arthur and I live in", return_tensors="pt")
>>> gen_tokens = model.generate(**inputs,do_sample=True,temperature=0.9, min_length=20,max_length=20)
>>> tokenizer.batch_decode(gen_tokens)
使用 transformers.pipelines
的示例
>>> from transformers import AutoTokenizer, pipeline
>>> from optimum.onnxruntime import ORTModelForCausalLM
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/gpt2")
>>> model = ORTModelForCausalLM.from_pretrained("optimum/gpt2")
>>> onnx_gen = pipeline("text-generation", model=model, tokenizer=tokenizer)
>>> text = "My name is Arthur and I live in"
>>> gen = onnx_gen(text)
ORTModelForMaskedLM
class optimum.onnxruntime.ORTModelForMaskedLM
< source 源 >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
ONNX 模型,带有 MaskedLMOutput 用于掩码语言建模任务。此类别正式支持 albert、bert、camembert、convbert、data2vec-text、deberta、deberta_v2、distilbert、electra、flaubert、ibert、mobilebert、roberta、roformer、squeezebert、xlm、xlm_roberta。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< source 源 >( input_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None attention_mask: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None token_type_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None return_dict: bool = True **kwargs )
参数
- input_ids (形状为
(batch_size, sequence_length)
的Union[torch.Tensor, np.ndarray, None]
,默认为None
) — 输入序列标记在词汇表中的索引。索引可以使用AutoTokenizer
获取。有关详细信息,请参阅PreTrainedTokenizer.encode
和PreTrainedTokenizer.__call__
。 什么是输入 ID? - attention_mask (形状为
(batch_size, sequence_length)
的Union[torch.Tensor, np.ndarray, None]
,默认为None
) — 避免对填充标记索引执行注意力机制的掩码。掩码值在[0, 1]
中选择:- 1 表示 未被掩码 的标记,
- 0 表示 被掩码 的标记。 什么是注意力掩码?
- token_type_ids (形状为
(batch_size, sequence_length)
的Union[torch.Tensor, np.ndarray, None]
,默认为None
) — 片段标记索引,用于指示输入的第一部分和第二部分。索引在[0, 1]
中选择:- 1 表示 句子 A 中的标记,
- 0 表示 句子 B 中的标记。 什么是标记类型 ID?
ORTModelForMaskedLM
的 forward 方法,覆盖了 __call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
特征提取示例
>>> from transformers import AutoTokenizer
>>> from optimum.onnxruntime import ORTModelForMaskedLM
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/bert-base-uncased-for-fill-mask")
>>> model = ORTModelForMaskedLM.from_pretrained("optimum/bert-base-uncased-for-fill-mask")
>>> inputs = tokenizer("The capital of France is [MASK].", return_tensors="np")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 8, 28996]
使用 transformers.pipeline
的示例
>>> from transformers import AutoTokenizer, pipeline
>>> from optimum.onnxruntime import ORTModelForMaskedLM
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/bert-base-uncased-for-fill-mask")
>>> model = ORTModelForMaskedLM.from_pretrained("optimum/bert-base-uncased-for-fill-mask")
>>> fill_masker = pipeline("fill-mask", model=model, tokenizer=tokenizer)
>>> text = "The capital of France is [MASK]."
>>> pred = fill_masker(text)
ORTModelForSeq2SeqLM
class optimum.onnxruntime.ORTModelForSeq2SeqLM
< source >( *args config: PretrainedConfig = None encoder_session: InferenceSession = None decoder_session: InferenceSession = None decoder_with_past_session: typing.Optional[ForwardRef('InferenceSession')] = None use_io_binding: typing.Optional[bool] = None generation_config: typing.Optional[ForwardRef('GenerationConfig')] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
用于ONNX Runtime推理的序列到序列模型,带有一个语言建模头。此类官方支持bart、blenderbot、blenderbot-small、longt5、m2m_100、marian、mbart、mt5、pegasus、t5。
该模型继承自~onnxruntime.modeling_ort.ORTModelForConditionalGeneration
,请查看其文档以了解该库为其所有模型实现的通用方法(如下载或保存)。
此类应使用onnxruntime.modeling_ort.ORTModelForConditionalGeneration.from_pretrained
方法进行初始化。
forward
< source >( input_ids: LongTensor = None attention_mask: typing.Optional[torch.FloatTensor] = None decoder_input_ids: typing.Optional[torch.LongTensor] = None encoder_outputs: typing.Optional[typing.Tuple[typing.Tuple[torch.Tensor]]] = None past_key_values: typing.Optional[typing.Tuple[typing.Tuple[torch.Tensor]]] = None **kwargs )
参数
- input_ids (
torch.LongTensor
) — 输入序列令牌在词汇表中的索引,形状为(batch_size, encoder_sequence_length)
。 - attention_mask (
torch.LongTensor
) — 用于避免对填充令牌索引执行注意力操作的掩码,形状为(batch_size, encoder_sequence_length)
。掩码值选择范围为[0, 1]
。 - decoder_input_ids (
torch.LongTensor
) — 解码器输入序列令牌在词汇表中的索引,形状为(batch_size, decoder_sequence_length)
。 - encoder_outputs (
torch.FloatTensor
) — 编码器last_hidden_state
,形状为(batch_size, encoder_sequence_length, hidden_size)
。 - past_key_values (
tuple(tuple(torch.FloatTensor), *optional*, defaults to
None)
— 包含用于加速解码的注意力块的预计算键和值隐藏状态。元组的长度为config.n_layers
,每个元组包含2个形状为(batch_size, num_heads, decoder_sequence_length, embed_size_per_head)
的张量和2个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)
的张量。
ORTModelForSeq2SeqLM
的forward方法覆盖了__call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
文本生成示例
>>> from transformers import AutoTokenizer
>>> from optimum.onnxruntime import ORTModelForSeq2SeqLM
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/t5-small")
>>> model = ORTModelForSeq2SeqLM.from_pretrained("optimum/t5-small")
>>> inputs = tokenizer("My name is Eustache and I like to", return_tensors="pt")
>>> gen_tokens = model.generate(**inputs)
>>> outputs = tokenizer.batch_decode(gen_tokens)
使用 transformers.pipeline
的示例
>>> from transformers import AutoTokenizer, pipeline
>>> from optimum.onnxruntime import ORTModelForSeq2SeqLM
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/t5-small")
>>> model = ORTModelForSeq2SeqLM.from_pretrained("optimum/t5-small")
>>> onnx_translation = pipeline("translation_en_to_de", model=model, tokenizer=tokenizer)
>>> text = "My name is Eustache."
>>> pred = onnx_translation(text)
ORTModelForSequenceClassification
class optimum.onnxruntime.ORTModelForSequenceClassification
< source >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
ONNX 模型,其顶部带有一个序列分类/回归头(在池化输出之上有一个线性层),例如用于 GLUE 任务。此类官方支持 albert、bart、bert、camembert、convbert、data2vec-text、deberta、deberta_v2、distilbert、electra、flaubert、ibert、mbart、mobilebert、nystromformer、roberta、roformer、squeezebert、xlm、xlm_roberta。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< source >( input_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None attention_mask: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None token_type_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None return_dict: bool = True **kwargs )
参数
- input_ids (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, sequence_length)
,默认为None
) — 词汇表中输入序列令牌的索引。可以使用AutoTokenizer
获取索引。详见PreTrainedTokenizer.encode
和PreTrainedTokenizer.__call__
。什么是输入ID? - attention_mask (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, sequence_length)
,默认为None
) — 用于避免对填充令牌索引执行注意力操作的掩码。掩码值选择范围为[0, 1]
:- 1 表示**未被掩码**的令牌,
- 0 表示**被掩码**的令牌。什么是注意力掩码?
- token_type_ids (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, sequence_length)
,默认为None
) — 片段令牌索引,用于指示输入的第一个和第二个部分。索引选择范围为[0, 1]
:- 1 表示**句子 A**的令牌,
- 0 表示**句子 B**的令牌。什么是令牌类型ID?
ORTModelForSequenceClassification
的forward方法覆盖了__call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
单标签分类示例
>>> from transformers import AutoTokenizer
>>> from optimum.onnxruntime import ORTModelForSequenceClassification
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/distilbert-base-uncased-finetuned-sst-2-english")
>>> model = ORTModelForSequenceClassification.from_pretrained("optimum/distilbert-base-uncased-finetuned-sst-2-english")
>>> inputs = tokenizer("Hello, my dog is cute", return_tensors="np")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 2]
使用 transformers.pipelines
的示例
>>> from transformers import AutoTokenizer, pipeline
>>> from optimum.onnxruntime import ORTModelForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/distilbert-base-uncased-finetuned-sst-2-english")
>>> model = ORTModelForSequenceClassification.from_pretrained("optimum/distilbert-base-uncased-finetuned-sst-2-english")
>>> onnx_classifier = pipeline("text-classification", model=model, tokenizer=tokenizer)
>>> text = "Hello, my dog is cute"
>>> pred = onnx_classifier(text)
使用零样本分类transformers.pipelines
的示例
>>> from transformers import AutoTokenizer, pipeline
>>> from optimum.onnxruntime import ORTModelForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/distilbert-base-uncased-mnli")
>>> model = ORTModelForSequenceClassification.from_pretrained("optimum/distilbert-base-uncased-mnli")
>>> onnx_z0 = pipeline("zero-shot-classification", model=model, tokenizer=tokenizer)
>>> sequence_to_classify = "Who are you voting for in 2020?"
>>> candidate_labels = ["Europe", "public health", "politics", "elections"]
>>> pred = onnx_z0(sequence_to_classify, candidate_labels, multi_label=True)
ORTModelForTokenClassification
class optimum.onnxruntime.ORTModelForTokenClassification
< source >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
ONNX 模型,其顶部带有一个令牌分类头(在隐藏状态输出之上有一个线性层),例如用于命名实体识别 (NER) 任务。此类官方支持 albert、bert、bloom、camembert、convbert、data2vec-text、deberta、deberta_v2、distilbert、electra、flaubert、gpt2、ibert、mobilebert、roberta、roformer、squeezebert、xlm、xlm_roberta。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< source >( input_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None attention_mask: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None token_type_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None return_dict: bool = True **kwargs )
参数
- input_ids (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, sequence_length)
,默认为None
) — 词汇表中输入序列令牌的索引。可以使用AutoTokenizer
获取索引。详见PreTrainedTokenizer.encode
和PreTrainedTokenizer.__call__
。什么是输入ID? - attention_mask (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, sequence_length)
,默认为None
) — 用于避免对填充令牌索引执行注意力操作的掩码。掩码值选择范围为[0, 1]
:- 1 表示**未被掩码**的令牌,
- 0 表示**被掩码**的令牌。什么是注意力掩码?
- token_type_ids (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, sequence_length)
,默认为None
) — 片段令牌索引,用于指示输入的第一个和第二个部分。索引选择范围为[0, 1]
:- 1 表示**句子 A**的令牌,
- 0 表示**句子 B**的令牌。什么是令牌类型ID?
ORTModelForTokenClassification
的forward方法覆盖了__call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
令牌分类示例
>>> from transformers import AutoTokenizer
>>> from optimum.onnxruntime import ORTModelForTokenClassification
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/bert-base-NER")
>>> model = ORTModelForTokenClassification.from_pretrained("optimum/bert-base-NER")
>>> inputs = tokenizer("My name is Philipp and I live in Germany.", return_tensors="np")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 12, 9]
使用 transformers.pipelines
的示例
>>> from transformers import AutoTokenizer, pipeline
>>> from optimum.onnxruntime import ORTModelForTokenClassification
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/bert-base-NER")
>>> model = ORTModelForTokenClassification.from_pretrained("optimum/bert-base-NER")
>>> onnx_ner = pipeline("token-classification", model=model, tokenizer=tokenizer)
>>> text = "My name is Philipp and I live in Germany."
>>> pred = onnx_ner(text)
ORTModelForMultipleChoice
class optimum.onnxruntime.ORTModelForMultipleChoice
< source >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
ONNX 模型,其顶部带有一个多项选择分类头(在池化输出之上有一个线性层和一个 softmax),例如用于 RocStories/SWAG 任务。此类官方支持 albert、bert、camembert、convbert、data2vec-text、deberta_v2、distilbert、electra、flaubert、ibert、mobilebert、nystromformer、roberta、roformer、squeezebert、xlm、xlm_roberta。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< source >( input_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None attention_mask: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None token_type_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None return_dict: bool = True **kwargs )
参数
- input_ids (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, sequence_length)
,默认为None
) — 词汇表中输入序列令牌的索引。可以使用AutoTokenizer
获取索引。详见PreTrainedTokenizer.encode
和PreTrainedTokenizer.__call__
。什么是输入ID? - attention_mask (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, sequence_length)
,默认为None
) — 用于避免对填充令牌索引执行注意力操作的掩码。掩码值选择范围为[0, 1]
:- 1 表示**未被掩码**的令牌,
- 0 表示**被掩码**的令牌。什么是注意力掩码?
- token_type_ids (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, sequence_length)
,默认为None
) — 片段令牌索引,用于指示输入的第一个和第二个部分。索引选择范围为[0, 1]
:- 1 表示**句子 A**的令牌,
- 0 表示**句子 B**的令牌。什么是令牌类型ID?
ORTModelForMultipleChoice
的forward方法覆盖了__call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
多项选择示例
>>> from transformers import AutoTokenizer
>>> from optimum.onnxruntime import ORTModelForMultipleChoice
>>> tokenizer = AutoTokenizer.from_pretrained("ehdwns1516/bert-base-uncased_SWAG")
>>> model = ORTModelForMultipleChoice.from_pretrained("ehdwns1516/bert-base-uncased_SWAG", export=True)
>>> num_choices = 4
>>> first_sentence = ["Members of the procession walk down the street holding small horn brass instruments."] * num_choices
>>> second_sentence = [
... "A drum line passes by walking down the street playing their instruments.",
... "A drum line has heard approaching them.",
... "A drum line arrives and they're outside dancing and asleep.",
... "A drum line turns the lead singer watches the performance."
... ]
>>> inputs = tokenizer(first_sentence, second_sentence, truncation=True, padding=True)
# Unflatten the inputs values expanding it to the shape [batch_size, num_choices, seq_length]
>>> for k, v in inputs.items():
... inputs[k] = [v[i: i + num_choices] for i in range(0, len(v), num_choices)]
>>> inputs = dict(inputs.convert_to_tensors(tensor_type="pt"))
>>> outputs = model(**inputs)
>>> logits = outputs.logits
ORTModelForQuestionAnswering
class optimum.onnxruntime.ORTModelForQuestionAnswering
< source >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
ONNX 模型,带有用于 SQuAD 等抽取式问答任务的 QuestionAnsweringModelOutput。此类官方支持 albert、bart、bert、camembert、convbert、data2vec-text、deberta、deberta_v2、distilbert、electra、flaubert、gptj、ibert、mbart、mobilebert、nystromformer、roberta、roformer、squeezebert、xlm、xlm_roberta。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< source >( input_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None attention_mask: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None token_type_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None return_dict: bool = True **kwargs )
参数
- input_ids (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, sequence_length)
,默认为None
) — 词汇表中输入序列令牌的索引。可以使用AutoTokenizer
获取索引。详见PreTrainedTokenizer.encode
和PreTrainedTokenizer.__call__
。什么是输入ID? - attention_mask (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, sequence_length)
,默认为None
) — 用于避免对填充令牌索引执行注意力操作的掩码。掩码值选择范围为[0, 1]
:- 1 表示**未被掩码**的令牌,
- 0 表示**被掩码**的令牌。什么是注意力掩码?
- token_type_ids (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, sequence_length)
,默认为None
) — 片段令牌索引,用于指示输入的第一个和第二个部分。索引选择范围为[0, 1]
:- 1 表示**句子 A**的令牌,
- 0 表示**句子 B**的令牌。什么是令牌类型ID?
ORTModelForQuestionAnswering
的forward方法覆盖了__call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
问答示例
>>> from transformers import AutoTokenizer
>>> from optimum.onnxruntime import ORTModelForQuestionAnswering
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/roberta-base-squad2")
>>> model = ORTModelForQuestionAnswering.from_pretrained("optimum/roberta-base-squad2")
>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
>>> inputs = tokenizer(question, text, return_tensors="np")
>>> start_positions = torch.tensor([1])
>>> end_positions = torch.tensor([3])
>>> outputs = model(**inputs, start_positions=start_positions, end_positions=end_positions)
>>> start_scores = outputs.start_logits
>>> end_scores = outputs.end_logits
使用 transformers.pipeline
的示例
>>> from transformers import AutoTokenizer, pipeline
>>> from optimum.onnxruntime import ORTModelForQuestionAnswering
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/roberta-base-squad2")
>>> model = ORTModelForQuestionAnswering.from_pretrained("optimum/roberta-base-squad2")
>>> onnx_qa = pipeline("question-answering", model=model, tokenizer=tokenizer)
>>> question, text = "Who was Jim Henson?", "Jim Henson was a nice puppet"
>>> pred = onnx_qa(question, text)
计算机视觉
以下ORT类可用于以下计算机视觉任务。
ORTModelForImageClassification
class optimum.onnxruntime.ORTModelForImageClassification
< source >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
用于图像分类任务的ONNX模型。此类官方支持beit, convnext, convnextv2, data2vec-vision, deit, dinov2, levit, mobilenet_v1, mobilenet_v2, mobilevit, poolformer, resnet, segformer, swin, swinv2, vit。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< source >( pixel_values: typing.Union[torch.Tensor, numpy.ndarray] return_dict: bool = True **kwargs )
参数
- pixel_values (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, num_channels, height, width)
,默认为None
) — 当前批次中图像对应的像素值。像素值可以通过使用AutoFeatureExtractor
从编码图像中获取。
ORTModelForImageClassification
的forward方法覆盖了__call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
图像分类示例
>>> import requests
>>> from PIL import Image
>>> from optimum.onnxruntime import ORTModelForImageClassification
>>> from transformers import AutoFeatureExtractor
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> preprocessor = AutoFeatureExtractor.from_pretrained("optimum/vit-base-patch16-224")
>>> model = ORTModelForImageClassification.from_pretrained("optimum/vit-base-patch16-224")
>>> inputs = preprocessor(images=image, return_tensors="np")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
使用 transformers.pipeline
的示例
>>> import requests
>>> from PIL import Image
>>> from transformers import AutoFeatureExtractor, pipeline
>>> from optimum.onnxruntime import ORTModelForImageClassification
>>> preprocessor = AutoFeatureExtractor.from_pretrained("optimum/vit-base-patch16-224")
>>> model = ORTModelForImageClassification.from_pretrained("optimum/vit-base-patch16-224")
>>> onnx_image_classifier = pipeline("image-classification", model=model, feature_extractor=preprocessor)
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> pred = onnx_image_classifier(url)
ORTModelForSemanticSegmentation
class optimum.onnxruntime.ORTModelForSemanticSegmentation
< source >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
ONNX 模型,用于语义分割,其顶部带有一个全MLP解码头,例如用于 ADE20k、CityScapes。此类官方支持maskformer、segformer。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< source >( pixel_values: typing.Union[torch.Tensor, numpy.ndarray] return_dict: bool = True **kwargs )
参数
- pixel_values (
Union[torch.Tensor, np.ndarray, None]
,形状为(batch_size, num_channels, height, width)
,默认为None
) — 当前批次中图像对应的像素值。像素值可以通过使用AutoFeatureExtractor
从编码图像中获取。
ORTModelForSemanticSegmentation
的forward方法覆盖了__call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
语义分割示例
>>> import requests
>>> from PIL import Image
>>> from optimum.onnxruntime import ORTModelForSemanticSegmentation
>>> from transformers import AutoFeatureExtractor
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> preprocessor = AutoFeatureExtractor.from_pretrained("optimum/segformer-b0-finetuned-ade-512-512")
>>> model = ORTModelForSemanticSegmentation.from_pretrained("optimum/segformer-b0-finetuned-ade-512-512")
>>> inputs = preprocessor(images=image, return_tensors="np")
>>> outputs = model(**inputs)
>>> logits = outputs.logits
使用 transformers.pipeline
的示例
>>> import requests
>>> from PIL import Image
>>> from transformers import AutoFeatureExtractor, pipeline
>>> from optimum.onnxruntime import ORTModelForSemanticSegmentation
>>> preprocessor = AutoFeatureExtractor.from_pretrained("optimum/segformer-b0-finetuned-ade-512-512")
>>> model = ORTModelForSemanticSegmentation.from_pretrained("optimum/segformer-b0-finetuned-ade-512-512")
>>> onnx_image_segmenter = pipeline("image-segmentation", model=model, feature_extractor=preprocessor)
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> pred = onnx_image_segmenter(url)
音频
以下ORT类可用于以下音频任务。
ORTModelForAudioClassification
class optimum.onnxruntime.ORTModelForAudioClassification
< source >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
ONNX 模型,其顶部带有一个序列分类头(在池化输出之上有一个线性层),用于SUPERB关键词识别等任务。此类官方支持audio_spectrogram_transformer, data2vec-audio, hubert, sew, sew-d, unispeech, unispeech_sat, wavlm, wav2vec2, wav2vec2-conformer。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< source >( input_values: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None attention_mask: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None input_features: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None return_dict: bool = True **kwargs )
参数
- input_values (
torch.Tensor
,形状为(batch_size, sequence_length)
) — 输入原始语音波形的浮点值。输入值可以通过使用AutoFeatureExtractor
从加载到数组中的音频文件中获取。
ORTModelForAudioClassification
的forward方法覆盖了__call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
音频分类示例
>>> from transformers import AutoFeatureExtractor
>>> from optimum.onnxruntime import ORTModelForAudioClassification
>>> from datasets import load_dataset
>>> import torch
>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("optimum/hubert-base-superb-ks")
>>> model = ORTModelForAudioClassification.from_pretrained("optimum/hubert-base-superb-ks")
>>> # audio file is decoded on the fly
>>> inputs = feature_extractor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_class_ids = torch.argmax(logits, dim=-1).item()
>>> predicted_label = model.config.id2label[predicted_class_ids]
使用 transformers.pipeline
的示例
>>> from transformers import AutoFeatureExtractor, pipeline
>>> from optimum.onnxruntime import ORTModelForAudioClassification
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("optimum/hubert-base-superb-ks")
>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")
>>> dataset = dataset.sort("id")
>>> model = ORTModelForAudioClassification.from_pretrained("optimum/hubert-base-superb-ks")
>>> onnx_ac = pipeline("audio-classification", model=model, feature_extractor=feature_extractor)
>>> pred = onnx_ac(dataset[0]["audio"]["array"])
ORTModelForAudioFrameClassification
class optimum.onnxruntime.ORTModelForAudioFrameClassification
< source >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
ONNX 模型,其顶部带有一个帧分类头,用于说话人分离等任务。此类官方支持data2vec-audio, unispeech_sat, wavlm, wav2vec2, wav2vec2-conformer。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< source >( input_values: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None return_dict: bool = True **kwargs )
参数
- input_values (
torch.Tensor
,形状为(batch_size, sequence_length)
) — 输入原始语音波形的浮点值。输入值可以通过使用AutoFeatureExtractor
从加载到数组中的音频文件中获取。
ORTModelForAudioFrameClassification
的forward方法覆盖了__call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
音频帧分类示例
>>> from transformers import AutoFeatureExtractor
>>> from optimum.onnxruntime import ORTModelForAudioFrameClassification
>>> from datasets import load_dataset
>>> import torch
>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("optimum/wav2vec2-base-superb-sd")
>>> model = ORTModelForAudioFrameClassification.from_pretrained("optimum/wav2vec2-base-superb-sd")
>>> inputs = feature_extractor(dataset[0]["audio"]["array"], return_tensors="pt", sampling_rate=sampling_rate)
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> probabilities = torch.sigmoid(logits[0])
>>> labels = (probabilities > 0.5).long()
>>> labels[0].tolist()
ORTModelForCTC
class optimum.onnxruntime.ORTModelForCTC
< 源 >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
ONNX 模型,顶部带有用于连接主义时间分类 (CTC) 的语言建模头。此类别正式支持 data2vec-audio、hubert、sew、sew-d、unispeech、unispeech_sat、wavlm、wav2vec2、wav2vec2-conformer。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< 源 >( input_values: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None return_dict: bool = True **kwargs )
参数
- input_values (
torch.Tensor
of shape(batch_size, sequence_length)
) — 输入原始语音波形浮点值。输入值可以使用AutoFeatureExtractor
从加载到数组中的音频文件获取。
ORTModelForCTC
forward 方法重写了 __call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
CTC 示例
>>> from transformers import AutoProcessor, HubertForCTC
>>> from optimum.onnxruntime import ORTModelForCTC
>>> from datasets import load_dataset
>>> import torch
>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate
>>> processor = AutoProcessor.from_pretrained("optimum/hubert-large-ls960-ft")
>>> model = ORTModelForCTC.from_pretrained("optimum/hubert-large-ls960-ft")
>>> # audio file is decoded on the fly
>>> inputs = processor(dataset[0]["audio"]["array"], sampling_rate=sampling_rate, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> predicted_ids = torch.argmax(logits, dim=-1)
>>> transcription = processor.batch_decode(predicted_ids)
ORTModelForSpeechSeq2Seq
用于 ONNX Runtime 推理的语音序列到序列模型,顶部带有语言建模头。此类正式支持 whisper、speech_to_text。
该模型继承自~onnxruntime.modeling_ort.ORTModelForConditionalGeneration
,请查看其文档以了解该库为其所有模型实现的通用方法(如下载或保存)。
此类应使用onnxruntime.modeling_ort.ORTModelForConditionalGeneration.from_pretrained
方法进行初始化。
forward
< 源 >( input_features: typing.Optional[torch.FloatTensor] = None attention_mask: typing.Optional[torch.LongTensor] = None decoder_input_ids: typing.Optional[torch.LongTensor] = None encoder_outputs: typing.Optional[typing.Tuple[typing.Tuple[torch.Tensor]]] = None past_key_values: typing.Optional[typing.Tuple[typing.Tuple[torch.Tensor]]] = None cache_position: typing.Optional[torch.Tensor] = None **kwargs )
参数
- input_features (
torch.FloatTensor
) — 从原始语音波形中提取的 Mel 特征。(batch_size, feature_size, encoder_sequence_length)
。 - decoder_input_ids (
torch.LongTensor
) — 解码器输入序列令牌在词汇表中的索引,形状为(batch_size, decoder_sequence_length)
。 - encoder_outputs (
torch.FloatTensor
) — 编码器last_hidden_state
,形状为(batch_size, encoder_sequence_length, hidden_size)
。 - past_key_values (
tuple(tuple(torch.FloatTensor), *可选*, 默认为
None)
— 包含用于加速解码的注意力块的预计算键和值隐藏状态。元组的长度为config.n_layers
,每个元组包含两个形状为(batch_size, num_heads, decoder_sequence_length, embed_size_per_head)
的张量和两个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)
的张量。
ORTModelForSpeechSeq2Seq
forward 方法重写了 __call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
文本生成示例
>>> from transformers import AutoProcessor
>>> from optimum.onnxruntime import ORTModelForSpeechSeq2Seq
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("optimum/whisper-tiny.en")
>>> model = ORTModelForSpeechSeq2Seq.from_pretrained("optimum/whisper-tiny.en")
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> inputs = processor.feature_extractor(ds[0]["audio"]["array"], return_tensors="pt")
>>> gen_tokens = model.generate(inputs=inputs.input_features)
>>> outputs = processor.tokenizer.batch_decode(gen_tokens)
使用 transformers.pipeline
的示例
>>> from transformers import AutoProcessor, pipeline
>>> from optimum.onnxruntime import ORTModelForSpeechSeq2Seq
>>> from datasets import load_dataset
>>> processor = AutoProcessor.from_pretrained("optimum/whisper-tiny.en")
>>> model = ORTModelForSpeechSeq2Seq.from_pretrained("optimum/whisper-tiny.en")
>>> speech_recognition = pipeline("automatic-speech-recognition", model=model, tokenizer=processor.tokenizer, feature_extractor=processor.feature_extractor)
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> pred = speech_recognition(ds[0]["audio"]["array"])
ORTModelForAudioXVector
class optimum.onnxruntime.ORTModelForAudioXVector
< 源 >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
ONNX 模型,顶部带有用于扬声器验证等任务的 XVector 特征提取头。此类正式支持 data2vec-audio、unispeech_sat、wavlm、wav2vec2、wav2vec2-conformer。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< 源 >( input_values: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None return_dict: bool = True **kwargs )
参数
- input_values (
torch.Tensor
of shape(batch_size, sequence_length)
) — 输入原始语音波形浮点值。输入值可以使用AutoFeatureExtractor
从加载到数组中的音频文件获取。
ORTModelForAudioXVector
forward 方法重写了 __call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
音频 XVector 示例
>>> from transformers import AutoFeatureExtractor
>>> from optimum.onnxruntime import ORTModelForAudioXVector
>>> from datasets import load_dataset
>>> import torch
>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_demo", "clean", split="validation")
>>> dataset = dataset.sort("id")
>>> sampling_rate = dataset.features["audio"].sampling_rate
>>> feature_extractor = AutoFeatureExtractor.from_pretrained("optimum/wav2vec2-base-superb-sv")
>>> model = ORTModelForAudioXVector.from_pretrained("optimum/wav2vec2-base-superb-sv")
>>> # audio file is decoded on the fly
>>> inputs = feature_extractor(
... [d["array"] for d in dataset[:2]["audio"]], sampling_rate=sampling_rate, return_tensors="pt", padding=True
... )
>>> with torch.no_grad():
... embeddings = model(**inputs).embeddings
>>> embeddings = torch.nn.functional.normalize(embeddings, dim=-1).cpu()
>>> cosine_sim = torch.nn.CosineSimilarity(dim=-1)
>>> similarity = cosine_sim(embeddings[0], embeddings[1])
>>> threshold = 0.7
>>> if similarity < threshold:
... print("Speakers are not the same!")
>>> round(similarity.item(), 2)
多模态
以下 ORT 类可用于以下多模态任务。
ORTModelForVision2Seq
class optimum.onnxruntime.ORTModelForVision2Seq
< 源 >( *args config: PretrainedConfig = None encoder_session: InferenceSession = None decoder_session: InferenceSession = None decoder_with_past_session: typing.Optional[ForwardRef('InferenceSession')] = None use_io_binding: typing.Optional[bool] = None generation_config: typing.Optional[ForwardRef('GenerationConfig')] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
带有语言建模头的 VisionEncoderDecoder 序列到序列模型,用于 ONNX Runtime 推理。此类正式支持 trocr 和 vision-encoder-decoder。
该模型继承自~onnxruntime.modeling_ort.ORTModelForConditionalGeneration
,请查看其文档以了解该库为其所有模型实现的通用方法(如下载或保存)。
此类应使用onnxruntime.modeling_ort.ORTModelForConditionalGeneration.from_pretrained
方法进行初始化。
forward
< 源 >( pixel_values: typing.Optional[torch.FloatTensor] = None decoder_input_ids: typing.Optional[torch.LongTensor] = None encoder_outputs: typing.Optional[typing.Tuple[typing.Tuple[torch.Tensor]]] = None past_key_values: typing.Optional[typing.Tuple[typing.Tuple[torch.Tensor]]] = None **kwargs )
参数
- pixel_values (
torch.FloatTensor
) — 从图像中提取的特征。此张量应为形状(batch_size, num_channels, height, width)
。 - decoder_input_ids (
torch.LongTensor
) — 解码器输入序列令牌在词汇表中的索引,形状为(batch_size, decoder_sequence_length)
。 - encoder_outputs (
torch.FloatTensor
) — 编码器last_hidden_state
,形状为(batch_size, encoder_sequence_length, hidden_size)
。 - past_key_values (
tuple(tuple(torch.FloatTensor), *可选*, 默认为
None)
— 包含用于加速解码的注意力块的预计算键和值隐藏状态。元组的长度为config.n_layers
,每个元组包含两个形状为(batch_size, num_heads, decoder_sequence_length, embed_size_per_head)
的张量和两个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)
的张量。
ORTModelForVision2Seq
forward 方法重写了 __call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
文本生成示例
>>> from transformers import AutoImageProcessor, AutoTokenizer
>>> from optimum.onnxruntime import ORTModelForVision2Seq
>>> from PIL import Image
>>> import requests
>>> processor = AutoImageProcessor.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
>>> tokenizer = AutoTokenizer.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
>>> model = ORTModelForVision2Seq.from_pretrained("nlpconnect/vit-gpt2-image-captioning", export=True)
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = processor(image, return_tensors="pt")
>>> gen_tokens = model.generate(**inputs)
>>> outputs = tokenizer.batch_decode(gen_tokens, skip_special_tokens=True)
使用 transformers.pipeline
的示例
>>> from transformers import AutoImageProcessor, AutoTokenizer, pipeline
>>> from optimum.onnxruntime import ORTModelForVision2Seq
>>> from PIL import Image
>>> import requests
>>> processor = AutoImageProcessor.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
>>> tokenizer = AutoTokenizer.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
>>> model = ORTModelForVision2Seq.from_pretrained("nlpconnect/vit-gpt2-image-captioning", export=True)
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> image_to_text = pipeline("image-to-text", model=model, tokenizer=tokenizer, feature_extractor=processor, image_processor=processor)
>>> pred = image_to_text(image)
ORTModelForPix2Struct
class optimum.onnxruntime.ORTModelForPix2Struct
< 源 >( *args config: PretrainedConfig = None encoder_session: InferenceSession = None decoder_session: InferenceSession = None decoder_with_past_session: typing.Optional[ForwardRef('InferenceSession')] = None use_io_binding: typing.Optional[bool] = None generation_config: typing.Optional[ForwardRef('GenerationConfig')] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
用于 ONNX Runtime 推理的 Pix2struct 模型,顶部带有语言建模头。此类正式支持 pix2struct。
该模型继承自~onnxruntime.modeling_ort.ORTModelForConditionalGeneration
,请查看其文档以了解该库为其所有模型实现的通用方法(如下载或保存)。
此类应使用onnxruntime.modeling_ort.ORTModelForConditionalGeneration.from_pretrained
方法进行初始化。
forward
< 源 >( flattened_patches: typing.Optional[torch.FloatTensor] = None attention_mask: typing.Optional[torch.LongTensor] = None decoder_input_ids: typing.Optional[torch.LongTensor] = None decoder_attention_mask: typing.Optional[torch.BoolTensor] = None encoder_outputs: typing.Optional[typing.Tuple[typing.Tuple[torch.Tensor]]] = None past_key_values: typing.Optional[typing.Tuple[typing.Tuple[torch.Tensor]]] = None **kwargs )
参数
- flattened_patches (
torch.FloatTensor
of shape(batch_size, seq_length, hidden_size)
) — 扁平化像素块。hidden_size
由以下公式获得:hidden_size
=num_channels
*patch_size
*patch_size
。像素块的扁平化过程由Pix2StructProcessor
完成。 - attention_mask (
torch.FloatTensor
of shape(batch_size, sequence_length)
, 可选) — 用于避免在填充令牌索引上执行注意力操作的掩码。掩码值选择在[0, 1]
中:- 1 表示**未掩盖**的令牌,
- 0 表示**已掩盖**的令牌。什么是注意力掩码?
- decoder_input_ids (
torch.LongTensor
of shape(batch_size, target_sequence_length)
, 可选) — 解码器输入序列令牌在词汇表中的索引。Pix2StructText 使用pad_token_id
作为decoder_input_ids
生成的起始令牌。如果使用past_key_values
,可选地只需输入最后的decoder_input_ids
(参见past_key_values
)。 - decoder_attention_mask (
torch.BoolTensor
of shape(batch_size, target_sequence_length)
, 可选) — 默认行为:生成一个忽略decoder_input_ids
中填充令牌的张量。默认情况下也将使用因果掩码。 - encoder_outputs (
tuple(tuple(torch.FloatTensor)
, 可选) — 元组包含 (last_hidden_state
,可选
: hidden_states,可选
: attentions)。形状为(batch_size, sequence_length, hidden_size)
的last_hidden_state
是编码器最后一层输出的隐藏状态序列。用于解码器的交叉注意力。 - past_key_values (
tuple(tuple(torch.FloatTensor), *可选*, 默认为
None)
— 包含用于加速解码的注意力块的预计算键和值隐藏状态。元组的长度为config.n_layers
,每个元组包含两个形状为(batch_size, num_heads, decoder_sequence_length, embed_size_per_head)
的张量和两个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)
的张量。
ORTModelForPix2Struct
forward 方法重写了 __call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
pix2struct 示例
>>> from transformers import AutoProcessor
>>> from optimum.onnxruntime import ORTModelForPix2Struct
>>> from PIL import Image
>>> import requests
>>> processor = AutoProcessor.from_pretrained("google/pix2struct-ai2d-base")
>>> model = ORTModelForPix2Struct.from_pretrained("google/pix2struct-ai2d-base", export=True, use_io_binding=True)
>>> url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> question = "What does the label 15 represent? (1) lava (2) core (3) tunnel (4) ash cloud"
>>> inputs = processor(images=image, text=question, return_tensors="pt")
>>> gen_tokens = model.generate(**inputs)
>>> outputs = processor.batch_decode(gen_tokens, skip_special_tokens=True)
自定义任务
以下 ORT 类可用于以下自定义任务。
ORTModelForCustomTasks
class optimum.onnxruntime.ORTModelForCustomTasks
< 源 >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
用于任何自定义任务的 ONNX 模型。它可以用于任何可能使用自定义输入和输出的单文件 ONNX 模型的推理加速。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
ORTModelForCustomTasks
forward 方法重写了 __call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
自定义任务示例(例如,一个将 pooler_output
作为输出的句子变换器)
>>> from transformers import AutoTokenizer
>>> from optimum.onnxruntime import ORTModelForCustomTasks
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/sbert-all-MiniLM-L6-with-pooler")
>>> model = ORTModelForCustomTasks.from_pretrained("optimum/sbert-all-MiniLM-L6-with-pooler")
>>> inputs = tokenizer("I love burritos!", return_tensors="np")
>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
>>> pooler_output = outputs.pooler_output
使用 transformers.pipelines
的示例(仅在任务受支持时)
>>> from transformers import AutoTokenizer, pipeline
>>> from optimum.onnxruntime import ORTModelForCustomTasks
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/sbert-all-MiniLM-L6-with-pooler")
>>> model = ORTModelForCustomTasks.from_pretrained("optimum/sbert-all-MiniLM-L6-with-pooler")
>>> onnx_extractor = pipeline("feature-extraction", model=model, tokenizer=tokenizer)
>>> text = "I love burritos!"
>>> pred = onnx_extractor(text)
ORTModelForFeatureExtraction
class optimum.onnxruntime.ORTModelForFeatureExtraction
< 源 >( *args config: PretrainedConfig = None session: InferenceSession = None use_io_binding: typing.Optional[bool] = None model_save_dir: typing.Union[str, pathlib.Path, tempfile.TemporaryDirectory, NoneType] = None **kwargs )
ONNX 模型用于特征提取任务。
此模型继承自 ORTModel,请查看其文档,了解库为其所有模型实现的通用方法(例如下载或保存)。
此类别应使用 onnxruntime.modeling_ort.ORTModel.from_pretrained() 方法进行初始化。
forward
< 源 >( input_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None attention_mask: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None token_type_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None position_ids: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None pixel_values: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None input_features: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None input_values: typing.Union[torch.Tensor, numpy.ndarray, NoneType] = None return_dict: bool = True **kwargs )
参数
- input_ids (
Union[torch.Tensor, np.ndarray, None]
of shape(batch_size, sequence_length)
, 默认为None
) — 词汇表中输入序列令牌的索引。索引可以通过AutoTokenizer
获取。有关详细信息,请参阅PreTrainedTokenizer.encode
和PreTrainedTokenizer.__call__
。什么是 input ID? - attention_mask (
Union[torch.Tensor, np.ndarray, None]
of shape(batch_size, sequence_length)
, 默认为None
) — 用于避免在填充令牌索引上执行注意力操作的掩码。掩码值选择在[0, 1]
中:- 1 表示**未掩盖**的令牌,
- 0 表示**已掩盖**的令牌。什么是注意力掩码?
- token_type_ids (
Union[torch.Tensor, np.ndarray, None]
of shape(batch_size, sequence_length)
, 默认为None
) — 片段令牌索引,用于指示输入的第一个和第二个部分。索引选择在[0, 1]
中:- 1 表示**句子 A** 的令牌,
- 0 表示**句子 B** 的令牌。什么是令牌类型 ID?
ORTModelForFeatureExtraction
forward 方法重写了 __call__
特殊方法。
尽管需要在函数内部定义前向传播的配方,但之后应该调用 Module
实例,而不是该实例,因为前者负责运行预处理和后处理步骤,而后者则静默忽略它们。
特征提取示例
>>> from transformers import AutoTokenizer
>>> from optimum.onnxruntime import ORTModelForFeatureExtraction
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/all-MiniLM-L6-v2")
>>> model = ORTModelForFeatureExtraction.from_pretrained("optimum/all-MiniLM-L6-v2")
>>> inputs = tokenizer("My name is Philipp and I live in Germany.", return_tensors="np")
>>> outputs = model(**inputs)
>>> last_hidden_state = outputs.last_hidden_state
>>> list(last_hidden_state.shape)
[1, 12, 384]
使用 transformers.pipeline
的示例
>>> from transformers import AutoTokenizer, pipeline
>>> from optimum.onnxruntime import ORTModelForFeatureExtraction
>>> tokenizer = AutoTokenizer.from_pretrained("optimum/all-MiniLM-L6-v2")
>>> model = ORTModelForFeatureExtraction.from_pretrained("optimum/all-MiniLM-L6-v2")
>>> onnx_extractor = pipeline("feature-extraction", model=model, tokenizer=tokenizer)
>>> text = "My name is Philipp and I live in Germany."
>>> pred = onnx_extractor(text)
稳定扩散
ORTDiffusionPipeline
ORTStableDiffusionPipeline
ORTStableDiffusionImg2ImgPipeline
class optimum.utils.dummy_diffusers_objects.ORTStableDiffusionImg2ImgPipeline
< 源 >( *args **kwargs )
ORTStableDiffusionInpaintPipeline
class optimum.utils.dummy_diffusers_objects.ORTStableDiffusionInpaintPipeline
< 源 >( *args **kwargs )
ORTStableDiffusionXLPipeline
ORTStableDiffusionXLImg2ImgPipeline
class optimum.utils.dummy_diffusers_objects.ORTStableDiffusionXLImg2ImgPipeline
< 源 >( *args **kwargs )
ORTLatentConsistencyModelPipeline
class optimum.utils.dummy_diffusers_objects.ORTLatentConsistencyModelPipeline
< 源 >( *args **kwargs )