Przewodnik dotyczący wnioskowania na podstawie LLM

Interfejs LLM Inference API umożliwia uruchamianie dużych modeli językowych (LLM) całkowicie na urządzeniu. Można go używać do wykonywania wielu zadań, takich jak generowanie tekstu, pobieranie informacji w formie języka naturalnego czy streszczanie dokumentów. Zadanie zapewnia wbudowane wsparcie dla wielu dużych modeli językowych do konwersji tekstu na tekst, dzięki czemu możesz stosować najnowsze modele generatywnej AI na urządzeniach w swoich aplikacjach i usługach.

Wypróbuj to!

Zadanie obsługuje te warianty Gemma: Gemma-2 2B, Gemma 2B i Gemma 7B. Gemma to rodzina lekkich, najnowocześniejszych otwartych modeli opartych na tych samych badaniach i technologiach, które posłużyły do utworzenia modeli Gemini. Obsługuje też te modele zewnętrzne: Phi-2, Falcon-RW-1B i StableLM-3B.

Oprócz obsługiwanych modeli możesz używać AI Edge Torch Google do eksportowania modeli PyTorch do modeli LiteRT (tflite) z wieloma podpisami, które są dostarczane z parametrami tokenizera w celu utworzenia pakietów zadań zgodnych z interfejsem LLM Inference API. Modele przekonwertowane za pomocą AI Edge Torch mogą działać tylko na procesorze CPU, dlatego są ograniczone do Androida i iOS.

Rozpocznij

Aby zacząć korzystać z tego zadania, postępuj zgodnie z jednym z tych przewodników dotyczących wdrażania na platformie docelowej. Te przewodniki dotyczące poszczególnych platform zawierają podstawowe informacje o wdrażaniu tego zadania, a także przykłady kodu, które korzystają z dostępnego modelu i zalecanych opcji konfiguracji:

Szczegóły działania

W tej sekcji opisano możliwości, dane wejściowe i wyjściowe oraz opcje konfiguracji związane z tym zadaniem.

Funkcje

Interfejs LLM Inference API zawiera te najważniejsze funkcje:

  1. generowanie tekstu na podstawie tekstu – generowanie tekstu na podstawie prompta tekstowego;
  2. Wybór modelu LLM – użyj wielu modeli, aby dostosować aplikację do konkretnych zastosowań. Możesz też przeprowadzić ponowne uczenie i zastosować do modelu niestandardowe wagi.
  3. Obsługa LoRA – rozszerzanie i dostosowywanie możliwości LLM za pomocą modelu LoRA albo przez trenowanie na całym zbiorze danych, albo przez pobranie gotowych modeli LoRA z otwartej społeczności (niezgodne z modelami przekonwertowanymi za pomocą interfejsu AI Edge Torch Generative API).
Dane wejściowe zadania Dane wyjściowe
Interfejs LLM Inference API obsługuje te dane wejściowe:
  • prompt tekstowy (np. pytanie, temat e-maila, dokument do podsumowania);
Interfejs LLM Inference API zwraca te wyniki:
  • tekst wygenerowany na podstawie prompta (np. odpowiedzi na pytanie, wersji roboczej e-maila, podsumowania dokumentu);

Opcje konfiguracji

To zadanie ma te opcje konfiguracji:

Nazwa opcji Opis Zakres wartości Wartość domyślna
modelPath Ścieżka do miejsca przechowywania modelu w katalogu projektu. ŚCIEŻKA Nie dotyczy
maxTokens Maksymalna liczba tokenów (tokenów wejściowych + tokenów wyjściowych), którą obsługuje model. Liczba całkowita 512
topK Liczba tokenów uwzględnianych przez model na każdym etapie generowania. Ogranicza prognozy do k najbardziej prawdopodobnych tokenów. Liczba całkowita 40
temperature Ilość losowości wprowadzonej podczas generowania. Wyższa temperatura powoduje większą kreatywność wygenerowanego tekstu, a niższa – bardziej przewidywalne generowanie. Liczba zmiennoprzecinkowa 0,8
randomSeed Losowe nasiono użyte podczas generowania tekstu. Liczba całkowita 0
loraPath Ścieżka bezwzględna do modelu LoRa na urządzeniu. Uwaga: ta funkcja jest zgodna tylko z modelami GPU. ŚCIEŻKA Nie dotyczy
resultListener Ustawia odbiornik wyników na odbiór wyników asynchronicznie. Dotyczy tylko metody generowania asynchronicznego. Nie dotyczy Nie dotyczy
errorListener Ustawia opcjonalny odbiornik błędów. Nie dotyczy Nie dotyczy

Modele

Interfejs LLM Inference API obsługuje wiele dużych modeli językowych tekst-tekst, w tym wbudowane wsparcie dla kilku modeli zoptymalizowanych pod kątem działania w przeglądarkach i na urządzeniach mobilnych. Te lekkie modele można stosować do wykonywania wnioskowań bezpośrednio na urządzeniu.

Zanim zainicjujesz interfejs LLM Inference API, pobierz model i zapisz go w katalogu projektu. Możesz użyć wstępnie przekonwertowanego modelu lub przekonwertować model do formatu zgodnego z MediaPipe.

Interfejs LLM Inference API jest zgodny z 2 kategoriami modeli, z których niektóre wymagają konwersji modelu. Korzystając z tabeli, określ wymagane kroki i metodę dla swojego modelu.

Modele Metoda konwersji Zgodne platformy Typ pliku
Obsługiwane modele Gemma 2B, Gemma 7B, Gemma-2 2B, Phi-2, StableLM, Falcon MediaPipe Android, iOS, internet .bin
Inne modele PyTorch Wszystkie modele LLM PyTorch Biblioteka generatywnej AI Edge Torch Android, iOS .task

Konwertowane pliki .bin dotyczące Gemma 2B, Gemma 7B i Gemma-2 2B są dostępne na Kaggle. Te modele można wdrażać bezpośrednio za pomocą naszego interfejsu LLM Inference API. Aby dowiedzieć się, jak konwertować inne modele, zapoznaj się z sekcją Konwersja modelu.

Gemma-2 2B

Gemma-2 2B to najnowszy model z rodziny Gemma, czyli rodziny lekkich, otwartych modeli opartych na najnowszych badaniach i technologiach, które posłużyły do stworzenia modeli Gemini. Model zawiera 2 mld parametrów i otwarte wartości wag. Gemma-2 2B to model o najnowocześniejszych umiejętnościach wnioskowania w swojej klasie.

Pobierz Gemma-2 2B

Modele Gemma-2 2B są dostępne w tych wariantach:

Możesz też dostosować model i dodać nowe wagi, zanim dodasz go do aplikacji. Więcej informacji o dostosowywaniu i korzystaniu z Gemma znajdziesz w artykule Dostosowanie Gemma. Po pobraniu modelu Gemma-22B z Kaggle Models model jest już w odpowiednim formacie do użycia w MediaPipe Tasks.

Gemma 2B

Gemma 2B należy do rodziny lekkich, najnowocześniejszych otwartych modeli opartych na tych samych badaniach i technologiach, które posłużyły do utworzenia modeli Gemini. Model zawiera 2 mld. parametrów i otwarte wagi. Ten model dobrze sprawdza się w różnych zadaniach związanych z generowaniem tekstu, takich jak odpowiadanie na pytania, streszczanie i wyciąganie wniosków.

Pobierz Gemma 2B

Modele Gemma 2B są dostępne w tych wariantach:

Możesz też dostosować model i dodać nowe wagi, zanim dodasz go do aplikacji. Więcej informacji o dostosowywaniu i korzystaniu z Gemma znajdziesz w artykule Dostosowanie Gemma. Po pobraniu modelu Gemma 2B z Kaggle Models jest on już w odpowiednim formacie do użycia w MediaPipe Tasks.

Gemma 7B

Gemma 7B to większy model Gemma z parametrami 7B i otwartymi wagami. Model jest bardziej wydajny w przypadku różnych zadań związanych z generowaniem tekstu, w tym odpowiadania na pytania, streszczania i rozumowania. Gemma 7B jest obsługiwana tylko w internecie.

Pobierz Gemma 7B

Model Gemma 7B występuje w jednym wariancie:

Po pobraniu modelu Gemma 7B z Kaggle Models jest on już w odpowiednim formacie do użycia z MediaPipe.

Falcon 1B

Falcon-1B to model z 1 miliardem parametrów i z samym dekoderem, wytrenowany na 350 mld tokenów RefinedWeb.

Pobierz Falcon 1B

Interfejs API LLM Inference wymaga pobrania i zapisania lokalnie tych plików:

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

Po pobraniu plików modelu Falcon można przekonwertować model do formatu MediaPipe za pomocą skryptu konwersji. Wykonaj czynności opisane w sekcji Skrypt konwersji dla obsługiwanych modeli.

StableLM 3B

StableLM-3B to model językowy z 3 mld parametrów, który jest dekoderem i został wstępnie wytrenowany na podstawie 1 biliona tokenów z różnorodnych zbiorów danych z różnymi językami i kodem na przestrzeni 4 epoch.

Pobierz StableLM 3B

Interfejs API LLM Inference wymaga pobrania i zapisania lokalnie tych plików:

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

Po pobraniu plików modelu StableLM możesz przekonwertować go do formatu MediaPipe za pomocą skryptu konwersji. Wykonaj czynności opisane w sekcji Skrypt konwersji dla obsługiwanych modeli.

Phi-2

Phi-2 to model transformera z 2,7 mld parametrów. Został on wytrenowany na podstawie różnych syntetycznych tekstów NLP i odfiltrowanych stron internetowych. Model najlepiej nadaje się do promptów korzystających z formatu pytania i odpowiedzi, czatu i kodu.

Pobierz Phi-2

Interfejs API LLM Inference wymaga pobrania i zapisania lokalnie tych plików:

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

Po pobraniu plików modelu Phi-2 możesz przekonwertować model do formatu MediaPipe za pomocą skryptu konwersji. Wykonaj czynności opisane w sekcji Skrypt konwersji dla obsługiwanych modeli.

Generatywne modele PyTorch

Modele generatywne PyTorch można przekonwertować do formatu zgodnego z MediaPipe za pomocą interfejsu AI Edge Torch Generative API. Za pomocą interfejsu API możesz konwertować modele PyTorch na modele LiteRT (TensorFlow Lite) z wieloma podpisami. Więcej informacji o mapowaniu i eksportowaniu modeli znajdziesz na stronie AI Edge Torch na GitHub.

Jeśli chcesz użyć interfejsu AI Edge Torch Generative API do konwertowania modelu PyTorch, wykonaj czynności opisane w sekcji Konwerter Torch Generative na potrzeby modeli PyTorch.

Konwersja modelu

Interfejs MediaPipe LLM Inference API umożliwia uruchamianie na urządzeniu wielu różnych dużych modeli językowych. Obejmuje to modele, które zostały wstępnie przekonwertowane do formatu zgodnego z MediaPipe, a także inne modele, które można przekonwertować za pomocą skryptu konwersji lub biblioteki AI Edge Torch.

Interfejs API wnioskowania opartego na LLM akceptuje modele w formatach plików .bin.task. Modele przekonwertowane wcześniej i modele przekonwertowane za pomocą skryptu do konwertowania będą plikami .bin, a modele przekonwertowane za pomocą biblioteki AI Edge Torch będą plikami .task. Nie zmieniaj ręcznie formatów plików przekonwertowanych modeli.

Interfejs LLM Inference API zawiera 3 ścieżki konwersji modelu:

Wstępnie przekonwertowane modele

Modele Gemma-2 2B, Gemma 2B i Gemma 7B są dostępne jako wstępnie przekonwertowane modele w formacie MediaPipe. Modele te nie wymagają od użytkownika żadnych dodatkowych czynności konwertowania i można je uruchamiać w postaci niezmienionej za pomocą interfejsu LLM Inference API.

Model Gemma-2 2B możesz pobrać z Kaggle Models:

Warianty Gemma 2B możesz pobrać z Kaggle Models:

Model Gemma 7B możesz pobrać z Kaggle Models:

Więcej informacji o modelach Gemma znajdziesz w dokumentacji dotyczącej Gemma-2 2B, Gemma 2BGemma 7B.

Skrypt konwersji dla obsługiwanych modeli

Pakiet MediaPipe zawiera skrypt konwersji, który umożliwia konwertowanie tych zewnętrznych modeli na format zgodny z MediaPipe:

Więcej informacji o obsługiwanych modelach zewnętrznych znajdziesz w dokumentacji dotyczącej Falcon 1B, StableLM 3BPhi-2.

Proces konwertowania modelu wymaga pakietu MediaPipe PyPI. Skrypt konwersji jest dostępny we wszystkich pakietach MediaPipe po 0.10.11.

Zainstaluj i zaimportuj zależności za pomocą:

$ python3 -m pip install mediapipe

Aby przekonwertować model, użyj biblioteki genai.converter:

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)

Aby przekonwertować model LoRA, w elementach ConversionConfig należy określić opcje modelu podstawowego oraz dodatkowe opcje LoRA. Pamiętaj, że interfejs API obsługuje wnioskowanie LoRA tylko z procesorem graficznym, więc backend musi być ustawiony na '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)

Konwerter wygeneruje 2 pliki flatbuffera TFLite: jeden dla modelu podstawowego, a drugi dla modelu LoRA.

Parametr Opis Akceptowane wartości
input_ckpt Ścieżka do pliku model.safetensors lub pytorch.bin. Czasami format safetensors modelu jest dzielony na kilka plików, np. model-00001-of-00003.safetensors, model-00001-of-00003.safetensors. Możesz podać wzorzec pliku, np. model*.safetensors. ŚCIEŻKA
ckpt_format Format pliku modelu. {"safetensors", "pytorch"}
model_type Konwertowany plik LLM. {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"}
backend Procesor (delegat) używany do uruchamiania modelu. {"cpu", "gpu"}
output_dir Ścieżka do katalogu wyjściowego, który zawiera pliki wag dla poszczególnych warstw. ŚCIEŻKA
output_tflite_file Ścieżka do pliku wyjściowego. Na przykład „model_cpu.bin” lub „model_gpu.bin”. Ten plik jest zgodny tylko z interfejsem LLM Inference API i nie można go używać jako ogólnego pliku „tflite”. ŚCIEŻKA
vocab_model_file Ścieżka do katalogu zawierającego pliki tokenizer.jsontokenizer_config.json. W przypadku Gemmy wskaż pojedynczy plik tokenizer.model. ŚCIEŻKA
lora_ckpt Ścieżka do pliku LoRA ckpt safetensors, który przechowuje wagę adaptera LoRA. ŚCIEŻKA
lora_rank Liczba całkowita reprezentująca pozycję w LoRA ckpt. Wymagane do konwertowania wag lora. Jeśli nie podano tej wartości, konwerter zakłada, że nie ma wag LoRA. Uwaga: LoRA jest obsługiwana tylko przez backend GPU. Liczba całkowita
lora_output_tflite_file Nazwa pliku wyjściowego tflite dla wag LoRA. ŚCIEŻKA

Konwerter Torch Generative do modeli PyTorch

Modele generatywne PyTorch można przekonwertować do formatu zgodnego z MediaPipe za pomocą interfejsu AI Edge Torch Generative API. Za pomocą interfejsu API możesz tworzyć, konwertować i kwantować modele LLM PyTorch, aby używać ich z interfejsem LLM Inference API. Konwerter Torch Generative konwertuje tylko na procesor i wymaga maszyny z systemem Linux z co najmniej 64 GB pamięci RAM.

Konwertowanie modelu PyTorch za pomocą interfejsu AI Edge Torch Generative API obejmuje:

  1. Pobieranie punktów kontrolnych modelu PyTorch
  2. Użyj interfejsu AI Edge Torch Generative API, aby utworzyć, przekonwertować i zquantized model do formatu zgodnego z MediaPipe (.tflite).
  3. Utwórz pakiet zadań (.task) z pliku tflite i tokenizera modelu.

Aby utworzyć pakiet zadań, użyj skryptu pakowania, aby utworzyć pakiet zadań. Proces grupowania łączy zmapowany model z dodatkowymi metadanymi (np. Parametry analizatora potrzebne do przeprowadzenia pełnego wnioskowania.

Proces tworzenia pakietu wymaga pakietu MediaPipe PyPI. Skrypt konwersji jest dostępny we wszystkich pakietach MediaPipe po 0.10.14.

Zainstaluj i zaimportuj zależności za pomocą:

$ python3 -m pip install mediapipe

Aby połączyć model z biblioteką genai.bundler:

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)
Parametr Opis Akceptowane wartości
tflite_model Ścieżka do wyeksportowanego modelu TFLite AI Edge. ŚCIEŻKA
tokenizer_model Ścieżka do modelu tokenizera SentencePiece. ŚCIEŻKA
start_token Token rozpoczęcia konkretnego modelu. W dostarczonym modelu tokenizera musi znajdować się znacznik początkowy. CIĄG ZNAKÓW
stop_tokens Tokeny stop dla poszczególnych modeli. Tokeny stop muszą występować w dostarczonym modelu tokenizera. LIST[STRING]
output_filename Nazwa pliku wyjściowego pakietu zadań. ŚCIEŻKA

Dostosowywanie LoRa

Interfejs API Mediapipe do wnioskowania oparte na dużych modelach językowych można skonfigurować tak, aby obsługiwał adaptację niskiego rzędu (LoRA) dla dużych modeli językowych. Dzięki dostosowanym modelom LoRA deweloperzy mogą dostosowywać działanie LLM za pomocą ekonomicznego procesu trenowania.

Obsługa LoRA w LLM Inference API działa we wszystkich wariantach Gemma i modelach Phi-2 w przypadku backendu GPU. Wagi LoRA są stosowane tylko do warstw uwagi. Ta początkowa implementacja jest eksperymentalnym interfejsem API przeznaczonym do przyszłych wersji. W przyszłych aktualizacjach planujemy obsługiwać więcej modeli i różne typy warstw.

Przygotowanie modeli LoRA

Postępuj zgodnie ze wskazówkami na stronie huggingface.org, aby wytrenować dostosowany model LoRA na podstawie własnego zbioru danych za pomocą obsługiwanych typów modeli: Gemma lub Phi-2. Modele Gemma-2 2B, Gemma 2B i Phi-2 są dostępne na stronie huggingface w formacie safetensors. Ponieważ interfejs LLM Inference API obsługuje tylko LoRA na warstwach uwagi, podczas tworzenia modeluLoraConfig należy określić tylko warstwy uwagi:

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

Do testowania dostępne są publicznie dostępne modele LoRA, które pasują do interfejsu LLM Inference API dostępnego na HuggingFace. Na przykład: monsterapi/gemma-2b-lora-maths-orca-200k w przypadku Gemma-2B i lole25/phi-2-sft-ultrachat-lora w przypadku Phi-2.

Po wytrenowaniu modelu na przygotowanym zbiorze danych i zapisaniu go otrzymasz plik adapter_model.safetensors zawierający dostrojone wagi modelu LoRA. Plik safetensors to punkt kontrolny LoRA używany do konwertowania modelu.

W następnym kroku musisz przekonwertować wagi modelu na Flatbuffera TensorFlow Lite za pomocą pakietu MediaPipe w Pythonie. W polu ConversionConfig należy podać opcje modelu podstawowego oraz dodatkowe opcje LoRa. Pamiętaj, że interfejs API obsługuje wnioskowanie LoRA tylko z użyciem procesora graficznego, więc backend musi być ustawiony na '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)

Konwerter wygeneruje 2 pliki flatbuffera TFLite: jeden dla modelu podstawowego, a drugi dla modelu LoRA.

Wnioskowanie modelu LoRA

Interfejsy API LLM Inference na potrzeby sieci Web, Androida i iOS zostały zaktualizowane, aby obsługiwać wnioskowanie modelu LoRA.

Android obsługuje statyczny LoRA podczas inicjowania. Aby załadować model LoRA, użytkownicy muszą podać ścieżkę do tego modelu oraz model LLM podstawowy.

// 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)

Aby uruchomić wnioskowanie LLM z LoRA, użyj tych samych metod generateResponse() lub generateResponseAsync() co w przypadku modelu podstawowego.