LLM Inference API ju lejon të ekzekutoni modele të mëdha gjuhësore (LLM) plotësisht në shfletuesin 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 të internetit.
Detyra mbështet variantet e mëposhtme të Gemma : Gemma-2 2B, Gemma 2B dhe Gemma 7B. Gemma është një familje modelesh të hapura me peshë të lehtë dhe moderne të ndërtuara nga i njëjti kërkim dhe teknologji e përdorur për krijimin e modeleve Gemini . Ai gjithashtu mbështet modelet e jashtme të mëposhtme: Phi-2 , Falcon-RW-1B dhe StableLM-3B .
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 .
Shembull kodi
Shembulli i aplikacionit për LLM Inference API ofron një zbatim bazë të kësaj detyre në JavaScript për referencën tuaj. Ju mund ta përdorni këtë aplikacion mostër për të filluar ndërtimin e aplikacionit tuaj të gjenerimit të tekstit.
Ju mund të përdorni aplikacionin shembull LLM Inference API në GitHub .
Konfigurimi
Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit dhe projekteve të kodit në mënyrë specifike për të përdorur LLM Inference API. Për informacion të përgjithshëm mbi konfigurimin e mjedisit tuaj të zhvillimit për përdorimin e MediaPipe Tasks, duke përfshirë kërkesat e versionit të platformës, shihni udhëzuesin e konfigurimit për Ueb .
Pajtueshmëria e shfletuesit
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 .
Paketat JavaScript
Kodi LLM Inference API është i disponueshëm përmes paketës @mediapipe/tasks-genai
. Ju mund t'i gjeni dhe shkarkoni këto biblioteka nga lidhjet e dhëna në udhëzuesin e konfigurimit të platformës.
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>
Model
MediaPipe LLM Inference API kërkon një model të trajnuar që është në përputhje me këtë detyrë. Për aplikacionet në ueb, modeli duhet të jetë i pajtueshëm me GPU.
Për më shumë informacion mbi modelet e trajnuara të disponueshme për LLM Inference API, shihni seksionin Modelet e përmbledhjes së detyrave.
Shkarkoni një model
Përpara se të inicializoni API-në e konkluzionit LLM, shkarkoni një nga modelet e mbështetura dhe ruajeni skedarin brenda drejtorisë së projektit tuaj:
- Gemma-2 2B : Versioni më i fundit i modeleve të familjes Gemma. Pjesë e një familjeje modelesh të hapura të lehta dhe moderne të ndërtuara nga i njëjti kërkim dhe teknologji e përdorur për krijimin e modeleve Gemini .
- Gemma 2B : Pjesë e një familjeje modelesh të hapura të lehta dhe moderne të ndërtuara nga i njëjti kërkim dhe teknologji e përdorur për krijimin e modeleve Gemini . I përshtatshëm për një sërë detyrash të gjenerimit të tekstit, duke përfshirë përgjigjen e pyetjeve, përmbledhjen dhe arsyetimin.
- Phi-2 : Modeli Transformer me parametra 2.7 miliardë, më i përshtatshmi për formatin Pyetje-Përgjigje, bisedë dhe kod.
- Falcon-RW-1B : Model 1 miliard parametrash shkakësor vetëm për dekoderin e trajnuar në 350B shenja të RefinedWeb .
- StableLM-3B : Modeli gjuhësor me 3 miliardë parametra vetëm për dekoderin e para-trajnuar në 1 trilion shenja të grupeve të të dhënave të ndryshme të anglishtes dhe kodeve.
Përveç modeleve të mbështetura, mund të përdorni AI Edge Torch të Google për të eksportuar modelet PyTorch në modelet LiteRT ( tflite
) me shumë nënshkrime. Për më shumë informacion, shihni konvertuesin gjenerues të pishtarëve për modelet PyTorch .
Ne rekomandojmë përdorimin e Gemma-2 2B, i cili është i disponueshëm në Kaggle Models . Për më shumë informacion mbi modelet e tjera të disponueshme, shihni seksionin Modelet e përmbledhjes së detyrave.
Konvertoni modelin në formatin MediaPipe
LLM Inference API është i pajtueshëm me dy kategori llojesh modelesh, 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 | |
---|---|---|---|---|
Modelet e mbështetura | Gemma 2B, Gemma 7B, Gemma-2 2B, Phi-2, StableLM, Falcon | MediaPipe | Android, iOS, ueb | .bin |
Modele të tjera PyTorch | Të gjitha modelet PyTorch LLM | Biblioteka gjeneruese e AI Edge Torch | Android, iOS | .detyrë |
Ne po presim skedarët .bin
të konvertuar për Gemma 2B, Gemma 7B dhe Gemma-2 2B në Kaggle. Këto modele mund të vendosen drejtpërdrejt duke përdorur API-në tonë të konkluzionit LLM. Për të mësuar se si mund të konvertoni modele të tjera, shihni seksionin "Konvertimi i modelit" .
Shtoni modelin në drejtorinë e projektit
Ruani modelin në direktorinë e projektit tuaj:
<dev-project-root>/assets/gemma-2b-it-gpu-int4.bin
Specifikoni shtegun e modelit me parametrin e objektit baseOptions
modelAssetPath
:
baseOptions: { modelAssetPath: `/assets/gemma-2b-it-gpu-int4.bin`}
Krijo detyrën
Përdorni një nga funksionet LLM Inference API createFrom...()
për të përgatitur detyrën për ekzekutimin e konkluzioneve. Ju mund të përdorni funksionin createFromModelPath()
me një shteg relative ose absolute drejt skedarit të modelit të trajnuar. Shembulli i kodit përdor funksionin createFromOptions()
. Për më shumë informacion mbi opsionet e disponueshme të konfigurimit, shihni Opsionet e konfigurimit .
Kodi i mëposhtëm tregon se si të ndërtohet dhe konfigurohet kjo detyrë:
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-2b-it-gpu-int4.bin'
},
maxTokens: 1000,
topK: 40,
temperature: 0.8,
randomSeed: 101
});
Opsionet e konfigurimit
Kjo detyrë ka opsionet e mëposhtme të konfigurimit për aplikacionet Web dhe JavaScript:
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 |
Përgatitni të dhënat
LLM Inference API pranon të dhëna teksti ( string
). Detyra trajton parapërpunimin e hyrjes së të dhënave, duke përfshirë parapërpunimin e tokenizimit dhe tensorit.
I gjithë parapërpunimi trajtohet brenda funksionit generateResponse()
. Nuk ka nevojë për përpunim shtesë të tekstit hyrës.
const inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday.";
Drejtoni detyrën
API-ja e konkluzionit LLM përdor funksionin generateResponse()
për të shkaktuar konkluzione. Për klasifikimin e tekstit, kjo nënkupton kthimin e kategorive të mundshme për tekstin hyrës.
Kodi i mëposhtëm tregon se si të ekzekutohet përpunimi me modelin e detyrës.
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;
});
Trajtoni dhe shfaqni rezultatet
LLM Inference API kthen një varg, i cili përfshin tekstin e gjeneruar të përgjigjes.
Here's a draft you can use:
Subject: Lunch on Saturday Reminder
Hi Brett,
Just a quick reminder about our lunch plans this Saturday at noon.
Let me know if that still works for you.
Looking forward to it!
Best,
[Your Name]
Personalizimi i modelit LoRA
API-ja e konkluzionit të Mediapipe LLM mund të konfigurohet për të mbështetur Përshtatjen e Rangut të Ulët (LoRA) për modelet e gjuhëve të mëdha. Duke përdorur modele LoRA të rregulluara mirë, zhvilluesit mund të personalizojnë sjelljen e LLM-ve përmes një procesi trajnimi me kosto efektive.
Mbështetja LoRA e API-së LLM Inference funksionon për të gjitha variantet Gemma dhe modelet Phi-2 për prapavijën e GPU-së, me peshat LoRA të zbatueshme vetëm për shtresat e vëmendjes. Ky zbatim fillestar shërben si një API eksperimentale për zhvillimet e ardhshme me plane për të mbështetur më shumë modele dhe lloje të ndryshme shtresash në përditësimet e ardhshme.
Përgatitni modelet LoRA
Ndiqni udhëzimet në HuggingFace për të trajnuar një model LoRA të akorduar mirë në grupin tuaj të të dhënave me llojet e modeleve të mbështetura, Gemma ose Phi-2. Modelet Gemma-2 2B , Gemma 2B dhe Phi-2 janë të dy të disponueshme në HuggingFace në formatin e siguresave. Meqenëse LLM Inference API mbështet LoRA vetëm në shtresat e vëmendjes, specifikoni vetëm shtresat e vëmendjes gjatë krijimit të LoraConfig
si më poshtë:
# 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"],
)
Për testim, ekzistojnë modele LoRA të akorduara mirë të aksesueshme nga publiku që përshtaten me API-në e konkluzionit LLM të disponueshme në HuggingFace. Për shembull, monsterapi/gemma-2b-lora-maths-orca-200k për Gemma-2B dhe lole25/phi-2-sft-ultrachat-lora për Phi-2.
Pas trajnimit për grupin e të dhënave të përgatitur dhe ruajtjes së modelit, ju merrni një skedar adapter_model.safetensors
që përmban peshat e modelit LoRA të rregulluara mirë. Skedari i siguruesve është pika e kontrollit LoRA e përdorur në konvertimin e modelit.
Si hap tjetër, ju duhet të konvertoni peshat e modelit në një TensorFlow Lite Flatbuffer duke përdorur Paketën MediaPipe Python. ConversionConfig
duhet të specifikojë opsionet e modelit bazë, si dhe opsionet shtesë të LoRA. Vini re se meqenëse API mbështet vetëm konkluzionet LoRA me GPU, pjesa e pasme duhet të vendoset në '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)
Konvertuesi do të nxjerrë dy skedarë TFLite flatbuffer, një për modelin bazë dhe tjetri për modelin LoRA.
Konkluzioni i modelit LoRA
Web, Android dhe iOS LLM Inference API janë përditësuar për të mbështetur konkluzionet e modelit LoRA.
Ueb-ja mbështet LoRA dinamike gjatë kohës së ekzekutimit. Kjo do të thotë, përdoruesit deklarojnë se renditjet LoRA do të përdoren gjatë inicializimit dhe mund të shkëmbejnë 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]
});
Gjatë kohës së ekzekutimit, pasi të jetë inicializuar modeli bazë, ngarkoni modelet LoRA që do të përdoren. Gjithashtu, aktivizoni modelin LoRA duke kaluar referencën e modelit LoRA ndërsa 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;
});