LLM Inference API מאפשר להריץ מודלים גדולים של שפה (LLM) באופן מלא במכשיר עבור אפליקציות אינטרנט. אפשר להשתמש בו כדי לבצע מגוון רחב של משימות, כמו יצירת טקסט, אחזור מידע בשפה טבעית וסיכום מסמכים. המשימה מספקת תמיכה מובנית במודלים גדולים של שפה (LLM) להמרת טקסט לטקסט, כך שתוכלו להחיל את המודלים העדכניים ביותר של AI גנרטיבי במכשיר על אפליקציות האינטרנט שלכם. אם אתם משתמשים במודלים העדכניים של Gemma-3n, תוכלו גם להזין תמונות ואודיו.
כדי להוסיף במהירות את LLM Inference API לאפליקציית האינטרנט, אפשר לעיין במדריך למתחילים. דוגמה בסיסית לאפליקציית אינטרנט שמריצה את LLM Inference API זמינה באפליקציית הדוגמה. כדי להבין לעומק איך פועל ה-API של LLM Inference, אפשר לעיין בקטעים אפשרויות הגדרה, המרת מודלים וכוונון LoRA.
אפשר לראות את המשימה הזו בפעולה באמצעות הדמו של MediaPipe Studio. מידע נוסף על היכולות, המודלים ואפשרויות ההגדרה של המשימה הזו זמין במאמר סקירה כללית.
מדריך למתחילים
כדי להוסיף את LLM Inference API לאפליקציית האינטרנט: ממשק ה-API של LLM Inference דורש דפדפן אינטרנט עם תאימות ל-WebGPU. רשימה מלאה של דפדפנים תואמים זמינה במאמר תאימות של דפדפנים ל-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 ולאינטרנט. מידע נוסף זמין במסמכי התיעוד של 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([
'<ctrl99>user\nDescribe ',
{imageSource: '/assets/test_image.png'},
' and then transcribe ',
{audioSource: '/assets/test_audio.wav'},
'<ctrl100>\n<ctrl99>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. | מערך של מספרים שלמים | לא רלוונטי |
המרות לפי מודל
ה-API של LLM Inference תואם לסוגי המודלים הבאים, שחלקם דורשים המרת מודל. אפשר להשתמש בטבלה כדי לזהות את השלבים הנדרשים או את השיטה שמתאימה למודל שלכם.
דגמים | שיטת המרה | פלטפורמות תואמות | סוג הקובץ |
---|---|---|---|
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 | ספריית AI Edge Torch Generative | Android, iOS | .task |
בקטע Model Conversion מוסבר איך אפשר להמיר מודלים אחרים.
התאמה אישית של 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
.
כדי ליצור משקלים של LoRA, מודל הבסיס צריך להיות בפורמט safetensors
. אחרי אימון 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
הוא נקודת ביקורת (checkpoint) של 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;
});