# ExecuTorch

[`ExecuTorch`](https://github.com/pytorch/executorch)は、ウェアラブルデバイス、組み込みデバイス、マイクロコントローラーを含むモバイルおよびエッジデバイス全体で、オンデバイス推論を可能にするエンドツーエンドのソリューションです。PyTorchエコシステムの一部であり、ポータビリティ、生産性、パフォーマンスに重点を置いて、PyTorchモデルのデプロイメントをサポートします。

ExecuTorchでは、バックエンドの委譲、ユーザー定義のコンパイラ変換、メモリプランニングなど、モデル、デバイス、および/またはユースケースに固有の最適化を実行するための明確に定義されたエントリポイントが導入されています。ExecuTorchを使用してエッジデバイス上でPyTorchモデルを実行するための準備の最初のステップは、モデルのエクスポートです。これは、[`torch.export`](https://pytorch.org/docs/stable/export.html)と呼ばれるPyTorch APIを使用して実現されます。

## ExecuTorch 統合[[transformers.TorchExportableModuleWithStaticCache]]

🤗 Transformers を `torch.export` を使用してエクスポートできるようにするための統合ポイントが開発中です。この統合の目的は、エクスポートを可能にすることだけでなく、エクスポートされた成果物がさらに低レベル化・最適化され、`ExecuTorch` 上で効率的に実行されることを保証することです。特にモバイルやエッジユースケースにおいてです。

#### transformers.TorchExportableModuleWithStaticCache[[transformers.TorchExportableModuleWithStaticCache]]

```python
transformers.TorchExportableModuleWithStaticCache(model: PreTrainedModel, batch_size: int | None = None, max_cache_len: int | None = None, device: typing.Optional[torch.device] = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/executorch.py#L445)

`PreTrainedModel` を `torch.export` でエクスポート可能にするためのレシピモジュールです。特に、デコーダーオンリーの LM を `StaticCache` へエクスポートする際に使用します。このモジュールにより、エクスポートされたモデルが `ExecuTorch` でのさらなるローワーおよび実行と互換性を持つことを保証します。

注: このクラスは、`torch.export` を使用したエクスポートプロセスを、`ExecuTorch` でモデルをさらにローワーリングし、効率的に実行できるようにすることを保証する形でサポートするよう、特に設計されています。

#### forward[[transformers.TorchExportableModuleWithStaticCache.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, cache_position: typing.Optional[torch.Tensor] = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/executorch.py#L540)

**パラメータ:**

input_ids (`torch.Tensor`) : モジュールへの現在の入力トークンIDを表すTensor。

inputs_embeds (`torch.Tensor`) : モジュールへの現在の入力埋め込みを表すテンソル。

cache_position (`torch.Tensor`) : キャッシュ内の現在の入力位置を表すテンソル。

**戻り値:** `torch.Tensor`

モデルからのLogits出力。

ExecuTorch ランタイムと互換性のあるモジュールのフォワードパス。

この forward アダプターには、主に2つの目的があります。

1. **モデルを`torch.export`に互換性のある状態にする**: アダプターは、`Cache`のようなサポートされていないオブジェクトをグラフの入力および出力から隠蔽することで、`torch.export`を使用してモデルをエクスポートする際に問題が発生しないようにします。

2. **`ExecuTorch`ランタイムとの互換性を確保する**: アダプターは、モデルのフォワードシグネチャが`executorch/extension/llm/runner`のものと一致することを確認し、エクスポートされたモデルが`ExecuTorch`でそのまま実行できることを保証します。

#### transformers.convert_and_export_with_cache[[transformers.convert_and_export_with_cache]]

```python
transformers.convert_and_export_with_cache(model: PreTrainedModel, example_input_ids: typing.Optional[torch.Tensor] = None, example_cache_position: typing.Optional[torch.Tensor] = None, dynamic_shapes: dict | None = None, strict: bool | None = None)
```

[ソース](https://github.com/huggingface/transformers/blob/main/src/transformers/integrations/executorch.py#L757)

**パラメータ:**

model (`PreTrainedModel`) : エクスポート対象の事前学習済みモデル。

example_input_ids (`Optional[torch.Tensor]`) : `torch.export`で使用される例示用の入力トークンIDです。

example_cache_position (`Optional[torch.Tensor]`) : `torch.export` が使用する現在のキャッシュ位置の例。

dynamic_shapes(`Optional[dict]`) : `torch.export`で使用される動的な形状。

strict(`Optional[bool]`) : `torch.export` に `dynamo` を使用するように指示するフラグ。

**戻り値:** エクスポートされたプログラム (`torch.export.ExportedProgram`)

`torch.export` によって生成されたエクスポート済みプログラム。

`PreTrainedModel` をエクスポート可能なモジュールに変換し、`torch.export` を使用してエクスポートします。エクスポートされたモデルが `ExecuTorch` と互換性があることを確認してください。

