LLM Inference API מאפשר להריץ מודלים גדולים של שפה (LLM) באופן מלא במכשיר עבור אפליקציות אינטרנט. אפשר להשתמש בו כדי לבצע מגוון רחב של משימות, כמו יצירת טקסט, אחזור מידע בצורה של שפה טבעית וסיכום מסמכים. המשימה מספקת תמיכה מובנית במודלים גדולים של שפה (LLM) להמרת טקסט לטקסט, כך שתוכלו להחיל את המודלים העדכניים ביותר של AI גנרטיבי במכשיר על אפליקציות האינטרנט שלכם. אם אתם משתמשים במודלים העדכניים של Gemma-3n, תוכלו גם להזין תמונות ואודיו.
כדי להוסיף במהירות את LLM Inference API לאפליקציית האינטרנט, אפשר לעיין במדריך למתחילים. דוגמה בסיסית לאפליקציית אינטרנט שמריצה את LLM Inference API זמינה באפליקציית הדוגמה. כדי להבין יותר לעומק איך פועל ה-API של LLM Inference, אפשר לעיין בקטעים אפשרויות ההגדרה, המרת מודלים וכוונון LoRA.
אפשר לראות את המשימה הזו בפעולה בהדמו של MediaPipe Studio. מידע נוסף על היכולות, המודלים ואפשרויות ההגדרה של המשימה הזו זמין במאמר סקירה כללית.
מדריך למתחילים
כדי להוסיף את LLM Inference API לאפליקציית האינטרנט: נדרש דפדפן אינטרנט עם תאימות ל-WebGPU כדי להשתמש ב-LLM Inference API. רשימה מלאה של דפדפנים תואמים מופיעה במאמר תאימות של דפדפנים ל-GPU.
הוספת יחסי תלות
LLM Inference API משתמש בחבילה @mediapipe/tasks-genai.
מתקינים את החבילות הנדרשות להעברה לבמה מקומית:
npm install @mediapipe/tasks-genai
כדי לבצע פריסה בשרת, משתמשים בשירות של רשת להעברת תוכן (CDN) כמו jsDelivr כדי להוסיף קוד ישירות לדף ה-HTML:
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/genai_bundle.cjs"
crossorigin="anonymous"></script>
</head>
הורדת מודל
מורידים את Gemma-3n E4B או E2B מ-HuggingFace. מודלים עם -Web בשם מומרים במיוחד לשימוש באינטרנט, ולכן מומלץ מאוד להשתמש תמיד באחד מהם.
מידע נוסף על המודלים הזמינים מופיע במסמכי התיעוד בנושא מודלים. אפשר גם לעיין בדף הקהילה שלנו ב-HuggingFace, שבו מוצעות כמה וריאציות נוספות של Gemma 3 שלא מופיעות במסמכי התיעוד, אבל הומרו במיוחד לשימוש באינטרנט, כמו 270M, 4B, 12B, 27B ו-MedGemma-27B-Text.
שומרים את המודל בספריית הפרויקט:
<dev-project-root>/assets/gemma-3n-E4B-it-int4-Web.litertlm
מציינים את הנתיב של המודל באמצעות הפרמטר baseOptions object modelAssetPath:
baseOptions: { modelAssetPath: `/assets/gemma-3n-E4B-it-int4-Web.litertlm`}
הפעלת המשימה
מאחלים את המשימה באמצעות אפשרויות בסיסיות להגדרת התצורה:
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
});
הרצת המשימה
משתמשים בפונקציה generateResponse() כדי להפעיל הסקת מסקנות.
const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;
כדי להזרים את התשובה, משתמשים בפעולות הבאות:
llmInference.generateResponse(
inputPrompt,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});
הנחיות מרובות מצבים
במודלים של Gemma-3n, ממשקי ה-API באינטרנט של LLM Inference API תומכים בהנחיות מולטימודאליות. כשהתכונה 'ריבוי אופנים' מופעלת, המשתמשים יכולים לכלול בהנחיות שלהם שילוב מסודר של תמונות, אודיו וטקסט. אחרי כן, מודל ה-LLM מספק תשובה טקסטואלית.
כדי להתחיל, משתמשים ב-Gemma-3n E4B או ב-Gemma-3n E2B בפורמט שתואם ל-MediaPipe ול-Web. מידע נוסף זמין במסמכי התיעוד של Gemma-3n.
כדי להפעיל תמיכה בראייה, מוודאים שהערך של maxNumImages הוא חיובי. ההגדרה הזו קובעת את המספר המקסימלי של חלקי תמונה שמודל ה-LLM יכול לעבד בהנחיה אחת.
כדי להפעיל את התמיכה באודיו, מוודאים שההגדרה supportAudio מוגדרת ל-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,
});
עכשיו אפשר ליצור תגובות כמו קודם, אבל באמצעות מערך מסודר של מחרוזות, תמונות ונתוני אודיו:
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',
]);
לגבי ראייה, יש תמיכה בכתובות URL של תמונות וברוב האובייקטים הנפוצים של תמונות, סרטונים או קנבסים. באודיו, יש תמיכה רק ב-AudioBuffer חד-ערוצי ובכתובות URL של קובצי אודיו חד-ערוציים. פרטים נוספים זמינים בקוד המקור.
אפליקציה לדוגמה
אפליקציית הדוגמה היא דוגמה לאפליקציה בסיסית ליצירת טקסט לאינטרנט, שמשתמשת ב-LLM Inference API. אתם יכולים להשתמש באפליקציה כנקודת התחלה לאפליקציית אינטרנט משלכם, או להיעזר בה כשאתם משנים אפליקציה קיימת. קוד הדוגמה מתארח ב-GitHub.
משכפלים את מאגר ה-Git באמצעות הפקודה הבאה:
git clone https://github.com/google-ai-edge/mediapipe-samples
מידע נוסף זמין במדריך ההגדרה ל-Web.
אפשרויות הגדרה
כדי להגדיר אפליקציית אינטרנט, משתמשים באפשרויות ההגדרה הבאות:
| שם האפשרות | תיאור | טווח ערכים | ערך ברירת מחדל |
|---|---|---|---|
modelPath |
הנתיב למיקום שבו המודל מאוחסן בספריית הפרויקט. | נתיב | לא רלוונטי |
maxTokens |
המספר המקסימלי של טוקנים (טוקנים של קלט + טוקנים של פלט) שהמודל יכול לטפל בהם. | מספר שלם | 512 |
topK |
מספר הטוקנים שהמודל לוקח בחשבון בכל שלב של יצירת התוכן. מגביל את התחזיות ל-k האסימונים בעלי ההסתברות הגבוהה ביותר. | מספר שלם | 40 |
temperature |
רמת הרנדומיזציה שמוצגת במהלך היצירה. טמפרטורה גבוהה יותר מובילה ליצירתיות רבה יותר בטקסט שנוצר, ואילו טמפרטורה נמוכה יותר מובילה ליצירה צפויה יותר. | Float | 0.8 |
randomSeed |
הערך האקראי הראשוני שמשמש במהלך יצירת הטקסט. | מספר שלם | 0 |
loraRanks |
דירוגים של LoRA לשימוש במודלים של LoRA במהלך זמן הריצה. הערה: האפשרות הזו תואמת רק למודלים של GPU. | מערך של מספרים שלמים | לא רלוונטי |
המרת מודל
LLM Inference API תואם לסוגי המודלים הבאים, שחלקם דורשים המרת מודל. משתמשים בטבלה כדי לזהות את השלבים הנדרשים או את השיטה שמתאימים למודל שלכם.
| מודלים | שיטת המרה | פלטפורמות תואמות | סוג הקובץ |
|---|---|---|---|
| Gemma-3 1B | לא נדרשת המרה | Android, אינטרנט | .task |
| Gemma 2B, Gemma 7B, Gemma-2 2B | לא נדרשת המרה | Android, iOS, אינטרנט | .bin |
| Phi-2, StableLM, Falcon | סקריפט המרה של MediaPipe | Android, iOS, אינטרנט | .bin |
| כל מודלי ה-LLM של PyTorch | ספריית LiteRT Torch Generative | Android, iOS | .task |
בקטע המרת מודלים מוסבר איך להמיר מודלים אחרים.
התאמה אישית של LoRA
LLM Inference API תומך בשיפור דיוק של מודלים באמצעות LoRA (Low-Rank Adaptation) באמצעות ספריית PEFT (Parameter-Efficient Fine-Tuning). התאמה באמצעות LoRA מאפשרת להתאים אישית את ההתנהגות של מודלים מסוג LLM בתהליך אימון חסכוני. התהליך הזה יוצר קבוצה קטנה של משקלים שאפשר לאמן על סמך נתוני אימון חדשים, במקום לאמן מחדש את כל המודל.
LLM Inference API תומך בהוספת משקלים של LoRA לשכבות של מנגנון תשומת הלב במודלים Gemma-2 2B, Gemma 2B ו-Phi-2. מורידים את המודל בפורמט safetensors.
מודל הבסיס צריך להיות בפורמט safetensors כדי ליצור משקלים של LoRA. אחרי אימון LoRA, אפשר להמיר את המודלים לפורמט FlatBuffers כדי להריץ אותם ב-MediaPipe.
הכנת משקלים של LoRA
אפשר להשתמש במדריך LoRA Methods מ-PEFT כדי לאמן מודל LoRA מכוונן על מערך נתונים משלכם.
ה-API של LLM Inference תומך רק ב-LoRA בשכבות תשומת הלב, לכן צריך לציין רק את שכבות תשומת הלב ב-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"],
)
אחרי האימון על מערך הנתונים המוכן ושמירת המודל, המשקלים של מודל LoRA שעבר כוונון עדין זמינים ב-adapter_model.safetensors. safetensors
הקובץ הוא נקודת ביקורת של LoRA שמשמשת במהלך המרת המודל.
המרת מודל
משתמשים בחבילת MediaPipe Python כדי להמיר את משקלי המודל לפורמט Flatbuffer. התג ConversionConfig מציין את האפשרויות של מודל הבסיס יחד עם האפשרויות הנוספות של 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)
הכלי להמרה ייצור שני קבצים שתואמים ל-MediaPipe, אחד למודל הבסיסי ואחד למודל LoRA.
הסקת מסקנות במודל LoRA
ב-Web יש תמיכה ב-LoRA דינמי במהלך זמן הריצה, כלומר המשתמשים מצהירים על דרגות ה-LoRA במהלך האתחול. המשמעות היא שאפשר להחליף מודלים שונים של LoRA במהלך זמן הריצה.
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]
});
טוענים את מודלי LoRA במהלך זמן הריצה, אחרי אתחול המודל הבסיסי. מפעילים את מודל LoRA על ידי העברת ההפניה למודל כשמייצרים את התשובה של מודל השפה הגדול.
// 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;
});