Udhëzues LLM Inference për Web

API-ja LLM Inference ju lejon të ekzekutoni modele të mëdha gjuhësore (LLM) plotësisht në pajisje për aplikacionet Web, të cilat mund t'i përdorni për të kryer një gamë të gjerë detyrash, të tilla si gjenerimi i tekstit, marrja e informacionit në formë gjuhe natyrore dhe përmbledhja e dokumenteve. Detyra ofron mbështetje të integruar për shumë modele të mëdha gjuhësore tekst-në-tekst, kështu që mund të aplikoni modelet më të fundit të IA-së gjeneruese në pajisje në aplikacionet tuaja Web. Nëse po përdorni modelet më të fundit Gemma-3n, atëherë mbështeten edhe inputet e imazhit dhe audios.

Për të shtuar shpejt API-në LLM Inference në aplikacionin tuaj Web, ndiqni Udhëzimin e Fillimit të Shpejtë . Për një shembull bazë të një aplikacioni Web që ekzekuton API-në LLM Inference, shihni aplikacionin shembull . Për një kuptim më të thellë se si funksionon API-ja LLM Inference, referojuni seksioneve të opsioneve të konfigurimit , konvertimit të modelit dhe akordimit LoRA .

Mund ta shihni këtë detyrë në veprim me demonstrimin e MediaPipe Studio . Për më shumë informacion rreth aftësive, modeleve dhe opsioneve të konfigurimit të kësaj detyre, shihni Përmbledhjen .

Nisje e shpejtë

Përdorni hapat e mëposhtëm për të shtuar API-në LLM Inference në aplikacionin tuaj Web. API-ja LLM Inference kërkon një shfletues web me përputhshmëri WebGPU. Për një listë të plotë të shfletuesve të përputhshëm, shihni Përputhshmëria e shfletuesit GPU .

Shto varësi

API-ja e Inference LLM përdor paketën @mediapipe/tasks-genai .

Instaloni paketat e nevojshme për instalimin lokal:

npm install @mediapipe/tasks-genai

Për t'u vendosur në një server, përdorni një shërbim të rrjetit të shpërndarjes së përmbajtjes (CDN) si jsDelivr për të shtuar kod direkt në faqen tuaj HTML:

<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/genai_bundle.cjs"
    crossorigin="anonymous"></script>
</head>

Shkarkoni një model

Shkarkoni Gemma-3n E4B ose E2B nga HuggingFace. Modelet me "-Web" në emër janë konvertuar posaçërisht për përdorim në internet, kështu që rekomandohet fuqimisht të përdorni gjithmonë një prej tyre.

Për më shumë informacion mbi modelet e disponueshme, shihni dokumentacionin e Modeleve ose shfletoni faqen tonë të Komunitetit HuggingFace , e cila ofron disa variante shtesë të Gemma 3 që nuk përfshihen në dokumentacion, por që janë konvertuar posaçërisht për uebin, si 270M , 4B , 12B , 27B dhe MedGemma-27B-Text .

Ruajeni modelin brenda direktorisë së projektit tuaj:

<dev-project-root>/assets/gemma-3n-E4B-it-int4-Web.litertlm

Specifikoni shtegun e modelit me parametrin e objektit baseOptions modelAssetPath :

baseOptions: { modelAssetPath: `/assets/gemma-3n-E4B-it-int4-Web.litertlm`}

Inicializoni Detyrën

Inicializoni detyrën me opsionet bazë të konfigurimit:

const genai = await FilesetResolver.forGenAiTasks(
    // path/to/wasm/root
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm"
);
llmInference = await LlmInference.createFromOptions(genai, {
    baseOptions: {
        modelAssetPath: '/assets/gemma-3n-E4B-it-int4-Web.litertlm'
    },
    maxTokens: 1000,
    topK: 40,
    temperature: 0.8,
    randomSeed: 101
});

Ekzekutoni Detyrën

Përdorni funksionin generateResponse() për të shkaktuar përfundime.

const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;

Për të transmetuar përgjigjen, përdorni sa vijon:

llmInference.generateResponse(
  inputPrompt,
  (partialResult, done) => {
        document.getElementById('output').textContent += partialResult;
});

Nxitje multimodale

Për modelet Gemma-3n, API-të Web të LLM Inference API mbështesin nxitjen multimodale. Me aktivizimin e multimodalitetit, përdoruesit mund të përfshijnë një kombinim të renditur të imazheve, audios dhe tekstit në nxitjet e tyre. LLM më pas ofron një përgjigje me tekst.

Për të filluar, përdorni ose Gemma-3n E4B ose Gemma-3n E2B , në formatin e pajtueshëm me MediaPipe dhe Web. Për më shumë informacion, shihni dokumentacionin e Gemma-3n .

Për të aktivizuar mbështetjen e shikimit, sigurohuni që maxNumImages të jetë vendosur në një vlerë pozitive. Kjo përcakton numrin maksimal të pjesëve të imazhit që LLM mund të përpunojë në një kërkesë të vetme.

Për të aktivizuar mbështetjen audio, sigurohuni që supportAudio të jetë vendosur në true .

llmInference = await LlmInference.createFromOptions(genai, {
    baseOptions: {
        modelAssetPath: '/assets/gemma-3n-E4B-it-int4-Web.litertlm'
    },
    maxTokens: 1000,
    topK: 40,
    temperature: 0.8,
    randomSeed: 101,
    maxNumImages: 5,
    supportAudio: true,
});

Përgjigjet tani mund të gjenerohen si më parë, por duke përdorur një grup të renditur vargjesh, imazhesh dhe të dhënash audio:

const response = await llmInference.generateResponse([
  '<start_of_turn>user\n',
  'Describe ',
  {imageSource: '/assets/test_image.png'},
  ' and then transcribe ',
  {audioSource: '/assets/test_audio.wav'},
  '<end_of_turn>\n<start_of_turn>model\n',
]);

Për vizionin, mbështeten URL-të e imazheve dhe shumica e objekteve të zakonshme të imazheve, videove ose kanavacave. Për audion, mbështeten vetëm URL-të e skedarëve audio me një kanal dhe ato me një kanal. Më shumë detaje mund të gjenden duke shfletuar kodin burimor .

Aplikim shembull

Aplikacioni shembull është një shembull i një aplikacioni bazë për gjenerimin e tekstit për uebin, duke përdorur API-në LLM Inference. Mund ta përdorni aplikacionin si pikënisje për aplikacionin tuaj të uebit ose t'i referoheni atij kur modifikoni një aplikacion ekzistues. Kodi shembullor është i vendosur në GitHub .

Klononi repozitorin git duke përdorur komandën e mëposhtme:

git clone https://github.com/google-ai-edge/mediapipe-samples

Për më shumë informacion, shihni Udhëzuesin e Konfigurimit për Ueb .

Opsionet e konfigurimit

Përdorni opsionet e mëposhtme të konfigurimit për të konfiguruar një aplikacion web:

Emri i opsionit Përshkrimi Diapazoni i Vlerave Vlera e parazgjedhur
modelPath Shtegu për në vendin ku ruhet modeli brenda direktorisë së projektit. SHTEG N/A
maxTokens Numri maksimal i tokenëve (tokenët hyrës + tokenët dalës) që trajton modeli. Numër i plotë 512
topK Numri i tokenëve që modeli merr në konsideratë në çdo hap të gjenerimit. Kufizon parashikimet në k tokenët më të mundshëm. Numër i plotë 40
temperature Sasia e rastësisë së futur gjatë gjenerimit. Një temperaturë më e lartë rezulton në më shumë kreativitet në tekstin e gjeneruar, ndërsa një temperaturë më e ulët prodhon gjenerim më të parashikueshëm. Noton 0.8
randomSeed Farërat e rastësishme të përdorura gjatë gjenerimit të tekstit. Numër i plotë 0
loraRanks LoRA renditet për t'u përdorur nga modelet LoRA gjatë kohës së ekzekutimit. Shënim: kjo është e pajtueshme vetëm me modelet GPU. Matricë numrash të plotë N/A

Konvertimi i modelit

API-ja LLM Inference është e pajtueshme me llojet e mëposhtme të modeleve, disa prej të cilave kërkojnë konvertim modeli. Përdorni tabelën për të identifikuar metodën e hapave të kërkuar për modelin tuaj.

Modele Metoda e konvertimit Platformat e pajtueshme Lloji i skedarit
Gemma-3 1B Nuk kërkohet konvertim Android, ueb .detyrë
Gemma 2B, Gemma 7B, Gemma-2 2B Nuk kërkohet konvertim Android, iOS, ueb .bin
Phi-2, StableLM, Falcon Skripti i konvertimit të MediaPipe Android, iOS, ueb .bin
Të gjitha modelet PyTorch LLM Biblioteka gjeneruese LiteRT Torch Android, iOS .detyrë

Për të mësuar se si mund të konvertoni modele të tjera, shihni seksionin Konvertimi i Modelit .

Përshtatje e LoRA-s

API-ja e Inferencës LLM mbështet akordimin LoRA (Përshtatje me Rang të Ulët) duke përdorur bibliotekën PEFT (Akordim i Fine-Efiktiv i Parametrave). Akordimi LoRA personalizon sjelljen e LLM-ve përmes një procesi trajnimi me kosto efektive, duke krijuar një grup të vogël peshash të trajnueshme bazuar në të dhëna të reja trajnimi në vend që të ritrajnojë të gjithë modelin.

API-ja LLM Inference mbështet shtimin e peshave LoRA në shtresat e vëmendjes së modeleve Gemma-2 2B , Gemma 2B dhe Phi-2 . Shkarkoni modelin në formatin safetensors .

Modeli bazë duhet të jetë në formatin safetensors për të krijuar pesha LoRA. Pas trajnimit LoRA, mund t'i konvertoni modelet në formatin FlatBuffers për t'u ekzekutuar në MediaPipe.

Përgatitni peshat LoRA

Përdorni udhëzuesin e Metodave LoRA nga PEFT për të trajnuar një model LoRA të përshtatur imët në të dhënat tuaja.

API-ja LLM Inference mbështet LoRA vetëm në shtresat e vëmendjes, prandaj specifikoni vetëm shtresat e vëmendjes në LoraConfig :

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

Pas trajnimit në të dhënat e përgatitura dhe ruajtjes së modelit, peshat e modelit LoRA të rregulluara me imtësi janë të disponueshme në adapter_model.safetensors . Skedari safetensors është pika e kontrollit LoRA e përdorur gjatë konvertimit të modelit.

Konvertimi i modelit

Përdorni paketën MediaPipe Python për të konvertuar peshat e modelit në formatin Flatbuffer. ConversionConfig specifikon opsionet e modelit bazë së bashku me opsionet shtesë LoRA.

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_FILE,
)

converter.convert_checkpoint(config)

Konvertuesi do të prodhojë dy skedarë të pajtueshëm me MediaPipe, një për modelin bazë dhe një tjetër për modelin LoRA.

Përfundimi i modelit LoRA

Uebi mbështet LoRA dinamike gjatë kohës së ekzekutimit, që do të thotë se përdoruesit deklarojnë renditjet e LoRA gjatë inicializimit. Kjo do të thotë që ju mund të shkëmbeni modele të ndryshme LoRA gjatë kohës së ekzekutimit.

const genai = await FilesetResolver.forGenAiTasks(
    // path/to/wasm/root
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm"
);
const llmInference = await LlmInference.createFromOptions(genai, {
    // options for the base model
    ...
    // LoRA ranks to be used by the LoRA models during runtime
    loraRanks: [4, 8, 16]
});

Ngarko modelet LoRA gjatë kohës së ekzekutimit, pas inicializimit të modelit bazë. Aktivizo modelin LoRA duke kaluar referencën e modelit kur gjeneron përgjigjen LLM.

// Load several LoRA models. The returned LoRA model reference is used to specify
// which LoRA model to be used for inference.
loraModelRank4 = await llmInference.loadLoraModel(loraModelRank4Url);
loraModelRank8 = await llmInference.loadLoraModel(loraModelRank8Url);

// Specify LoRA model to be used during inference
llmInference.generateResponse(
  inputPrompt,
  loraModelRank4,
  (partialResult, done) => {
        document.getElementById('output').textContent += partialResult;
});