# ExecuTorch

[`ExecuTorch`](https://github.com/pytorch/executorch) — это комплексное решение для обеспечения возможностей инференса на устройстве на мобильных и периферийных устройствах, включая носимые устройства, встраиваемые системы и микроконтроллеры. Оно входит в экосистему PyTorch и поддерживает развертывание моделей PyTorch с акцентом на переносимость, продуктивность и производительность.

ExecuTorch предлагает чётко определённые точки входа для выполнения оптимизаций, специфичных для модели, устройства и/или сценария использования, таких как делегирование бэкенду, пользовательские преобразования компилятора, планирование памяти и другие. Первый шаг в подготовке модели PyTorch к выполнению на периферийном устройстве с помощью ExecuTorch — экспорт модели. Это достигается с помощью API PyTorch [`torch.export`](https://pytorch.org/docs/stable/export.html).

## Интеграция с 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`, в частности для decoder-only 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`) : тензор, представляющий текущий идентификатор входного токена для модуля.

inputs_embeds (`torch.Tensor`) : тензор, представляющий текущие входные эмбеддинги для модуля.

cache_position (`torch.Tensor`) : тензор, представляющий текущую позицию входа в кэше.

**Возвращает:** `torch.Tensor`

Вывод logits из модели.

Прямой проход модуля, совместимый с рантаймом ExecuTorch.

Этот адаптер прямого прохода служит двум основным целям:

1. **Совместимость модели с `torch.export`**: адаптер скрывает неподдерживаемые объекты, такие как `Cache`, от входных и выходных данных графа, что позволяет экспортировать модель с помощью `torch.export` без возникновения проблем.

2. **Обеспечение совместимости с рантаймом `ExecuTorch`**: адаптер сопоставляет сигнатуру forward модели с сигнатурой в `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`.

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`.

