Guida all'inferenza LLM

L'API LLM Inference consente di eseguire modelli linguistici di grandi dimensioni (LLM) completamente sul dispositivo, che puoi utilizzare per svolgere un'ampia gamma di attività, come generare testo, recuperare informazioni in linguaggio naturale e riassumere documenti. L'attività fornisce supporto integrato per più modelli linguistici di grandi dimensioni da testo a testo, in modo da poter applicare i più recenti modelli di AI generativa sul dispositivo alle tue app e ai tuoi prodotti.

Prova!

Il task fornisce supporto integrato per una serie di LLM. I modelli ospitati nella pagina LiteRT Community sono disponibili in un formato compatibile con MediaPipe e non richiedono passaggi di conversione o compilazione aggiuntivi.

Puoi utilizzare AI Edge Torch per esportare i modelli PyTorch in modelli LiteRT (tflite) con più firme, che vengono raggruppati con i parametri del tokenizer per creare pacchetti di attività. I modelli convertiti con AI Edge Torch sono compatibili con l'API LLM Inference e possono essere eseguiti sul backend della CPU, il che li rende adatti alle applicazioni Android e iOS.

Inizia

Inizia a utilizzare questa attività seguendo una di queste guide all'implementazione per la tua piattaforma di destinazione. Queste guide specifiche per la piattaforma ti illustrano un'implementazione di base di questa attività, con esempi di codice che utilizzano un modello disponibile e le opzioni di configurazione consigliate:

Dettagli attività

Questa sezione descrive le funzionalità, gli input, gli output e le opzioni di configurazione di questa attività.

Funzionalità

L'API LLM Inference contiene le seguenti funzionalità chiave:

  1. Generazione di testo-testo: genera testo in base a un prompt di testo di input.
  2. Selezione LLM: applica più modelli per personalizzare l'app per i tuoi casi d'uso specifici. Puoi anche eseguire il retraining e applicare pesi personalizzati al modello.
  3. Supporto LoRA: estendi e personalizza la funzionalità LLM con il modello LoRA eseguendo l'addestramento sull'intero set di dati o utilizzando modelli LoRA predefiniti preparati dalla community open source (non compatibili con i modelli convertiti con l'API AI Edge Torch Generative).
Input dell'attività Output dell'attività
L'API LLM Inference accetta i seguenti input:
  • Prompt di testo (ad es. una domanda, l'oggetto di un'email, un documento da riassumere)
L'API LLM Inference restituisce i seguenti risultati:
  • Testo generato in base al prompt di input (ad es. una risposta alla domanda, una bozza di email, un riepilogo del documento)

Opzioni di configurazione

Questa attività ha le seguenti opzioni di configurazione:

Nome opzione Descrizione Intervallo di valori Valore predefinito
modelPath Il percorso in cui è memorizzato il modello all'interno della directory del progetto. PERCORSO N/D
maxTokens Il numero massimo di token (token di input + token di output) gestiti dal modello. Numero intero 512
topK Il numero di token che il modello prende in considerazione a ogni passaggio della generazione. Limita le previsioni ai primi k token più probabili. Numero intero 40
temperature Il grado di casualità introdotto durante la generazione. Una temperatura più alta genera un testo più creativo, mentre una temperatura più bassa produce una generazione più prevedibile. Float 0,8
randomSeed Il seme casuale utilizzato durante la generazione del testo. Numero intero 0
loraPath Il percorso assoluto del modello LoRA localmente sul dispositivo. Nota: questa opzione è compatibile solo con i modelli di GPU. PERCORSO N/D
resultListener Imposta il listener dei risultati per ricevere i risultati in modo asincrono. Applicabile solo quando utilizzi il metodo di generazione asincrona. N/D N/D
errorListener Imposta un listener di errori facoltativo. N/D N/D

Modelli

L'API LLM Inference supporta molti modelli linguistici di grandi dimensioni da testo a testo, tra cui il supporto integrato per diversi modelli ottimizzati per l'esecuzione su browser e dispositivi mobili. Questi modelli leggeri possono essere utilizzati per eseguire inferenze completamente sul dispositivo.

Prima di inizializzare l'API LLM Inference, scarica un modello e memorizza il file nella directory del progetto. Puoi utilizzare un modello preconvertito dal repository LiteRT Community di HuggingFace oppure convertire un modello in un formato compatibile con MediaPipe con AI Edge Torch Generative Converter.

Se non hai ancora un LLM da utilizzare con l'API LLM Inference, inizia con uno dei seguenti modelli.

Gemma-3n

Gemma-3n E2B ed E4B sono gli ultimi modelli della famiglia Gemma di modelli aperti leggeri e all'avanguardia creati sulla base della stessa ricerca e tecnologia utilizzata per creare i modelli Gemini. I modelli Gemma 3n sono progettati per un'esecuzione efficiente su dispositivi con poche risorse. Sono in grado di gestire input multimodali, come testo, immagini e audio, e generare output di testo.

I modelli Gemma 3n utilizzano la tecnologia di attivazione selettiva dei parametri per ridurre i requisiti di risorse. Questa tecnica consente ai modelli di operare con dimensioni effettive di 2 e 4 miliardi di parametri, un numero inferiore al numero totale di parametri che contengono.

Scarica Gemma-3n E2B

Scarica Gemma-3n E4B

I modelli Gemma-3n E2B ed E4B di HuggingFace sono disponibili nel formato .litertlm e pronti per l'uso con l'API LLM Inference per Android.

Gemma-3 1B

Gemma-3 1B è il modello più leggero della famiglia Gemma di modelli aperti leggeri e all'avanguardia creati sulla base della stessa ricerca e tecnologia utilizzata per creare i modelli Gemini. Il modello contiene 1 miliardo di parametri e pesi aperti.

Scarica Gemma-3 1B

Il modello Gemma-3 1B di HuggingFace è disponibile nel formato .task/.litertlm ed è pronto per l'uso con l'API LLM Inference per applicazioni Android e web.

Quando esegui Gemma-3 1B con l'API LLM Inference, configura le seguenti opzioni di conseguenza:

  • preferredBackend: utilizza questa opzione per scegliere tra un backend CPU o GPU. Questa opzione è disponibile solo per Android.
  • supportedLoraRanks: L'API LLM Inference non può essere configurata per supportare l'adattamento a basso ranking (LoRA) con il modello Gemma-3 1B. Non utilizzare le opzioni supportedLoraRanks o loraRanks.
  • maxTokens: il valore di maxTokens deve corrispondere alla dimensione del contesto integrata nel modello. Può anche essere definita cache chiave-valore o lunghezza del contesto.
  • numResponses: deve essere sempre 1. Questa opzione è disponibile solo per il web.

Quando esegui Gemma-3 1B su applicazioni web, l'inizializzazione può causare un blocco prolungato nel thread corrente. Se possibile, esegui sempre il modello da un thread worker.

Gemma-2 2B

Gemma-2 2B è una variante di Gemma-2 con 2 miliardi di parametri e funziona su tutte le piattaforme.

Scarica Gemma-2 2B

Il modello contiene 2 miliardi di parametri e pesi aperti. Gemma-2 2B è noto per le sue capacità di ragionamento all'avanguardia per i modelli della sua classe.

Conversione del modello PyTorch

I modelli generativi PyTorch possono essere convertiti in un formato compatibile con MediaPipe utilizzando l'API AI Edge Torch Generative. Puoi utilizzare l'API per convertire i modelli PyTorch in modelli LiteRT (TensorFlow Lite) con più firme. Per maggiori dettagli sul mapping e sull'esportazione dei modelli, visita la pagina GitHub di AI Edge Torch.

La conversione di un modello PyTorch con l'API AI Edge Torch Generative comporta i seguenti passaggi:

  1. Scarica i checkpoint del modello PyTorch.
  2. Utilizza l'API AI Edge Torch Generative per creare, convertire e quantizzare il modello in un formato di file compatibile con MediaPipe (.tflite).
  3. Crea un pacchetto di attività (.task/.litertlm) dal file tflite e dal tokenizer del modello.

Il convertitore generativo Torch esegue la conversione solo per la CPU e richiede una macchina Linux con almeno 64 GB di RAM.

Per creare un bundle di attività, utilizza lo script di raggruppamento per creare un bundle di attività. Il processo di bundling comprime il modello mappato con metadati aggiuntivi (ad es. Tokenizzatore) necessari per eseguire l'inferenza end-to-end.

Il processo di raggruppamento dei modelli richiede il pacchetto PyPI di MediaPipe. Lo script di conversione è disponibile in tutti i pacchetti MediaPipe dopo 0.10.14.

Installa e importa le dipendenze con il seguente comando:

$ python3 -m pip install mediapipe

Utilizza la libreria genai.bundler per raggruppare il modello:

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)
Parametro Descrizione Valori accettati
tflite_model Il percorso del modello TFLite esportato di AI Edge. PERCORSO
tokenizer_model Il percorso del modello di tokenizer SentencePiece. PERCORSO
start_token Token di inizio specifico del modello. Il token iniziale deve essere presente nel modello di tokenizer fornito. STRING
stop_tokens Token di interruzione specifici del modello. I token di interruzione devono essere presenti nel modello di tokenizer fornito. LIST[STRING]
output_filename Il nome del file del bundle di attività di output. PERCORSO

Personalizzazione LoRA

L'API Mediapipe LLM inference può essere configurata per supportare l'adattamento a basso rango (LoRA) per i modelli linguistici di grandi dimensioni. Utilizzando modelli LoRA ottimizzati, gli sviluppatori possono personalizzare il comportamento degli LLM tramite un processo di addestramento conveniente.

Il supporto LoRA dell'API LLM Inference funziona per tutte le varianti di Gemma e per i modelli Phi-2 per il backend GPU, con pesi LoRA applicabili solo ai livelli di attenzione. Questa implementazione iniziale funge da API sperimentale per sviluppi futuri con l'intenzione di supportare più modelli e vari tipi di livelli negli aggiornamenti futuri.

Preparare i modelli LoRA

Segui le istruzioni su HuggingFace per addestrare un modello LoRA ottimizzato sul tuo set di dati con i tipi di modello supportati, Gemma o Phi-2. I modelli Gemma-2 2B, Gemma 2B e Phi-2 sono disponibili su HuggingFace nel formato safetensors. Poiché l'API LLM Inference supporta solo LoRA sui livelli di attenzione, specifica solo i livelli di attenzione durante la creazione di LoraConfig come segue:

# 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"],
)

Per i test, su Hugging Face sono disponibili modelli LoRA ottimizzati e accessibili pubblicamente che si adattano all'API LLM Inference. Ad esempio, monsterapi/gemma-2b-lora-maths-orca-200k per Gemma-2B e lole25/phi-2-sft-ultrachat-lora per Phi-2.

Dopo l'addestramento sul set di dati preparato e il salvataggio del modello, ottieni un file adapter_model.safetensors contenente i pesi del modello LoRA ottimizzato. Il file safetensors è il checkpoint LoRA utilizzato nella conversione del modello.

Il passaggio successivo consiste nel convertire i pesi del modello in un FlatBuffer TensorFlow Lite utilizzando il pacchetto Python MediaPipe. Il file ConversionConfig deve specificare le opzioni del modello di base e le opzioni LoRA aggiuntive. Tieni presente che poiché l'API supporta solo l'inferenza LoRA con GPU, il backend deve essere impostato su '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)

Il convertitore genererà due file flatbuffer TFLite, uno per il modello di base e l'altro per il modello LoRA.

Inferenza del modello LoRA

Le API di inferenza LLM per web, Android e iOS sono aggiornate per supportare l'inferenza del modello LoRA.

Android supporta LoRA statico durante l'inizializzazione. Per caricare un modello LoRA, gli utenti specificano il percorso del modello LoRA e l'LLM di 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)

Per eseguire l'inferenza LLM con LoRA, utilizza gli stessi metodi generateResponse() o generateResponseAsync() del modello di base.