Guide d'inférence LLM

L'API d'inférence LLM vous permet d'exécuter des grands modèles de langage (LLM) entièrement sur l'appareil, que vous pouvez utiliser pour effectuer un large éventail de tâches, telles que la génération de texte, la récupération d'informations sous forme de langage naturel et la synthèse de documents. La tâche est compatible avec plusieurs grands modèles de langage de conversion texte-texte, ce qui vous permet d'appliquer les derniers modèles d'IA générative sur l'appareil à vos applications et produits.

Essayez !

La tâche est compatible avec les variantes suivantes de Gemma: Gemma-2 2B, Gemma 2B et Gemma 7B. Gemma est une famille de modèles ouverts, légers et à la pointe de la technologie, basés sur les mêmes recherches et technologies que celles utilisées pour créer les modèles Gemini. Il est également compatible avec les modèles externes suivants: Phi-2, Falcon-RW-1B et StableLM-3B.

En plus des modèles compatibles, vous pouvez utiliser AI Edge Torch de Google pour exporter des modèles PyTorch vers des modèles LiteRT (tflite) multisignature, qui sont regroupés avec des paramètres de tokenizer pour créer des bundles de tâches compatibles avec l'API d'inférence LLM. Les modèles convertis avec AI Edge Torch ne peuvent s'exécuter que sur le backend du processeur et sont donc limités à 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 à la plate-forme vous expliquent comment implémenter cette tâche de manière basique, 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 fonctionnalité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ère 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 appliquer des poids personnalisés.
  3. Compatibilité avec LoRA : étendez et personnalisez les fonctionnalités du LLM avec le modèle LoRA en l'entraînant sur l'ensemble de données complet ou en utilisant des modèles LoRA prédéfinis préparés par la communauté Open Source (non compatibles avec les modèles convertis avec l'API générative Torch Edge AI).
Entrées de tâche Sorties de tâche
L'API d'inférence LLM accepte les entrées suivantes:
  • Requête textuelle (par exemple, une question, l'objet d'un e-mail ou un document à résumer)
L'API d'inférence LLM génère les résultats suivants:
  • Texte généré en fonction de la requête d'entrée (par exemple, une réponse à la question, un brouillon d'e-mail ou un résumé du document)

Options de configuration

Cette tâche propose les options de configuration suivantes:

Nom de l'option Description Plage de valeurs Valeur par défaut
modelPath Chemin d'accès au répertoire du projet dans lequel le modèle est stocké. CHEMIN N/A
maxTokens Nombre maximal de jetons (jetons d'entrée + jetons de sortie) gérés par le modèle. Entier 512
topK Nombre de jetons que le modèle prend en compte à chaque étape de génération. Limite les prédictions aux k jetons les plus probables. Entier 40
temperature Quantité de hasard 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 génère un texte plus prévisible. Float 0,8
randomSeed Graine aléatoire utilisée lors de la génération de texte. Entier 0
loraPath Chemin absolu vers le modèle LoRA localement sur l'appareil. Remarque: Cette option n'est compatible qu'avec les modèles de GPU. CHEMIN N/A
resultListener Définit l'écouteur de résultats pour qu'il reçoive 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 d'inférence LLM est compatible avec de nombreux grands modèles de langage de texte à texte, y compris la prise en charge intégrée de 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 ou convertir un modèle dans un format compatible avec MediaPipe.

L'API d'inférence LLM est compatible avec deux types de modèles, dont certains nécessitent une conversion de modèle. Utilisez le tableau pour identifier la méthode d'étapes requise pour votre modèle.

Modèles Méthode de conversion Plates-formes compatibles File type
Modèles compatibles Gemma 2B, Gemma 7B, Gemma-2 2B, Phi-2, StableLM, Falcon MediaPipe Android, iOS, Web .bin
Autres modèles PyTorch Tous les modèles LLM PyTorch Bibliothèque générative AI Edge Torch Android, iOS .task

Nous hébergeons les fichiers .bin convertis pour Gemma 2B, Gemma 7B et Gemma-2 2B sur Kaggle. Ces modèles peuvent être déployés directement à l'aide de notre API d'inférence LLM. Pour savoir comment convertir d'autres modèles, consultez la section Convertir des modèles.

Gemma-2 2B

Gemma-2 2B est le dernier modèle de la famille Gemma, une gamme 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 2 milliards de paramètres et de pondérations ouvertes. Gemma-2 2B est réputé pour ses compétences de raisonnement de pointe pour les modèles de sa catégorie.

Télécharger Gemma-2 2B

Les modèles Gemma-2 2B sont disponibles dans les variantes suivantes:

Vous pouvez également ajuster le modèle et ajouter de nouveaux poids avant de l'ajouter à l'application. Pour en savoir plus sur l'ajustement et la personnalisation de Gemma, consultez Ajuster Gemma. Après avoir téléchargé Gemma-2B depuis Kaggle Models, le modèle est déjà au format approprié pour être utilisé avec MediaPipe Tasks.

Gemma 2B

Gemma 2B fait partie d'une famille de modèles ouverts, légers et à la pointe de la technologie, basés sur les mêmes recherches et technologies que celles utilisées pour créer les modèles Gemini. Le modèle contient 2 milliards de paramètres et de pondérations ouvertes. Ce modèle est adapté à diverses tâches de génération de texte, y compris les systèmes de questions-réponses, la synthèse et le raisonnement.

Télécharger Gemma 2B

Les modèles Gemma 2B sont disponibles dans les variantes suivantes:

Vous pouvez également ajuster le modèle et ajouter de nouveaux poids avant de l'ajouter à l'application. Pour en savoir plus sur l'ajustement et la personnalisation de Gemma, consultez Ajuster Gemma. Après avoir téléchargé Gemma 2B à partir de Kaggle Models, le modèle est déjà au format approprié pour être utilisé avec MediaPipe Tasks.

Gemma 7B

Gemma 7B est un modèle Gemma plus volumineux avec 7 milliards de paramètres et des poids ouverts. Le modèle est plus performant pour diverses tâches de génération de texte, y compris les réponses aux questions, la synthèse et le raisonnement. Gemma 7B n'est compatible qu'avec le Web.

Télécharger Gemma 7B

Le modèle Gemma 7B est disponible en une seule variante:

Après avoir téléchargé Gemma 7B à partir de Kaggle Models, le modèle est déjà au format approprié pour être utilisé avec MediaPipe.

Falcon 1B

Falcon-1B est un modèle de décodeur causal à 1 milliard de paramètres entraîné sur 350 milliards de jetons de RefinedWeb.

Télécharger Falcon 1B

L'API LLM Inference nécessite que les fichiers suivants soient téléchargés et stockés localement:

  • tokenizer.json
  • tokenizer_config.json
  • pytorch_model.bin

Après avoir téléchargé les fichiers de modèle Falcon, le modèle est prêt à être converti au format MediaPipe à l'aide d'un script de conversion. Suivez la procédure décrite dans la section Script de conversion pour les modèles compatibles.

StableLM 3B

StableLM-3B est un modèle de langage à 3 milliards de paramètres, uniquement décodeur, pré-entraîné sur 1 billion de jetons de divers ensembles de données en anglais et en code pendant quatre époques.

Télécharger StableLM 3B

L'API LLM Inference nécessite que les fichiers suivants soient téléchargés et stockés localement:

  • tokenizer.json
  • tokenizer_config.json
  • model.safetensors

Après avoir téléchargé les fichiers de modèle StableLM, le modèle est prêt à être converti au format MediaPipe à l'aide d'un script de conversion. Suivez la procédure décrite dans la section Script de conversion pour les modèles compatibles.

Phi-2

Phi-2 est un modèle Transformer à 2,7 milliards de paramètres. Elle a été entraînée à l'aide de divers textes synthétiques de NLP et de sites Web filtrés. Ce modèle est le plus adapté aux requêtes utilisant les formats Question-Réponse, Chat et Code.

Télécharger Phi-2

L'API LLM Inference nécessite que les fichiers suivants soient téléchargés et stockés localement:

  • tokenizer.json
  • tokenizer_config.json
  • model-00001-of-00002.safetensors
  • model-00002-of-00002.safetensors

Après avoir téléchargé les fichiers de modèle Phi-2, le modèle est prêt à être converti au format MediaPipe à l'aide d'un script de conversion. Suivez la procédure décrite dans la section Script de conversion pour les modèles compatibles.

Modèles génératifs PyTorch

Les modèles génératifs PyTorch peuvent être convertis en format compatible avec MediaPipe à l'aide de l'API générative AI Edge Torch. Vous pouvez utiliser l'API pour convertir des modèles PyTorch en modèles LiteRT (TensorFlow Lite) à signature multiple. Pour en savoir plus sur la cartographie et l'exportation de modèles, consultez la page GitHub d'AI Edge Torch.

Si vous souhaitez utiliser l'API AI Edge Torch Generative pour convertir un modèle PyTorch, suivez les étapes de la section Convertisseur Torch Generative pour les modèles PyTorch.

Conversion de modèles

L'API d'inférence LLM MediaPipe vous permet d'exécuter une grande variété de grands modèles de langage sur l'appareil. Cela inclut les modèles qui ont été préconvertis dans un format compatible avec MediaPipe, ainsi que d'autres modèles pouvant être convertis à l'aide d'un script de conversion ou de la bibliothèque AI Edge Torch.

L'API d'inférence LLM accepte les modèles aux formats de fichiers .bin et .task. Les modèles préconvertis et les modèles convertis avec le script de conversion seront des fichiers .bin, tandis que les modèles convertis avec la bibliothèque AI Edge Torch seront des fichiers .task. Ne modifiez pas manuellement les formats de fichier de vos modèles convertis.

L'API d'inférence LLM contient trois chemins de conversion de modèle:

Modèles préconvertis

Les modèles Gemma-2 2B, Gemma 2B et Gemma 7B sont disponibles en tant que modèles préconvertis au format MediaPipe. Ces modèles ne nécessitent aucune étape de conversion supplémentaire de la part de l'utilisateur et peuvent être exécutés tels quels avec l'API d'inférence LLM.

Vous pouvez télécharger Gemma-2 2B à partir de Kaggle Models:

Vous pouvez télécharger des variantes de Gemma 2B à partir de Kaggle Models:

Vous pouvez télécharger Gemma 7B à partir de Kaggle Models:

Pour en savoir plus sur les modèles Gemma, consultez la documentation sur Gemma-2 2B, Gemma 2B et Gemma 7B.

Script de conversion pour les modèles compatibles

Le package MediaPipe propose un script de conversion pour convertir les modèles externes suivants dans un format compatible avec MediaPipe:

Pour en savoir plus sur les modèles externes compatibles, consultez la documentation sur Falcon 1B, StableLM 3B et Phi-2.

Le processus de conversion de modèle nécessite le package MediaPipe PyPI. Le script de conversion est disponible dans tous les packages MediaPipe après 0.10.11.

Installez et importez les dépendances avec la commande suivante:

$ python3 -m pip install mediapipe

Utilisez la bibliothèque genai.converter pour convertir le modèle:

import mediapipe as mp
from mediapipe.tasks.python.genai import converter

config = converter.ConversionConfig(
  input_ckpt=INPUT_CKPT,
  ckpt_format=CKPT_FORMAT,
  model_type=MODEL_TYPE,
  backend=BACKEND,
  output_dir=OUTPUT_DIR,
  combine_file_only=False,
  vocab_model_file=VOCAB_MODEL_FILE,
  output_tflite_file=OUTPUT_TFLITE_FILE,
)

converter.convert_checkpoint(config)

Pour convertir le modèle LoRA, ConversionConfig doit spécifier les options de 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, l'un pour le modèle de base et l'autre pour le modèle LoRA.

Paramètre Description Valeurs acceptées
input_ckpt Chemin d'accès au fichier model.safetensors ou pytorch.bin. Notez que le format safetensors du modèle est parfois fractionné en plusieurs fichiers, par exemple model-00001-of-00003.safetensors, model-00001-of-00003.safetensors. Vous pouvez spécifier un modèle de fichier, comme model*.safetensors. CHEMIN
ckpt_format Format du fichier de modèle. {"safetensors", "pytorch"}
model_type LLM en cours de conversion. {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"}
backend Le processeur (délégué) utilisé pour exécuter le modèle. {"cpu", "gpu"}
output_dir Chemin d'accès au répertoire de sortie qui héberge les fichiers de poids par couche. CHEMIN
output_tflite_file Chemin d'accès au fichier de sortie. Par exemple, "model_cpu.bin" ou "model_gpu.bin". Ce fichier n'est compatible qu'avec l'API d'inférence LLM et ne peut pas être utilisé comme fichier "tflite" général. CHEMIN
vocab_model_file Chemin d'accès au répertoire qui stocke les fichiers tokenizer.json et tokenizer_config.json. Pour Gemma, pointez vers le fichier tokenizer.model unique. CHEMIN
lora_ckpt Chemin d'accès au ckpt LoRA du fichier safetensors qui stocke le poids de l'adaptateur LoRA. CHEMIN
lora_rank Entier représentant le rang du point de contrôle LoRA. Nécessaire pour convertir les poids lora. Si elles ne sont pas fournies, le convertisseur suppose qu'il n'y a pas de pondérations LoRA. Remarque: Seul le backend GPU est compatible avec LoRA. Entier
lora_output_tflite_file Nom de fichier tflite de sortie pour les poids LoRA. CHEMIN

Convertisseur génératif Torch pour les modèles PyTorch

Les modèles génératifs PyTorch peuvent être convertis en format compatible avec MediaPipe à l'aide de l'API générative AI Edge Torch. Vous pouvez utiliser l'API pour créer, convertir et quantizer des LLM PyTorch à utiliser avec l'API Inference LLM. 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 convertir un modèle PyTorch avec l'API AI Edge Torch Generative, procédez comme suit:

  1. Télécharger les points de contrôle du modèle PyTorch
  2. Utilisez l'API générative Torch AI Edge pour créer, convertir et quantizer le modèle dans un format de fichier compatible avec MediaPipe (.tflite).
  3. Créez un bundle de tâches (.task) à partir du fichier tflite et du tokenizer du modèle.

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 empaquette 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 PyPI MediaPipe. Le script de conversion est disponible dans tous les packages MediaPipe après 0.10.14.

Installez et importez les dépendances avec la commande suivante:

$ 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 tokenizer 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 Modéliser des jetons d'arrêt spécifiques Les jetons de fin de mot doivent être présents dans le modèle de tokenizer 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 (LoRA) pour les grands modèles de langage. Grâce à des modèles LoRA optimisés, les développeurs peuvent personnaliser le comportement des LLM via un processus d'entraînement rentable.

La prise en charge de LoRA par l'API d'inférence LLM fonctionne pour toutes les variantes Gemma et les modèles Phi-2 pour le backend GPU, avec des poids LoRA applicables uniquement aux couches d'attention. Cette implémentation initiale sert d'API expérimentale pour les futurs développements. Nous prévoyons de prendre en charge davantage de modèles et différents types de calques dans les prochaines mises à jour.

Préparer des 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 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 qui correspondent à 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 avoir entraîné le modèle sur l'ensemble de données préparé et enregistré le modèle, vous obtenez un fichier adapter_model.safetensors contenant les poids du modèle LoRA affinés. Le fichier safetensors est le point de contrôle LoRA utilisé lors de la conversion du modèle.

L'étape suivante consiste à convertir les poids du modèle en Flatbuffer TensorFlow Lite à l'aide du package Python MediaPipe. ConversionConfig doit spécifier les options de 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, l'un pour le modèle de base et l'autre pour le modèle LoRA.

Inférence de modèle LoRA

L'API d'inférence LLM pour le Web, Android et iOS est mise à 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 doivent spécifier 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.