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.
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:
Web:
Android:
iOS
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:
- Generazione di testo-testo: genera testo in base a un prompt di testo di input.
- 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.
- 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:
|
L'API LLM Inference restituisce i seguenti risultati:
|
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.
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.
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 backendCPU
oGPU
. 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 opzionisupportedLoraRanks
oloraRanks
.maxTokens
: il valore dimaxTokens
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.
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:
- Scarica i checkpoint del modello PyTorch.
- Utilizza l'API AI Edge Torch Generative per creare, convertire e quantizzare il
modello in un formato di file compatibile con MediaPipe (
.tflite
). - 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.