Udhëzues LLM Inference për Web

LLM Inference API ju lejon të ekzekutoni modele të mëdha gjuhësore (LLM) plotësisht në pajisje për aplikacione ueb, 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ën e gjuhës natyrore dhe përmbledhja e dokumenteve. Detyra ofron mbështetje të integruar për modele të shumta të gjuhëve të mëdha tekst-me-tekst, kështu që ju mund të aplikoni modelet më të fundit të AI gjeneruese në pajisje në aplikacionet tuaja në ueb. Nëse po përdorni modelet më të fundit Gemma-3n, atëherë mbështeten gjithashtu hyrjet e imazhit dhe audios.

Për të shtuar shpejt API-në e konkluzionit LLM në aplikacionin tuaj në ueb, ndiqni " Fillimin e shpejtë" . Për një shembull bazë të një aplikacioni në ueb që ekzekuton API-në e konkluzionit LLM, shihni shembullin e aplikacionit . Për një kuptim më të thellë se si funksionon API-ja e konkluzionit LLM, referojuni opsioneve të konfigurimit , konvertimit të modelit dhe seksioneve të akordimit LoRA .

Ju 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 .

Fillimi i shpejtë

Përdorni hapat e mëposhtëm për të shtuar API-në e konkluzionit LLM në aplikacionin tuaj në ueb. LLM Inference API kërkon një shfletues uebi me pajtueshmëri me WebGPU. Për një listë të plotë të shfletuesve të përputhshëm, shihni pajtueshmërinë e shfletuesit GPU .

Shto varësi

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

Instaloni paketat e kërkuara për vendosjen lokale:

npm install @mediapipe/tasks-genai

Për t'u vendosur në një server, përdorni një shërbim të rrjetit të ofrimit të përmbajtjes (CDN) si jsDelivr për të shtuar kodin 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 konvertohen posaçërisht për përdorim në internet, kështu që rekomandohet të përdorni gjithmonë një nga këto.

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ë Gemma 3 që nuk përfshihen në dokumentacion, por që janë konvertuar posaçërisht për ueb, si 270M , 4B , 12B , 27B dhe MedGemma-27B-Text .

Ruani modelin në direktorinë e 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 generateResponse() për të shkaktuar konkluzione.

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;
});

Nxitja multimodale

Për modelet Gemma-3n, API-të e Uebit të API-së LLM Inference mbështesin nxitjen multimodale. Me multimodalitetin e aktivizuar, përdoruesit mund të përfshijnë një kombinim të porositur të imazheve, audios dhe tekstit në kërkesat e tyre. LLM më pas ofron një përgjigje tekstuale.

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

Për të aktivizuar mbështetjen e vizionit, 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([
  '<ctrl99>user\nDescribe ',
  {imageSource: '/assets/test_image.png'},
  ' and then transcribe ',
  {audioSource: '/assets/test_audio.wav'},
  '<ctrl100>\n<ctrl99>model\n',
]);

Për vizionin, mbështeten URL-të e imazheve dhe objektet më të zakonshme të imazheve, videove ose kanavacës. Për audion, mbështeten vetëm URL-të e skedarëve audio me një kanal AudioBuffer dhe njëkanalësh. Më shumë detaje mund të gjenden duke shfletuar kodin burimor .

Shembull aplikimi

Aplikacioni mostër është një shembull i një aplikacioni bazë të gjenerimit të tekstit për Ueb, duke përdorur API-në LLM Inference. Mund ta përdorni aplikacionin si pikënisje për aplikacionin tuaj në ueb ose t'i referoheni kur modifikoni një aplikacion ekzistues. Kodi i shembullit është pritur në GitHub .

Klononi depon e 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 ueb:

Emri i opsionit Përshkrimi Gama e vlerave Vlera e paracaktuar
modelPath Rruga për ku modeli është ruajtur në direktorinë e projektit. SHTEG N/A
maxTokens Numri maksimal i argumenteve (tokenet hyrëse + tokenat e daljes) që trajton modeli. Numër i plotë 512
topK Numri i shenjave që modeli merr në konsideratë në çdo hap të gjenerimit. Kufizon parashikimet në k-tokenat më të mundshëm. Numër i plotë 40
temperature Sasia e rastësisë së paraqitur gjatë gjenerimit. Një temperaturë më e lartë rezulton në më shumë kreativitet në tekstin e krijuar, ndërsa një temperaturë më e ulët prodhon gjenerim më të parashikueshëm. noton 0.8
randomSeed Fara e rastësishme e përdorur 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 përputhshme vetëm me modelet GPU. Vargu me numra të plotë N/A

Konvertimi i modelit

LLM Inference API është në përputhje 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.

Modelet Metoda e konvertimit Platformat e përputhshme 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 e AI Edge Torch Android, iOS .detyrë

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

Përshtatje LoRA

API-ja e konkluzionit LLM mbështet akordimin LoRA (Përshtatje me gradë të ulët) duke përdorur bibliotekën PEFT (Parameter-Efficient Fine-Tuning). 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ënat e reja të trajnimit në vend që të ritrajnojë të gjithë modelin.

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

Modeli bazë duhet të jetë në formatin e 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 LoRA Methods nga PEFT për të trajnuar një model LoRA të rregulluar mirë në grupin tuaj të të dhënave.

API-ja e konkluzionit LLM mbështet LoRA vetëm në shtresat e vëmendjes, kështu që 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 mbi grupin e të dhënave të përgatitur dhe ruajtjes së modelit, peshat e modelit LoRA të rregulluara mirë 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ë kthyer 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ë përputhshëm me MediaPipe, një për modelin bazë dhe një tjetër për modelin LoRA.

Konkluzioni 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ë ndërroni 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]
});

Ngarkoni modelet LoRA gjatë kohës së ekzekutimit, pas inicializimit të modelit bazë. Aktivizoni modelin LoRA duke kaluar referencën e modelit kur gjeneroni 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;
});