L'API LLM Inference vous permet d'exécuter de grands modèles de langage (LLM) entièrement sur l'appareil. Vous pouvez l'utiliser pour effectuer un large éventail de tâches, comme générer du texte, récupérer des informations en langage naturel et résumer des documents. La tâche offre une compatibilité intégrée avec 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 est compatible avec 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 AI Edge Torch pour exporter des modèles PyTorch dans des modèles LiteRT (tflite
) à signatures multiples, qui sont fournis avec des paramètres de jetoniseur pour créer des Task Bundles. Les modèles convertis avec AI Edge Torch sont compatibles avec l'API LLM Inference et peuvent s'exécuter sur le backend du processeur, ce qui les rend adaptés aux applications Android et iOS.
Premiers pas
Pour commencer à utiliser cette tâche, suivez l'un de ces guides d'implémentation pour votre plate-forme cible. Ces guides spécifiques à chaque 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 capacités, les entrées, les sorties et les options de configuration de cette tâche.
Fonctionnalités
L'API LLM Inference contient les principales fonctionnalités suivantes :
- Génération de texte à partir de texte : générer 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 les capacités du 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 AI Edge Torch Generative).
Entrées de tâche | Sorties de tâches |
---|---|
L'API LLM Inference accepte les entrées suivantes :
|
L'API LLM Inference 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) que le modèle peut traiter. | 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 |
Degré d'aléatoire introduit lors de la génération. Une température plus élevée rend le texte généré plus créatif, tandis qu'une température plus basse le rend plus prévisible. | Float | 0,8 |
randomSeed |
Source aléatoire utilisée lors de la génération de texte. | Nombre entier | 0 |
loraPath |
Chemin absolu du modèle LoRA localement sur l'appareil. Remarque : Cette fonctionnalité n'est compatible qu'avec les modèles de GPU. | CHEMIN | N/A |
resultListener |
Définit l'écouteur de résultat 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'erreur facultatif. | N/A | N/A |
Modèles
L'API LLM Inference est compatible avec de nombreux grands modèles de langage de type 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 LLM Inference, 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 de l'outil de conversion générative Torch AI Edge.
Si vous n'avez pas encore de LLM à utiliser avec l'API LLM Inference, commencez par l'un des modèles suivants.
Gemma-3n
Gemma-3n E2B et E4B sont les derniers modèles de la famille Gemma, qui regroupe des 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. Les modèles Gemma 3n sont conçus pour une exécution efficace sur les appareils à faibles ressources. Ils sont capables de traiter des entrées multimodales (texte, image et audio) et de générer des sorties textuelles.
Les modèles Gemma 3n utilisent la 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 LLM Inference pour Android et le Web.
Gemma-3 1B
Gemma-3 1B est le modèle le plus léger de la famille Gemma, qui regroupe des modèles ouverts, légers et de pointe conçus à partir des 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 prêt à être utilisé avec l'API LLM Inference pour les applications Android et Web.
Lorsque vous exécutez Gemma-3 1B avec l'API LLM Inference, configurez les options suivantes en conséquence :
preferredBackend
: utilisez cette option pour choisir entre un backendCPU
ouGPU
. Cette option n'est disponible que pour Android.supportedLoraRanks
: l'API LLM Inference ne peut pas être configurée pour prendre en charge l'adaptation de rang faible (LoRA) avec le modèle Gemma-3 1B. N'utilisez pas les optionssupportedLoraRanks
niloraRanks
.maxTokens
: la valeur demaxTokens
doit correspondre à la taille du contexte intégrée au modèle. On l'appelle également cache clé-valeur (KV) ou longueur du contexte.numResponses
: doit toujours être égal à 1. Cette option n'est disponible que pour le Web.
Lors de l'exécution de 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 worker.
Gemma-2 2B
Gemma-2 2B est une variante 2B de Gemma-2 qui 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èles PyTorch
Les modèles génératifs PyTorch peuvent être convertis dans un format compatible avec MediaPipe à l'aide de l'API AI Edge Torch Generative. 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 d'AI Edge Torch.
La conversion d'un modèle PyTorch avec l'API AI Edge Torch Generative implique les étapes suivantes :
- Téléchargez les points de contrôle du modèle PyTorch.
- Utilisez l'API AI Edge Torch Generative pour créer, convertir et quantifier le modèle dans un format de fichier compatible avec MediaPipe (
.tflite
). - Créez un Task Bundle (
.task
/.litertlm
) à partir du fichier tflite et du tokenizer du modèle.
Le convertisseur Torch Generative ne convertit que pour le CPU 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, Paramètres du tokenizer) nécessaires pour exécuter l'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é d'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 tokenizer 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 tokenizer fourni. | LIST[STRING] |
output_filename |
Nom du fichier du 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 de faible rang (LoRA) pour les grands modèles de langage. En utilisant 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 LLM Inference fonctionne pour toutes les variantes Gemma et les modèles Phi-2 pour le backend GPU, avec des pondérations LoRA applicables aux couches d'attention uniquement. Cette implémentation initiale sert d'API expérimentale pour les développements futurs. Nous prévoyons de prendre en charge davantage de modèles et différents types de calques 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 LLM Inference n'est compatible qu'avec LoRA 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 LLM Inference 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 Python MediaPipe. Le ConversionConfig
doit spécifier les options du modèle de base ainsi que les options LoRA supplémentaires. Notez que, comme l'API n'est compatible qu'avec l'inférence LoRA avec 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 : un pour le modèle de base et l'autre pour le modèle LoRA.
Inférence du modèle LoRA
Les API d'inférence LLM pour le Web, Android et iOS sont mises à jour pour prendre en charge l'inférence du 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.