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://onnxruntime.ai/docs/execution-providers/。 - providers (
Optional[Sequence[str]]
, 預設為None
) — 用於載入模型的執行提供程式列表。此引數優先於provider
引數。 - provider_options (
Optional[Dict[str, Any]]
, 預設為None
) — 與所使用的提供程式對應的提供程式選項字典。有關每個提供程式的可用選項,請參閱:https://onnxruntime.ai/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 )