Guide d'inférence LLM

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.

Essayez !

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 :

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 :

  1. Génération de texte à partir de texte : générer du texte à partir d'une requête textuelle.
  2. 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.
  3. 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 :
  • Requête textuelle (par exemple, une question, un objet d'e-mail, un document à résumer)
L'API LLM Inference génère les résultats suivants :
  • Texte généré à partir de la requête saisie (par exemple, une réponse à la question, un brouillon d'e-mail ou un résumé du document)

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.

Télécharger Gemma-3n E2B

Télécharger Gemma-3n E4B

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.

Télécharger Gemma-3 1B

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 backend CPU ou GPU. 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 options supportedLoraRanks ni loraRanks.
  • maxTokens : la valeur de maxTokens 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.

Télécharger Gemma-2 2B

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 :

  1. Téléchargez les points de contrôle du modèle PyTorch.
  2. 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).
  3. 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.