# LiteRT

[LiteRT](https://ai.google.dev/edge/litert) (المعروف سابقًا باسم TensorFlow Lite) هو وقت التشغيل الخاص بشركة Google للاستدلال على الجهاز. صيغة النموذج هي `.tflite`، وتُوزَّع نماذج اللغة كملف واحد بصيغة `.litertlm` مخصص لوقت التشغيل [LiteRT-LM](https://ai.google.dev/edge/litert-lm).

تصدير نموذج Transformers باستخدام [litert-torch](https://github.com/google-ai-edge/litert-torch). يقوم بتحويل رسم [torch.export](https://docs.pytorch.org/docs/stable/export.html) إلى LiteRT مباشرة، وليس عبر ONNX أو `SavedModel` الخاص بـ TensorFlow.

```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/ar/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/ar/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` الأقدم عند Python 3.11.

> [!NOTE]
> وثّق إصدار Transformers v4 الأمر `optimum-cli export tflite`، الذي كان يقوم بالتحويل عبر TensorFlow. وقد تمّ إزالته مع دعم TensorFlow في الإصدار v5 ([#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)

