L'API LLM Inference ti consente di eseguire modelli linguistici di grandi dimensioni (LLM) completamente sul dispositivo, che puoi utilizzare per svolgere un'ampia gamma di attività, come la generazione di testo, il recupero di informazioni in forma di linguaggio naturale e il riepilogo dei documenti. L'attività fornisce il supporto integrato per più modelli linguistici di grandi dimensioni text-to-text, in modo da poter applicare i modelli di IA generativa on-device più recenti alle tue app e ai tuoi prodotti.
L'attività supporta le seguenti varianti di Gemma: Gemma-2 2B, Gemma 2B e Gemma 7B. Gemma è una famiglia di modelli aperti leggeri e all'avanguardia creati sulla base della stessa ricerca e tecnologia utilizzata per creare i modelli Gemini. Supporta inoltre i seguenti modelli esterni: Phi-2, Falcon-RW-1B e StableLM-3B.
Oltre ai modelli supportati, puoi utilizzare AI Edge
Torch di Google per esportare i modelli PyTorch
in modelli LiteRT (tflite
) con più firme, che sono raggruppati con
i parametri del tokenizzatore per creare pacchetti di attività compatibili con l'API di inferenza LLM. I modelli convertiti con AI Edge Torch possono essere eseguiti solo sul backend della CPU e sono quindi limitati ad Android e iOS.
Inizia
Per iniziare a utilizzare questa attività, segui una di queste guide all'implementazione per la tua piattaforma di destinazione. Queste guide specifiche per la piattaforma 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:
- Generare testo da testo: genera testo in base a un prompt di testo di input.
- Selezione LLM: applica più modelli per personalizzare l'app in base ai tuoi casi d'uso specifici. Puoi anche addestrare nuovamente il modello e applicare pesi personalizzati.
- Supporto LoRA: espandi e personalizza la funzionalità LLM con il modello LoRA addestrandolo sull'intero set di dati o utilizzando modelli LoRA predefiniti preparati dalla community open source (non compatibile con i modelli convertiti con l'API AI Edge Torch Generative).
Input delle attività | Output delle attività |
---|---|
L'API LLM Inference accetta i seguenti input:
|
L'API LLM Inference genera 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 è archiviato 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 presi in considerazione dal modello in ogni fase di generazione. Limita le previsioni ai token più probabili tra i primi k. | Numero intero | 40 |
temperature |
La quantità di casualità introdotta durante la generazione. Una temperatura più alta consente di ottenere un testo generato più creativo, mentre una temperatura più bassa produce una generazione più prevedibile. | Float | 0,8 |
randomSeed |
Il seed 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 GPU. | PERCORSO | N/D |
resultListener |
Imposta l'ascoltatore dei risultati in modo che riceva i risultati in modo asincrono. Applicabile solo quando si utilizza il metodo di generazione asincrona. | N/D | N/D |
errorListener |
Imposta un listener di errore facoltativo. | N/D | N/D |
Modelli
L'API LLM Inference supporta molti modelli linguistici di grandi dimensioni di tipo testo a testo, incluso 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 di inferenza LLM, scarica un modello e archivia il file nella directory del progetto. Puoi utilizzare un modello preconvertito o convertire un modello in un formato compatibile con MediaPipe.
L'API LLM Inference è compatibile con due tipi di categorie di modelli, alcuni dei quali richiedono la conversione del modello. Utilizza la tabella per identificare il metodo di procedura richiesto per il tuo modello.
Modelli | Metodo di conversione | Piattaforme compatibili | Tipo di file | |
---|---|---|---|---|
Modelli supportati | Gemma 2B, Gemma 7B, Gemma-2 2B, Phi-2, StableLM, Falcon | MediaPipe | Android, iOS, web | .bin |
Altri modelli PyTorch | Tutti i modelli LLM di PyTorch | Libreria Torch Generative di AI Edge | Android, iOS | .task |
Stiamo ospitando i file .bin
convertiti per Gemma 2B, Gemma 7B e Gemma-2 2B su Kaggle. Questi modelli possono essere implementati direttamente utilizzando la nostra API di inferenza LLM. Per scoprire come convertire altri modelli, consulta la sezione Conversione di modelli.
Gemma-2 2B
Gemma-2 2B è il modello più recente 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 parametri 2B e pesi aperti. Gemma-2 2B è nota per le sue capacità di ragionamento all'avanguardia per i modelli della sua classe.
I modelli Gemma-2 2B sono disponibili nelle seguenti varianti:
- gemma2-2b-it-cpu-int8: modello Gemma-2 2B a 8 bit con compatibilità con la CPU.
- gemma2-2b-it-gpu-int8: modello Gemma-2 2B a 8 bit con compatibilità GPU.
Puoi anche ottimizzare il modello e aggiungere nuovi pesi prima di aggiungerlo all'app. Per maggiori informazioni sull'ottimizzazione e sulla personalizzazione di Gemma, consulta Ottimizzazione di Gemma. Dopo aver scaricato Gemma-2B da Kaggle Models, il modello è già nel formato appropriato per l'utilizzo con MediaPipe Tasks.
Gemma 2B
Gemma 2B fa parte di una famiglia di modelli aperti leggeri e all'avanguardia creati sulla base della stessa ricerca e tecnologia utilizzata per creare i modelli Gemini. Il modello contiene 2 miliardi di parametri e pesi aperti. Questo modello è adatto a una serie di attività di generazione di testo, tra cui risposta alle domande, riassunto e ragionamento.
I modelli Gemma 2B sono disponibili nelle seguenti varianti:
- gemma-2b-it-cpu-int4: modello Gemma 2B a 4 bit con compatibilità con la CPU.
- gemma-2b-it-cpu-int8: modello Gemma 2B a 8 bit con compatibilità con la CPU.
- gemma-2b-it-gpu-int4: modello Gemma 2B a 4 bit con compatibilità GPU.
- gemma-2b-it-gpu-int8: modello Gemma 2B a 8 bit con compatibilità GPU.
Puoi anche ottimizzare il modello e aggiungere nuovi pesi prima di aggiungerlo all'app. Per maggiori informazioni sull'ottimizzazione e sulla personalizzazione di Gemma, consulta Ottimizzazione di Gemma. Dopo aver scaricato Gemma 2B da Kaggle Models, il modello è già nel formato appropriato per l'utilizzo con MediaPipe Tasks.
Gemma 7B
Gemma 7B è un modello Gemma più grande con parametri di 7 miliardi e pesi aperti. Il modello è più efficace per una serie di attività di generazione di testo, tra cui risposta alle domande, riassunto e ragionamento. Gemma 7B è supportato solo sul web.
Il modello Gemma 7B è disponibile in una variante:
- gemma-1.1-7b-it-gpu-int8: modello Gemma 7B a 8 bit con compatibilità GPU.
Dopo aver scaricato Gemma 7B da Kaggle Models, il modello è già nel formato appropriato per l'utilizzo con MediaPipe.
Falcon 1B
Falcon-1B è un modello causale solo con decoder di 1 miliardo di parametri addestrato su 350 miliardi di token di RefinedWeb.
L'API LLM Inference richiede che i seguenti file vengano scaricati e archiviati localmente:
tokenizer.json
tokenizer_config.json
pytorch_model.bin
Dopo aver scaricato i file del modello Falcon, il modello è pronto per essere convertito nel formato MediaPipe con uno script di conversione. Segui i passaggi descritti nella sezione Script di conversione per i modelli supportati.
StableLM 3B
StableLM-3B è un modello linguistico solo con decoder di 3 miliardi di parametri preaddestrato su 1 triliardo di token di diversi set di dati in inglese e codice per 4 epoche.
L'API LLM Inference richiede che i seguenti file vengano scaricati e archiviati localmente:
tokenizer.json
tokenizer_config.json
model.safetensors
Dopo aver scaricato i file del modello StableLM, il modello è pronto per essere convertito nel formato MediaPipe con uno script di conversione. Segui i passaggi descritti nella sezione Script di conversione per i modelli supportati.
Phi-2
Phi-2 è un modello Transformer con 2,7 miliardi di parametri. È stato addestrato utilizzando vari testi sintetici di NLP e siti web filtrati. Il modello è più adatto per i prompt che utilizzano il formato di domanda e risposta, chat e codice.
L'API LLM Inference richiede che i seguenti file vengano scaricati e archiviati localmente:
tokenizer.json
tokenizer_config.json
model-00001-of-00002.safetensors
model-00002-of-00002.safetensors
Dopo aver scaricato i file del modello Phi-2, il modello è pronto per essere convertito nel formato MediaPipe con uno script di conversione. Segui i passaggi descritti nella sezione Script di conversione per i modelli supportati.
Modelli PyTorch generativi
I modelli generativi PyTorch possono essere convertiti in un formato compatibile con MediaPipe con 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 sulla mappatura ed esportazione dei modelli, consulta la pagina GitHub di AI Edge Torch.
Se intendi utilizzare l'API AI Edge Torch Generative per convertire un modello PyTorch, segui i passaggi descritti nella sezione Convertitore Torch Generative per i modelli PyTorch.
Conversione del modello
L'API MediaPipe LLM Inference ti consente di eseguire un'ampia gamma di modelli linguistici di grandi dimensioni (LLM) on-device. Sono inclusi i modelli che sono stati preconvertiti in un formato compatibile con MediaPipe, nonché altri modelli che possono essere convertiti con uno script di conversione o la libreria Torch per l'IA Edge.
L'API LLM Inference accetta modelli nei formati file .bin
e .task
.
I modelli preconvertiti e quelli convertiti con lo script di conversione saranno file .bin
, mentre i modelli convertiti con la libreria Torch per l'IA Edge saranno file .task
. Non modificare manualmente i formati file dei modelli convertiti.
L'API LLM Inference contiene tre percorsi di conversione del modello:
- Modelli preconvertiti (Gemma 2B, Gemma 7B, Gemma-2 2B): nessuna conversione richiesta.
- Modelli supportati (Phi-2, StableLM, Falcon): script di conversione MediaPipe.
- Altri modelli PyTorch (tutti i modelli LLM PyTorch): API AI Edge Torch Generative.
Modelli preconvertiti
I modelli Gemma-2 2B, Gemma 2B e Gemma 7B sono disponibili come modelli pre-convertiti nel formato MediaPipe. Questi modelli non richiedono alcun passaggio di conversione aggiuntivo da parte dell'utente e possono essere eseguiti così come sono con l'API LLM Inference.
Puoi scaricare Gemma-2 2B da Modelli Kaggle:
- gemma2-2b-it-cpu-int8: modello Gemma-2 2B a 8 bit con compatibilità con la CPU.
- gemma2-2b-it-gpu-int8: modello Gemma-2 2B a 8 bit con compatibilità GPU.
Puoi scaricare le varianti di Gemma 2B da Kaggle Models:
- gemma-2b-it-cpu-int4: modello Gemma 2B a 4 bit con compatibilità con la CPU.
- gemma-2b-it-cpu-int8: modello Gemma 2B a 8 bit con compatibilità con la CPU.
- gemma-2b-it-gpu-int4: modello Gemma 2B a 4 bit con compatibilità GPU.
- gemma-2b-it-gpu-int8: modello Gemma 2B a 8 bit con compatibilità GPU.
Puoi scaricare Gemma 7B da Kaggle Models:
- gemma-1.1-7b-it-gpu-int8: modello Gemma 7B a 8 bit con compatibilità GPU.
Per ulteriori informazioni sui modelli Gemma, consulta la documentazione su Gemma-2 2B, Gemma 2B e Gemma 7B.
Script di conversione per i modelli supportati
Il pacchetto MediaPipe offre uno script di conversione per convertire i seguenti modelli esterni in un formato compatibile con MediaPipe:
Per ulteriori informazioni sui modelli esterni supportati, consulta la documentazione su Falcon 1B, StableLM 3B e Phi-2.
Il processo di conversione del modello richiede il pacchetto MediaPipe PyPI. Lo script di conversione è disponibile in tutti i pacchetti MediaPipe dopo 0.10.11
.
Installa e importa le dipendenze con quanto segue:
$ python3 -m pip install mediapipe
Utilizza la libreria genai.converter
per convertire il modello:
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)
Per convertire il modello LoRA, ConversionConfig
deve specificare le opzioni del modello di base nonché 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 produrrà due file flatbuffer TFLite, uno per il modello di base e l'altro per il modello LoRA.
Parametro | Descrizione | Valori accettati |
---|---|---|
input_ckpt |
Il percorso del file model.safetensors o pytorch.bin . Tieni presente che a volte il formato safetensors del modello viene suddiviso in più file, ad esempio model-00001-of-00003.safetensors , model-00001-of-00003.safetensors . Puoi specificare un pattern di file, ad esempio model*.safetensors . |
PERCORSO |
ckpt_format |
Il formato del file del modello. | {"safetensors", "pytorch"} |
model_type |
L'LLM in fase di conversione. | {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"} |
backend |
Il processore (delegato) utilizzato per eseguire il modello. | {"cpu", "gpu"} |
output_dir |
Il percorso della directory di output che ospita i file dei pesi per livello. | PERCORSO |
output_tflite_file |
Il percorso del file di output. Ad esempio, "model_cpu.bin" o "model_gpu.bin". Questo file è compatibile solo con l'API di inferenza LLM e non può essere utilizzato come file "tflite" generico. | PERCORSO |
vocab_model_file |
Il percorso della directory in cui sono archiviati i file tokenizer.json e
tokenizer_config.json . Per Gemma, posiziona il puntatore del mouse sul singolo file tokenizer.model . |
PERCORSO |
lora_ckpt |
Il percorso del file safetensors ckpt LoRA che memorizza il peso dell'adattatore LoRA. | PERCORSO |
lora_rank |
Un numero intero che rappresenta il ranking del checkpoint LoRA. Obbligatorio per convertire i pesi lora. Se non viene fornito, il convertitore presume che non ci siano pesi LoRA. Nota: solo il backend GPU supporta LoRa. | Numero intero |
lora_output_tflite_file |
Nome del file tflite di output per i pesi LoRA. | PERCORSO |
Torch Generative Converter per i modelli PyTorch
I modelli generativi PyTorch possono essere convertiti in un formato compatibile con MediaPipe con l'API AI Edge Torch Generative. Puoi utilizzare l'API per creare, convertire e quantizzare i modelli LLM di PyTorch da utilizzare con l'API di inferenza LLM. Il convertitore Torch Generative esegue la conversione solo per la CPU e richiede una macchina Linux con almeno 64 GB di RAM.
La conversione di un modello PyTorch con l'API AI Edge Torch Generative prevede quanto segue:
- Scarica i checkpoint del modello PyTorch
- Utilizza l'API AI Edge Torch Generative per creare, convertire e quantizzare il
modello in un formato file compatibile con MediaPipe (
.tflite
). - Crea un Task Bundle (
.task
) dal file tflite e dal tokenizzatore del modello.
Per creare un Task Bundle, utilizza lo script di aggregazione per creare un Task Bundle. Il processo di raggruppamento pacchettizza il modello mappato con metadati aggiuntivi (ad es. Tokenizer Parameters) necessari per eseguire l'inferenza end-to-end.
La procedura di raggruppamento dei modelli richiede il pacchetto PyPI MediaPipe. Lo script di conversione è disponibile in tutti i pacchetti MediaPipe dopo 0.10.14
.
Installa e importa le dipendenze con quanto segue:
$ 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 da AI Edge. | PERCORSO |
tokenizer_model |
Il percorso del modello di tokenizzazione SentencePiece. | PERCORSO |
start_token |
Token di inizio specifico del modello. Il token iniziale deve essere presente nel modello di tokenizzazione fornito. | STRING |
stop_tokens |
Modelli di token di fermata specifici. I token di interruzione devono essere presenti nel modello di tokenizzazione fornito. | ELENCO[STRINGA] |
output_filename |
Il nome del file del bundle di attività di output. | PERCORSO |
Personalizzazione LoRA
L'API di inferenza LLM di Mediapipe può essere configurata per supportare l'adattamento a basso ranking (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 i pesi LoRA applicabili solo ai livelli di attenzione. Questa implementazione iniziale funge da API sperimentale per sviluppi futuri, con piani per supportare più modelli e vari tipi di livelli nei prossimi aggiornamenti.
Prepara i modelli LoRA
Segui le istruzioni su HuggingFace per addestrare un modello LoRA ottimizzato sul tuo set di dati con i tipi di modelli supportati, Gemma o Phi-2. I modelli Gemma-2 2B, Gemma
2B e
Phi-2 sono entrambi disponibili su
HuggingFace nel formato safetensors. Poiché l'API LLM Inference supporta solo LoRA nei 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, sono disponibili modelli LoRA ottimizzati e accessibili al pubblico che si adattano all'API di inferenza LLM su HuggingFace. 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 perfezionato.
Il file safetensors è il checkpoint LoRA utilizzato nella conversione del modello.
Come passaggio successivo, devi convertire i pesi del modello in un Flatbuffer di TensorFlow Lite utilizzando il pacchetto Python MediaPipe. ConversionConfig
deve specificare le opzioni del modello di base e altre opzioni LoRa. Tieni presente che, poiché l'API supporta l'inferenza LoRa solo 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 produrrà due file flatbuffer TFLite, uno per il modello di base e l'altro per il modello LoRA.
Inferenza del modello LoRA
L'API di inferenza LLM per web, Android e iOS è stata aggiornata per supportare l'inferenza del modello LoRA.
Android supporta LoRa statico durante l'inizializzazione. Per caricare un modello LoRA, gli utenti devono specificare 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.