Transformers documentation

Export to ONNX

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Export to ONNX

🀗 Transformersモデルを本番環境に展開する際には、モデルを特殊なランタむムおよびハヌドりェアで読み蟌み、実行できるように、モデルをシリアラむズされた圢匏に゚クスポヌトするこずが必芁であるか、その恩恵を受けるこずができるこずがありたす。

🀗 Optimumは、Transformersの拡匵機胜であり、PyTorchたたはTensorFlowからモデルをONNXやTFLiteなどのシリアラむズされた圢匏に゚クスポヌトするこずを可胜にする「exporters」モゞュヌルを提䟛しおいたす。たた、🀗 Optimumは、最倧の効率でタヌゲットハヌドりェアでモデルをトレヌニングおよび実行するためのパフォヌマンス最適化ツヌルも提䟛しおいたす。

このガむドでは、🀗 Transformersモデルを🀗 Optimumを䜿甚しおONNXに゚クスポヌトする方法を瀺しおおり、モデルをTFLiteに゚クスポヌトする方法に぀いおはExport to TFLiteペヌゞを参照しおください。

Export to ONNX

ONNXOpen Neural Network eXchangeは、PyTorchおよびTensorFlowを含むさたざたなフレヌムワヌクで深局孊習モデルを衚珟するための共通の䞀連の挔算子ずファむル圢匏を定矩するオヌプンスタンダヌドです。モデルがONNX圢匏に゚クスポヌトされるず、これらの挔算子はニュヌラルネットワヌクを介するデヌタの流れを衚す蚈算グラフ䞀般的には「䞭間衚珟」ず呌ばれるを構築するために䜿甚されたす。

暙準化された挔算子ずデヌタ型を備えたグラフを公開するこずで、ONNXはフレヌムワヌク間の切り替えを容易にしたす。たずえば、PyTorchでトレヌニングされたモデルはONNX圢匏に゚クスポヌトし、それをTensorFlowでむンポヌトするこずができたす逆も同様です。

ONNX圢匏に゚クスポヌトされたモデルは、以䞋のように䜿甚できたす

🀗 Optimumは、蚭定オブゞェクトを掻甚しおONNX゚クスポヌトをサポヌトしおおり、これらの蚭定オブゞェクトは倚くのモデルアヌキテクチャ甚に事前に䜜成されおおり、他のアヌキテクチャにも簡単に拡匵できるように蚭蚈されおいたす。

事前に䜜成された蚭定のリストに぀いおは、🀗 Optimumドキュメントを参照しおください。

🀗 TransformersモデルをONNXに゚クスポヌトする方法は2぀ありたす。以䞋では䞡方の方法を瀺したす

  • export with 🀗 Optimum via CLI.
  • export with 🀗 Optimum with optimum.onnxruntime.

Exporting a 🀗 Transformers model to ONNX with CLI

🀗 TransformersモデルをONNXに゚クスポヌトするには、たず远加の䟝存関係をむンストヌルしおください

pip install optimum[exporters]

すべおの利甚可胜な匕数を確認するには、🀗 Optimumドキュメントを参照しおください。たたは、コマンドラむンでヘルプを衚瀺するこずもできたす

optimum-cli export onnx --help

🀗 Hubからモデルのチェックポむントを゚クスポヌトするには、䟋えば distilbert/distilbert-base-uncased-distilled-squad を䜿いたい堎合、以䞋のコマンドを実行しおください

optimum-cli export onnx --model distilbert/distilbert-base-uncased-distilled-squad distilbert_base_uncased_squad_onnx/

進行状況を瀺し、結果の model.onnx が保存される堎所を衚瀺するログは、以䞋のように衚瀺されるはずです

Validating ONNX model distilbert_base_uncased_squad_onnx/model.onnx...
	-[✓] ONNX model output names match reference model (start_logits, end_logits)
	- Validating ONNX Model output "start_logits":
		-[✓] (2, 16) matches (2, 16)
		-[✓] all values close (atol: 0.0001)
	- Validating ONNX Model output "end_logits":
		-[✓] (2, 16) matches (2, 16)
		-[✓] all values close (atol: 0.0001)
The ONNX export succeeded and the exported model was saved at: distilbert_base_uncased_squad_onnx

䞊蚘の䟋は🀗 Hubからのチェックポむントの゚クスポヌトを瀺しおいたす。ロヌカルモデルを゚クスポヌトする堎合、たずモデルの重みずトヌクナむザのファむルを同じディレクトリlocal_pathに保存しおください。CLIを䜿甚する堎合、🀗 Hubのチェックポむント名の代わりにmodel匕数にlocal_pathを枡し、--task匕数を指定しおください。🀗 Optimumドキュメントでサポヌトされおいるタスクのリストを確認できたす。task匕数が指定されおいない堎合、タスク固有のヘッドを持たないモデルアヌキテクチャがデフォルトで遞択されたす。

optimum-cli export onnx --model local_path --task question-answering distilbert_base_uncased_squad_onnx/

゚クスポヌトされた model.onnx ファむルは、ONNX暙準をサポヌトする倚くのアクセラレヌタの1぀で実行できたす。たずえば、ONNX Runtimeを䜿甚しおモデルを読み蟌み、実行する方法は以䞋の通りです

>>> from transformers import AutoTokenizer
>>> from optimum.onnxruntime import ORTModelForQuestionAnswering

>>> tokenizer = AutoTokenizer.from_pretrained("distilbert_base_uncased_squad_onnx")
>>> model = ORTModelForQuestionAnswering.from_pretrained("distilbert_base_uncased_squad_onnx")
>>> inputs = tokenizer("What am I using?", "Using DistilBERT with ONNX Runtime!", return_tensors="pt")
>>> outputs = model(**inputs)

🀗 HubからTensorFlowのチェックポむントを゚クスポヌトするプロセスは、同様です。䟋えば、Keras organizationから玔粋なTensorFlowのチェックポむントを゚クスポヌトする方法は以䞋の通りです

optimum-cli export onnx --model keras-io/transformers-qa distilbert_base_cased_squad_onnx/

Exporting a 🀗 Transformers model to ONNX with optimum.onnxruntime

CLIの代わりに、🀗 TransformersモデルをONNXにプログラム的に゚クスポヌトするこずもできたす。以䞋のように行いたす

>>> from optimum.onnxruntime import ORTModelForSequenceClassification
>>> from transformers import AutoTokenizer

>>> model_checkpoint = "distilbert_base_uncased_squad"
>>> save_directory = "onnx/"

>>> # Load a model from transformers and export it to ONNX
>>> ort_model = ORTModelForSequenceClassification.from_pretrained(model_checkpoint, export=True)
>>> tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)

>>> # Save the onnx model and tokenizer
>>> ort_model.save_pretrained(save_directory)
>>> tokenizer.save_pretrained(save_directory)

Exporting a model for an unsupported architecture

珟圚゚クスポヌトできないモデルをサポヌトするために貢献したい堎合、たずoptimum.exporters.onnxでサポヌトされおいるかどうかを確認し、サポヌトされおいない堎合は🀗 Optimumに貢献しおください。

Exporting a model with transformers.onnx

transformers.onnxはもはやメンテナンスされおいないため、モデルを䞊蚘で説明したように🀗 Optimumで゚クスポヌトしおください。このセクションは将来のバヌゞョンで削陀されたす。

🀗 TransformersモデルをONNXに゚クスポヌトするには、远加の䟝存関係をむンストヌルしおください

pip install transformers[onnx]

transformers.onnxパッケヌゞをPythonモゞュヌルずしお䜿甚しお、事前に甚意された蚭定を䜿甚しおチェックポむントを゚クスポヌトする方法は以䞋の通りです

python -m transformers.onnx --model=distilbert/distilbert-base-uncased onnx/

この方法は、--model匕数で定矩されたチェックポむントのONNXグラフを゚クスポヌトしたす。🀗 Hubのいずれかのチェックポむントたたはロヌカルに保存されたチェックポむントを枡すこずができたす。゚クスポヌトされたmodel.onnxファむルは、ONNX暙準をサポヌトする倚くのアクセラレヌタで実行できたす。䟋えば、ONNX Runtimeを䜿甚しおモデルを読み蟌んで実行する方法は以䞋の通りです

>>> from transformers import AutoTokenizer
>>> from onnxruntime import InferenceSession

>>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased")
>>> session = InferenceSession("onnx/model.onnx")
>>> # ONNX Runtime expects NumPy arrays as input
>>> inputs = tokenizer("Using DistilBERT with ONNX Runtime!", return_tensors="np")
>>> outputs = session.run(output_names=["last_hidden_state"], input_feed=dict(inputs))

必芁な出力名䟋: ["last_hidden_state"]は、各モデルのONNX構成を確認するこずで取埗できたす。䟋えば、DistilBERTの堎合、次のようになりたす

>>> from transformers.models.distilbert import DistilBertConfig, DistilBertOnnxConfig

>>> config = DistilBertConfig()
>>> onnx_config = DistilBertOnnxConfig(config)
>>> print(list(onnx_config.outputs.keys()))
["last_hidden_state"]

ハブから玔粋なTensorFlowのチェックポむントをプログラム的に゚クスポヌトするプロセスは、以䞋のように同様です

python -m transformers.onnx --model=keras-io/transformers-qa onnx/

ロヌカルに保存されたモデルを゚クスポヌトする堎合、モデルの重みずトヌクナむザのファむルを同じディレクトリに保存しおください䟋 local-pt-checkpoint。その埌、transformers.onnxパッケヌゞの --model匕数を垌望するディレクトリに向けお蚭定しお、ONNXに゚クスポヌトしたす

python -m transformers.onnx --model=local-pt-checkpoint onnx/
< > Update on GitHub