# LiteRT

[LiteRT](https://ai.google.dev/edge/litert)（旧 TensorFlow Lite）は、オンデバイス推論のための Google のランタイムです。モデルの形式は `.tflite` であり、言語モデルは [LiteRT-LM](https://ai.google.dev/edge/litert-lm) ランタイム向けに `.litertlm` ファイルとして 1 つのファイルで提供されます。

[litert-torch](https://github.com/google-ai-edge/litert-torch) を使用して Transformers モデルをエクスポートします。[torch.export](https://docs.pytorch.org/docs/stable/export.html) グラフを ONNX や TensorFlow の `SavedModel` を介さず、直接 LiteRT に低レベル化します。

```bash
pip install litert-torch
```

`export_hf` は Hub から言語モデルを読み込み、デフォルトで重みを int8 に量子化し、`model.litertlm` を書き出します。

```bash
litert-torch export_hf \
    --model="HuggingFaceTB/SmolLM2-135M-Instruct" \
    --output_dir="./smollm2_litertlm"
```

`litert_torch.convert` は、サンプル入力を用いてモデルをトレースし、`.tflite` ファイルをエクスポートします。返されるオブジェクトはモデルを実行するため、その場でエクスポートを確認できます。

```py
import litert_torch
from transformers import AutoModelForMaskedLM, AutoTokenizer

model_id = "google-bert/bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForMaskedLM.from_pretrained(model_id).eval()
inputs = tokenizer("Paris is the [MASK] of France.", return_tensors="pt", padding="max_length", max_length=128)

litert_model = litert_torch.convert(model, sample_kwargs=dict(inputs))
litert_model.export("bert.tflite")

outputs = litert_model(**{name: tensor.numpy() for name, tensor in inputs.items()})
mask_index = inputs["input_ids"][0].tolist().index(tokenizer.mask_token_id)
print(tokenizer.decode(outputs["logits"][0, mask_index].argmax()))  # capital
```

## Transformers の統合

1. [from_pretrained()](/docs/transformers/main/ja/main_classes/model#transformers.PreTrainedModel.from_pretrained) は、safetensors 形式でモデルの重みをロードします。
2. litert-torch は [torch.export](https://docs.pytorch.org/docs/stable/export.html) を実行し、グラフを LiteRT オペレーターに低レベル化します。`export_hf` は、KV キャッシュ、prefill と decode のシグネチャ、および int8 量子化を追加します。
3. [AutoTokenizer](/docs/transformers/main/ja/model_doc/auto#transformers.AutoTokenizer) はトークナイザーを読み込みます。`export_hf` は、トークナイザーとチャットテンプレートを`.litertlm`ファイルにパッケージングします。
4. 実行時において、`.tflite` は LiteRT 上で、`.litertlm` は LiteRT-LM 上で実行されます。これらは Kotlin、Swift、C++、または Python（`ai-edge-litert` および `litert-lm-api`）から呼び出すことができます。旧バージョンの `tflite-runtime` wheels は Python 3.11 までしかサポートされていません。

> [!NOTE]
> Transformers v4 では、TensorFlow 経由で変換を行う `optimum-cli export tflite` が記載されていました。v5 で TensorFlow サポートが削除されたことに伴い（[#40760](https://github.com/huggingface/transformers/pull/40760)）、このコマンドも削除され、Optimum 2.x には含まれていません。

## リソース

- [LiteRT](https://ai.google.dev/edge/litert)と[LiteRT-LM](https://ai.google.dev/edge/litert-lm)のドキュメント
- [PyTorchモデルの変換](https://ai.google.dev/edge/litert/conversion/pytorch/overview)と[GenAIモデル](https://ai.google.dev/edge/litert/conversion/pytorch/genai)のガイド

