⚠️ Important : Mise à jour de l'API d'inférence LLM
Les implémentations Android et iOS de l'API d'inférence LLM sont désormais obsolètes. Le Web N'EST PAS obsolète
Migrez vos projets mobiles vers LiteRT-LM pour assurer la continuité de la compatibilité et des performances.
L'API d'inférence LLM vous permet d'exécuter des grands modèles de langage (LLM) entièrement sur l'appareil. Vous pouvez l'utiliser pour effectuer un large éventail de tâches, telles que la génération de texte, la récupération d'informations en langage naturel et la synthèse de documents. La tâche fournit une compatibilité intégrée pour plusieurs grands modèles de langage de texte à texte. Vous pouvez ainsi appliquer les derniers modèles d'IA générative sur l'appareil à vos applications et produits.
La tâche fournit une compatibilité intégrée pour différents LLM. Les modèles hébergés sur la page de la communauté LiteRT sont disponibles dans un format compatible avec MediaPipe et ne nécessitent aucune étape de conversion ou de compilation supplémentaire.
Vous pouvez utiliser LiteRT Torch pour
exporter des modèles PyTorch vers des modèles LiteRT à signatures multiples (tflite), qui sont
regroupés avec des paramètres de tokenisation pour créer des groupes de tâches. Les modèles convertis avec LiteRT Torch sont compatibles avec l'API d'inférence LLM et peuvent s'exécuter sur le backend du processeur, ce qui les rend adaptés aux applications Android et iOS.
Premiers pas
Commencez à utiliser cette tâche en suivant l'un de ces guides d'implémentation pour votre plate-forme cible. Ces guides spécifiques à la plate-forme vous expliquent comment implémenter de base cette tâche, avec des exemples de code qui utilisent un modèle disponible et les options de configuration recommandées :
Web:
Android:
iOS
Détails de la tâche
Cette section décrit les fonctionnalités, les entrées, les sorties et les options de configuration de cette tâche.
Fonctionnalités
L'API d'inférence LLM contient les principales fonctionnalités suivantes :
- Génération de texte à partir de texte : générez du texte à partir d'une requête textuelle.
- Sélection de LLM : appliquez plusieurs modèles pour adapter l'application à vos cas d'utilisation spécifiques. Vous pouvez également réentraîner le modèle et lui appliquer des pondérations personnalisées.
- Compatibilité avec LoRA : étendez et personnalisez la fonctionnalité LLM avec le modèle LoRA en l'entraînant sur l'ensemble de vos données ou en utilisant des modèles LoRA précompilés préparés par la communauté Open Source (non compatible avec les modèles convertis avec l'API générative LiteRT Torch).
| Entrées de tâche | Sorties de tâche |
|---|---|
L'API d'inférence LLM accepte les entrées suivantes :
|
L'API d'inférence LLM génère les résultats suivants :
|
Options de configuration
Cette tâche comporte les options de configuration suivantes :
| Nom de l'option | Description | Plage de valeurs | Valeur par défaut |
|---|---|---|---|
modelPath |
Chemin d'accès à l'emplacement où le modèle est stocké dans le répertoire du projet. | CHEMIN | N/A |
maxTokens |
Nombre maximal de jetons (jetons d'entrée + jetons de sortie) gérés par le modèle. | Nombre entier | 512 |
topK |
Nombre de jetons que le modèle prend en compte à chaque étape de la génération. Limite les prédictions aux k jetons les plus probables. | Nombre entier | 40 |
temperature |
Quantité d'aléatoire introduite lors de la génération. Une température plus élevée génère un texte plus créatif, tandis qu'une température plus basse produit une génération plus prévisible. | Float | 0,8 |
randomSeed |
Seed aléatoire utilisé lors de la génération de texte. | Nombre entier | 0 |
loraPath |
Chemin absolu du modèle LoRA localement sur l'appareil. Remarque : Cette option n'est compatible qu'avec les modèles GPU. | CHEMIN | N/A |
resultListener |
Définit l'écouteur de résultats pour recevoir les résultats de manière asynchrone. Ne s'applique que lorsque vous utilisez la méthode de génération asynchrone. | N/A | N/A |
errorListener |
Définit un écouteur d'erreurs facultatif. | N/A | N/A |
Modèles
L'API d'inférence LLM est compatible avec de nombreux grands modèles de langage de texte à texte, y compris une compatibilité intégrée pour plusieurs modèles optimisés pour s'exécuter sur les navigateurs et les appareils mobiles. Ces modèles légers peuvent être utilisés pour exécuter des inférences entièrement sur l'appareil.
Avant d'initialiser l'API d'inférence LLM, téléchargez un modèle et stockez le fichier dans le répertoire de votre projet. Vous pouvez utiliser un modèle préconverti à partir du dépôt LiteRT Community HuggingFace ou convertir un modèle dans un format compatible avec MediaPipe à l'aide du convertisseur génératif AI Edge Torch.
Si vous ne disposez pas encore d'un LLM à utiliser avec l'API d'inférence LLM, commencez par l'un des modèles suivants.
Gemma-3n
Gemma-3n E2B et E4B sont les derniers modèles de la famille Gemma de modèles ouverts, légers et de pointe basés sur les mêmes recherches et technologies que celles utilisées pour créer les Gemini. Les modèles Gemma 3n sont conçus pour une exécution efficace sur les appareils à faibles ressources. Ils sont capables d'accepter des entrées multimodales, de gérer des entrées de texte, d'image et audio, et de générer des sorties de texte.
Les modèles Gemma 3n utilisent une technologie d'activation sélective des paramètres pour réduire les besoins en ressources. Cette technique permet aux modèles de fonctionner avec une taille effective de 2 milliards et 4 milliards de paramètres, ce qui est inférieur au nombre total de paramètres qu'ils contiennent.
Les modèles Gemma-3n E2B et E4B de HuggingFace sont disponibles au format .litertlm et sont prêts à être utilisés avec l'API d'inférence LLM pour Android et le Web.
Gemma-3 1B
Gemma-3 1B est le modèle le plus léger de la famille Gemma de modèles ouverts, légers et de pointe basés sur les mêmes recherches et technologies que celles utilisées pour créer les modèles Gemini. Le modèle contient 1 milliard de paramètres et des pondérations ouvertes.
Le modèle Gemma-3 1B de
HuggingFace est disponible
au format
.task/.litertlm
et est prêt à être utilisé avec l'API d'inférence LLM pour les applications Android et Web.
Lorsque vous exécutez Gemma-3 1B avec l'API d'inférence LLM, configurez les options suivantes en conséquence :
preferredBackend: utilisez cette option pour choisir entre un backendCPUouGPU. Cette option n'est disponible que pour Android.supportedLoraRanks: l'API d'inférence LLM ne peut pas être configurée pour prendre en charge l'adaptation à faible rang (LoRA) avec le modèle Gemma-3 1B. N'utilisez pas les optionssupportedLoraRanksniloraRanks.maxTokens: la valeur demaxTokensdoit correspondre à la taille du contexte intégrée au modèle. On parle également de cache clé-valeur (KV) ou de longueur de contexte.numResponses: doit toujours être 1. Cette option n'est disponible que pour le Web.
Lorsque vous exécutez Gemma-3 1B sur des applications Web, l'initialisation peut entraîner un blocage prolongé dans le thread actuel. Si possible, exécutez toujours le modèle à partir d'un thread de travail.
Gemma-2 2B
Gemma-2 2B est une variante 2B de Gemma-2 et fonctionne sur toutes les plates-formes.
Le modèle contient 2 milliards de paramètres et des pondérations ouvertes. Gemma-2 2B est connu pour ses compétences de raisonnement de pointe pour les modèles de sa catégorie.
Conversion de modèle PyTorch
Les modèles génératifs PyTorch peuvent être convertis dans un format compatible avec MediaPipe à l'aide de l'API générative LiteRT Torch. Vous pouvez utiliser l'API pour convertir des modèles PyTorch en modèles LiteRT (TensorFlow Lite) à signatures multiples. Pour en savoir plus sur le mappage et l'exportation de modèles, consultez la page GitHub de LiteRT Torch.
La conversion d'un modèle PyTorch avec l'API générative LiteRT Torch API implique les étapes suivantes :
- Téléchargez les points de contrôle du modèle PyTorch.
- Utilisez l'API générative LiteRT Torch pour créer, convertir et quantifier le modèle dans un format de fichier compatible avec MediaPipe (
.tflite). - Créez un groupe de tâches (
.task/.litertlm) à partir du fichier tflite et du tokenizer de modèle.
Le convertisseur génératif Torch ne convertit que pour le processeur et nécessite une machine Linux avec au moins 64 Go de RAM.
Pour créer un groupe de tâches, utilisez le script de regroupement pour créer un groupe de tâches. Le processus de regroupement regroupe le modèle mappé avec des métadonnées supplémentaires (par exemple, des paramètres de tokenisation) nécessaires pour exécuter une inférence de bout en bout.
Le processus de regroupement de modèles nécessite le package MediaPipe PyPI. Le script de conversion est disponible dans tous les packages MediaPipe après 0.10.14.
Installez et importez les dépendances avec les éléments suivants :
$ python3 -m pip install mediapipe
Utilisez la bibliothèque genai.bundler pour regrouper le modèle :
import mediapipe as mp
from mediapipe.tasks.python.genai import bundler
config = bundler.BundleConfig(
tflite_model=TFLITE_MODEL,
tokenizer_model=TOKENIZER_MODEL,
start_token=START_TOKEN,
stop_tokens=STOP_TOKENS,
output_filename=OUTPUT_FILENAME,
enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
| Paramètre | Description | Valeurs acceptées |
|---|---|---|
tflite_model |
Chemin d'accès au modèle TFLite exporté par AI Edge. | CHEMIN |
tokenizer_model |
Chemin d'accès au modèle de tokenisation SentencePiece. | CHEMIN |
start_token |
Jeton de début spécifique au modèle. Le jeton de début doit être présent dans le modèle de tokenisation fourni. | STRING |
stop_tokens |
Jetons d'arrêt spécifiques au modèle. Les jetons d'arrêt doivent être présents dans le modèle de tokenisation fourni. | LIST[STRING] |
output_filename |
Nom du fichier de groupe de tâches de sortie. | CHEMIN |
Personnalisation LoRA
L'API d'inférence LLM Mediapipe peut être configurée pour prendre en charge l'adaptation à faible rang (LoRA) pour les grands modèles de langage. Grâce à des modèles LoRA affinés, les développeurs peuvent personnaliser le comportement des LLM grâce à un processus d'entraînement économique.La compatibilité LoRA de l'API d'inférence LLM fonctionne pour toutes les variantes Gemma et les modèles Phi-2 pour le backend GPU, avec des pondérations LoRA applicables uniquement aux couches d'attention. Cette implémentation initiale sert d'API expérimentale pour les développements futurs, avec l'intention de prendre en charge davantage de modèles et différents types de couches dans les prochaines mises à jour.
Préparer les modèles LoRA
Suivez les instructions sur
HuggingFace
pour entraîner un modèle LoRA affiné sur votre propre ensemble de données avec les types de modèles compatibles,
Gemma ou Phi-2. Les modèles Gemma-2 2B, Gemma
2B et
Phi-2 sont tous disponibles sur
HuggingFace au format safetensors. Étant donné que l'API d'inférence LLM n'est compatible avec LoRA que sur les couches d'attention, ne spécifiez que les couches d'attention lors de la création de LoraConfig, comme suit :
# For Gemma
from peft import LoraConfig
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)
# For Phi-2
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)
Pour les tests, des modèles LoRA affinés accessibles au public et adaptés à l'API d'inférence LLM sont disponibles sur HuggingFace. Par exemple, monsterapi/gemma-2b-lora-maths-orca-200k pour Gemma-2B et lole25/phi-2-sft-ultrachat-lora pour Phi-2.
Après l'entraînement sur l'ensemble de données préparé et l'enregistrement du modèle, vous obtenez un fichier adapter_model.safetensors contenant les pondérations du modèle LoRA affiné.
Le fichier safetensors est le point de contrôle LoRA utilisé dans la conversion du modèle.
L'étape suivante consiste à convertir les pondérations du modèle en Flatbuffer TensorFlow Lite à l'aide du package MediaPipe Python. ConversionConfig doit spécifier les options du modèle de base, ainsi que des options LoRA supplémentaires. Notez que
comme l'API n'est compatible avec l'inférence LoRA qu'avec le GPU, le backend doit être défini sur
'gpu'.
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
# Other params related to base model
...
# Must use gpu backend for LoRA conversion
backend='gpu',
# LoRA related params
lora_ckpt=LORA_CKPT,
lora_rank=LORA_RANK,
lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
Le convertisseur génère deux fichiers flatbuffer TFLite, l'un pour le modèle de base et l'autre pour le modèle LoRA.
Inférence de modèle LoRA
Les API d'inférence LLM Web, Android et iOS sont mises à jour pour prendre en charge l'inférence de modèle LoRA.
Android est compatible avec LoRA statique lors de l'initialisation. Pour charger un modèle LoRA, les utilisateurs spécifient le chemin d'accès au modèle LoRA, ainsi que le LLM de base.// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
.setModelPath('<path to base model>')
.setMaxTokens(1000)
.setTopK(40)
.setTemperature(0.8)
.setRandomSeed(101)
.setLoraPath('<path to LoRA model>')
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)
Pour exécuter l'inférence LLM avec LoRA, utilisez les mêmes méthodes generateResponse() ou generateResponseAsync() que le modèle de base.