L'API LLM Inference consente di eseguire modelli linguistici di grandi dimensioni (LLM) in modo completo on-device, che potete usare per svolgere una vasta gamma di attività, generando testo, recuperando informazioni in formato linguaggio naturale e riassumere documenti. L'attività fornisce supporto integrato per modelli linguistici di grandi dimensioni (LLM) da testo a testo, in modo da poter applicare i più recenti modelli di IA generativa alle tue app e ai tuoi prodotti.
L'attività supporta Gemma 2B e 7B, una parte di una famiglia di modelli aperti, leggeri e all'avanguardia, realizzati a partire di ricerca e tecnologia usate per creare Gemini di grandi dimensioni. Supporta inoltre i seguenti modelli esterni: Phi-2 Falcon-RW-1B e StableLM-3B.
Oltre ai modelli supportati in modo nativo, gli utenti possono mappare altri utilizzando AI Edge di Google (tra cui mappatura dei modelli PyTorch). In questo modo gli utenti possono esportare un modello mappato in una firma multipla I modelli TensorFlow Lite, integrati con parametri tokenizzatore un gruppo di attività.
Inizia
Inizia a utilizzare questa attività seguendo una di queste guide all'implementazione per il tuo piattaforma di destinazione. Queste guide specifiche per piattaforma ti illustreranno una procedura di base di questa attività, con esempi di codice che usano un modello disponibile le opzioni di configurazione consigliate:
Web:
Android:
iOS
Dettagli attività
Questa sezione descrive le funzionalità, gli input, gli output e la configurazione opzioni di questa attività.
Funzionalità
L'API LLM Inference contiene le seguenti funzionalità chiave:
- Generazione da testo a testo: genera testo in base a un prompt di testo di input.
- Selezione LLM: applica più modelli per personalizzare l'app in base alle tue e casi d'uso specifici. Puoi anche riaddestrare e applicare pesi personalizzati un modello di machine learning.
- Supporto LoRA: estendi e personalizza la funzionalità LLM con il modello LoRA addestrando tutti i set di dati o prendendo LoRA predefinito della community open source (solo modelli nativi).
Input per le attività | Output delle attività |
---|---|
L'API LLM Inference accetta i seguenti input:
|
L'API LLM Inference restituisce i seguenti risultati:
|
Opzioni di configurazione
Questa attività include le seguenti opzioni di configurazione:
Nome opzione | Descrizione | Intervallo di valori | Valore predefinito |
---|---|---|---|
modelPath |
Il percorso di archiviazione del 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 passaggio della generazione. Limita le previsioni ai token top-k più probabili. | Numero intero | 40 |
temperature |
La quantità di casualità introdotta durante la generazione. Un della temperatura aumenta la creatività del testo generato, mentre una temperatura più bassa genera una generazione più prevedibile. | Float | 0,8 |
randomSeed |
Il seed casuale utilizzato durante la generazione del testo. | Numero intero | 0 |
loraPath |
Il percorso assoluto al modello LoRA localmente sul dispositivo. Nota: è compatibile solo con i modelli di GPU. | PERCORSO | N/D |
resultListener |
Imposta il listener di risultati in modo che riceva i risultati in modo asincrono. Applicabile solo se si utilizza il metodo di generazione asincrona. | N/D | N/D |
errorListener |
Imposta un listener di errori facoltativo. | N/D | N/D |
Modelli
L'API Inference LLM contiene il supporto integrato per la conversione da testo a testo di grandi dimensioni ottimizzati per l'esecuzione su browser e dispositivi mobili. Questi i modelli leggeri possono essere scaricati per eseguire inferenze completamente sul dispositivo.
Prima di inizializzare l'API LLM Inference, scarica uno dei modelli supportati e archiviare il file nella directory del progetto.
Gemma 2B
Gemma 2B fa parte di una famiglia di modelli aperti leggeri e all'avanguardia basati sulla stessa ricerca e la tecnologia usata per creare i modelli Gemini. La contiene 2 miliardi di parametri e pesi aperti. Questo modello è adatto per un diverse attività di generazione di testi, tra cui la risposta alle domande, il riassunto, e al ragionamento.
I modelli Gemma 2B sono disponibili in quattro varianti:
- gemma-2b-it-cpu-int4: Modello Gemma 2B a 4 bit con compatibilità CPU.
- gemma-2b-it-cpu-int8: Modello Gemma 2B a 8 bit con compatibilità 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 Per ulteriori informazioni sull'ottimizzazione e sulla personalizzazione di Gemma, vedi Ottimizzazione di Gemma. Dopo aver scaricato Gemma da Kaggle Models, il modello sia già nel formato appropriato da utilizzare con MediaPipe.
Se scarichi Gemma 2B da Hugging Volto, devi convertire del modello in un formato compatibile con MediaPipe. L'API LLM Inference richiede il download e la conversione dei seguenti file:
model-00001-of-00002.safetensors
model-00002-of-00002.safetensors
tokenizer.json
tokenizer_config.json
Gemma 7B
Gemma 7B è un modello Gemma più grande con 7B e i pesi aperti. Il modello è più potente per una varietà di testi di generazione di testi, tra cui la risposta alle domande, il riassunto e il 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.
Se scarichi Gemma 7B da Hugging Face: devi convertire il modello in un formato compatibile con MediaPipe. La L'API LLM Inference richiede il download e la conversione dei seguenti file:
model-00001-of-00004.safetensors
model-00002-of-00004.safetensors
model-00003-of-00004.safetensors
model-00004-of-00004.safetensors
tokenizer.json
tokenizer_config.json
Falcon 1B
Falcon-1B è un modello di solo decoder causale da 1 miliardo di parametri addestrato su 350B di token di RefinedWeb.
L'API LLM Inference richiede il download e l'archiviazione dei seguenti file a livello locale:
tokenizer.json
tokenizer_config.json
pytorch_model.bin
Dopo aver scaricato i file del modello Falcon, il modello è pronto per essere convertito in nel formato MediaPipe. Segui i passaggi in Converti il modello in MediaPipe standard.
Stabile LM 3B
StableLM-3B è un modello linguistico di solo decoder da 3 miliardi di parametri preaddestrato 1 trilione di token di set di dati diversi in inglese e codifica per 4 epoche.
L'API LLM Inference richiede il download e l'archiviazione dei seguenti file a livello locale:
tokenizer.json
tokenizer_config.json
model.safetensors
Dopo aver scaricato i file del modello StableLM, il modello è pronto per essere convertito nel formato MediaPipe. Segui i passaggi in Converti il modello in MediaPipe standard.
Phi-2
Phi-2 è un modello Transformer con 2,7 miliardi di parametri. È stato addestrato utilizzando vari Testi sintetici NLP e siti web filtrati. Il modello è più adatto ai prompt utilizzando il formato domanda-risposta, chat e codice.
L'API LLM Inference richiede il download e l'archiviazione dei seguenti file a livello locale:
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 in nel formato MediaPipe. Segui i passaggi in Converti il modello in MediaPipe standard.
Modelli AI Edge esportati
AI Edge è un'offerta di Google che ti consente di convertire i modelli mappati dagli utenti in modelli TensorFlow Lite con più firme. Per maggiori dettagli sulla mappatura esporta i modelli, visita AI Edge Torch Pagina GitHub.
Dopo aver esportato il modello in formato TFLite, il modello è pronto convertito nel formato MediaPipe. Per ulteriori informazioni, vedi Converti il modello in formato MediaPipe.
Converti il modello in formato MediaPipe
Conversione del modello nativo
Se utilizzi un LLM esterno (Phi-2, Falcon o StableLM) o uno non Kaggle di Gemma, utilizza i nostri script di conversione per formattare il modello compatibile con MediaPipe.
Il processo di conversione del modello richiede il pacchetto MediaPipe PyPI. La conversione
lo script è disponibile in tutti i pacchetti MediaPipe dopo il giorno 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 il modello di base
oltre a opzioni LoRA aggiuntive. Nota che, poiché solo l'API
supporta 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 restituirà 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 . Nota che a volte il formato dei tensori di sicurezza del modello viene suddiviso in più file, ad esempio model-00001-of-00003.safetensors e model-00001-of-00003.safetensors . Puoi specificare un pattern di file, ad esempio model*.safetensors . |
PERCORSO |
ckpt_format |
Il formato file del modello. | {"safetensors", "pytorch"} |
model_type |
L'LLM da convertire. | {"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 di peso 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 Inference LLM e non può essere utilizzato come file "tflite" generale. | PERCORSO |
vocab_model_file |
Il percorso della directory in cui sono archiviati i file tokenizer.json e
tokenizer_config.json file. Per Gemma, posiziona il puntatore del mouse sul singolo file tokenizer.model . |
PERCORSO |
lora_ckpt |
Il percorso del ckpt LoRA del file securetensors in cui è archiviato il peso dell'adattatore LoRA. | PERCORSO |
lora_rank |
Un numero intero che rappresenta il rango di LoRA ckpt. Obbligatorio per convertire i pesi Lora. Se non viene specificato, il convertitore presuppone che non siano presenti pesi LoRA. Nota: solo il backend della GPU supporta LoRA. | Numero intero |
lora_output_tflite_file |
Il nome file tflite di output per i pesi LoRA. | PERCORSO |
Conversione del modello AI Edge
Se utilizzi un LLM mappato a un modello TFLite tramite AI Edge, utilizza la nostra dello script di raggruppamento per creare un pacchetto di attività. Il processo di raggruppamento accorpa un modello mappato con metadati aggiuntivi (ad es. parametri del tokenizzatore) necessari per eseguire l'inferenza end-to-end.
Il processo di raggruppamento dei modelli richiede il pacchetto MediaPipe PyPI. La conversione
lo script è disponibile in tutti i pacchetti MediaPipe dopo il giorno 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 tokenizzatore SentencePiece. | PERCORSO |
start_token |
Token iniziale specifico per il modello. Il token iniziale deve essere presente nella fornito dal modello di tokenizzatore. | STRINGA |
stop_tokens |
Token di interruzione specifici del modello. I token di interruzione devono essere presenti nel fornito dal modello di tokenizzatore. | ELENCO[STRING] |
output_filename |
Il nome del file del bundle di attività di output. | PERCORSO |
Personalizzazione LoRA
L'API di inferenza LLM Mediapipe può essere configurata per supportare l'adattamento basso ranking (LoRA) per gli LLM. Utilizzando modelli LoRA perfezionati, gli sviluppatori possono personalizzare il comportamento degli LLM attraverso un processo di addestramento conveniente.Il supporto LoRA dell'API LLM Inference funziona per i modelli Gemma-2B e Phi-2 per il backend GPU, con pesi LoRA applicabili solo ai livelli di attenzione. Questo l'implementazione iniziale funge da API sperimentale per gli sviluppi futuri e prevediamo di supportare più modelli e vari tipi di strati nel prossimo aggiornamenti.
prepara i modelli LoRA
Segui le istruzioni su HuggingFace per addestrare un modello LoRA ottimizzato sul tuo set di dati con tipi di modelli supportati, Gemma-2B o Phi-2. I modelli Gemma-2B e Phi-2 sono entrambi disponibili su HuggingFace in formato securetensors. 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-2B
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 HuggingFace sono disponibili modelli LoRA ottimizzati e accessibili pubblicamente che si adattano all'API Inference LLM. 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 ottimizzati. Il file securetensors è il checkpoint LoRA utilizzato nella conversione del modello.
Come passaggio successivo, devi convertire i pesi del modello in un Flatbuffer TensorFlow Lite utilizzando il pacchetto Python MediaPipe. ConversionConfig
deve specificare le opzioni del modello di base e ulteriori opzioni LoRA. 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 restituirà 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 viene aggiornata per supportare l'inferenza del modello LoRA. Il web supporta LoRA dinamico, che può cambiare modelli LoRA diversi durante il runtime. Android e iOS supportano LoRA statico, che utilizza gli stessi pesi LoRA per tutta la durata dell'attività.
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.