تتيح لك LLM Inference API تشغيل النماذج اللغوية الكبيرة (LLM) بالكامل على الجهاز لتطبيقات الويب، ويمكنك استخدامها لتنفيذ مجموعة كبيرة من المهام، مثل إنشاء النصوص واسترداد المعلومات بلغة طبيعية وتلخيص المستندات. توفّر المهمة دعمًا مدمجًا للعديد من النماذج اللغوية الكبيرة التي تحوّل النص إلى نص، ما يتيح لك تطبيق أحدث نماذج الذكاء الاصطناعي التوليدي على الجهاز على تطبيقات الويب. إذا كنت تستخدم أحدث طُرز Gemma-3n، يمكنك أيضًا إدخال الصور والصوت.
لإضافة LLM Inference API بسرعة إلى تطبيق الويب، اتّبِع الخطوات الواردة في دليل التشغيل السريع. للاطّلاع على مثال أساسي لتطبيق ويب يشغّل واجهة برمجة التطبيقات LLM Inference API، راجِع التطبيق النموذجي. للحصول على فهم أكثر تفصيلاً لطريقة عمل LLM Inference API، يُرجى الرجوع إلى أقسام خيارات الإعداد وتحويل النموذج وضبط LoRA.
يمكنك الاطّلاع على هذه المهمة أثناء العمل من خلال العرض التوضيحي في MediaPipe Studio. لمزيد من المعلومات حول إمكانات هذه المهمة ونماذجها وخيارات الإعداد، يُرجى الاطّلاع على نظرة عامة.
البدء السريع
اتّبِع الخطوات التالية لإضافة واجهة LLM Inference API إلى تطبيق الويب. تتطلّب واجهة برمجة التطبيقات LLM Inference API متصفّح ويب متوافقًا مع WebGPU. للحصول على قائمة كاملة بالمتصفحات المتوافقة، يُرجى الاطّلاع على توافق المتصفحات مع وحدة معالجة الرسومات.
إضافة عناصر تابعة
تستخدم واجهة برمجة التطبيقات 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
الخاصة بالكائن 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، تتيح واجهات برمجة التطبيقات على الويب الخاصة بخدمة LLM Inference API استخدام الطلبات المتعددة الوسائط. عند تفعيل ميزة "الوسائط المتعددة"، يمكن للمستخدمين تضمين مجموعة منظَّمة من الصور والصوت والنص في طلباتهم. بعد ذلك، يقدّم النموذج اللغوي الكبير ردًا نصيًا.
للبدء، استخدِم Gemma-3n E4B أو Gemma-3n E2B بتنسيق متوافق مع MediaPipe والويب. لمزيد من المعلومات، راجِع مستندات Gemma-3n.
لتفعيل ميزة دعم الرؤية، تأكَّد من ضبط maxNumImages
على قيمة موجبة. يحدّد هذا
الحد الأقصى لعدد أجزاء الصور التي يمكن للنموذج اللغوي الكبير معالجتها في طلب واحد.
لتفعيل دعم الصوت، تأكَّد من ضبط 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 الخاصة بالصور ومعظم عناصر الصور أو الفيديوهات أو اللوحات الشائعة. بالنسبة إلى الصوت، لا يتم اعتماد سوى عناوين URL لملفات AudioBuffer أحادية القناة وملفات الصوت أحادية القناة. يمكنك الاطّلاع على مزيد من التفاصيل من خلال تصفُّح رمز المصدر.
تطبيق نموذجي
التطبيق النموذجي هو مثال على تطبيق أساسي لإنشاء النصوص على الويب، باستخدام LLM Inference API. يمكنك استخدام التطبيق كنقطة بداية لإنشاء تطبيق ويب خاص بك، أو الرجوع إليه عند تعديل تطبيق حالي. تتم استضافة نموذج الرمز البرمجي على GitHub.
استنسِخ مستودع git باستخدام الأمر التالي:
git clone https://github.com/google-ai-edge/mediapipe-samples
لمزيد من المعلومات، يُرجى الاطّلاع على دليل الإعداد على الويب.
خيارات الإعداد
استخدِم خيارات الإعداد التالية لإعداد تطبيق ويب:
اسم الخيار | الوصف | نطاق القيم | القيمة التلقائية |
---|---|---|---|
modelPath |
مسار مكان تخزين النموذج داخل دليل المشروع | المسار | لا ينطبق |
maxTokens |
الحد الأقصى لعدد الرموز المميزة (رموز الإدخال + رموز الإخراج) التي يمكن للنموذج التعامل معها | عدد صحيح | 512 |
topK |
عدد الرموز المميزة التي يأخذها النموذج في الاعتبار في كل خطوة من خطوات الإنشاء يقتصر التوقّع على أهم k رموز مميّزة محتملة. | عدد صحيح | 40 |
temperature |
مقدار العشوائية التي يتم إدخالها أثناء الإنشاء يؤدي ارتفاع معدّل ابتكار الردود إلى زيادة الإبداع في النص الذي يتم إنشاؤه، بينما يؤدي انخفاضه إلى إنتاج ردود أكثر قابلية للتوقّع. | عدد عائم | 0.8 |
randomSeed |
تمثّل هذه السمة قيمة البداية العشوائية المستخدَمة أثناء إنشاء النص. | عدد صحيح | 0 |
loraRanks |
ترتيبات LoRA التي ستستخدمها نماذج LoRA أثناء وقت التشغيل ملاحظة: لا يتوافق هذا الخيار إلا مع طُرز وحدة معالجة الرسومات. | مصفوفة أعداد صحيحة | لا ينطبق |
الإحالة الناجحة المستندة إلى نموذج
تتوافق واجهة LLM Inference API مع الأنواع التالية من النماذج، ويتطلّب بعضها تحويل النماذج. استخدِم الجدول لتحديد طريقة الخطوات المطلوبة لنموذجك.
النماذج | طريقة الإحالة الناجحة | الأنظمة الأساسية المتوافقة | نوع الملف |
---|---|---|---|
Gemma-3 1B | لا يلزم إجراء أي تحويل | Android وWeb | .task |
Gemma 2B وGemma 7B وGemma-2 2B | لا يلزم إجراء أي تحويل | Android وiOS والويب | .bin |
Phi-2 وStableLM وFalcon | نص الإحالة الناجحة في MediaPipe | Android وiOS والويب | .bin |
جميع نماذج LLM في PyTorch | مكتبة الذكاء الاصطناعي التوليدي في AI Edge Torch | Android وiOS | .task |
لمعرفة كيفية تحويل نماذج أخرى، راجِع قسم تحويل النماذج.
تخصيص LoRA
تتيح واجهة LLM Inference API ضبط LoRA (Low-Rank Adaptation) باستخدام مكتبة PEFT (الضبط الدقيق الفعّال للمعلَمات). تخصّص عملية الضبط الدقيق باستخدام LoRA سلوك النماذج اللغوية الكبيرة من خلال عملية تدريب فعّالة من حيث التكلفة، ما يؤدي إلى إنشاء مجموعة صغيرة من الأوزان القابلة للتدريب استنادًا إلى بيانات تدريب جديدة بدلاً من إعادة تدريب النموذج بأكمله.
تتيح واجهة LLM Inference API إضافة أوزان LoRA إلى طبقات الانتباه في نماذج
Gemma-2 2B وGemma
2B وPhi-2. نزِّل النموذج بتنسيق safetensors
.
يجب أن يكون النموذج الأساسي بالتنسيق safetensors
لإنشاء أوزان LoRA. بعد تدريب LoRA، يمكنك تحويل النماذج إلى تنسيق FlatBuffers لتشغيلها على MediaPipe.
إعداد أوزان LoRA
استخدِم دليل طُرق LoRA من PEFT لتدريب نموذج LoRA تم تحسينه على مجموعة البيانات الخاصة بك.
لا تتيح واجهة برمجة التطبيقات LLM Inference API استخدام 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
يتيح الويب استخدام 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;
});