تتيح لك واجهة LLM Inference API تشغيل نماذج لغوية كبيرة بشكل كامل على لتطبيقات الويب، والذي يمكنك استخدامه لأداء مجموعة واسعة من مثل إنشاء النصوص واسترجاع المعلومات بصيغة لغة طبيعية وتلخيص الوثائق. توفر المهمة دعمًا مدمجًا لعدة تحويل النص إلى نص نماذج لغوية كبيرة، كي تتمكّن من تطبيق أحدث نسخة من تلك النماذج على الجهاز فقط نماذج الذكاء الاصطناعي التوليدي على تطبيقات الويب الخاصة بك.
يمكنك الاطّلاع على هذه المهمة أثناء تنفيذها في MediaPipe Studio تجريبي. مزيد من المعلومات حول الإمكانات والنماذج وخيارات الضبط هذه المهمة، راجع نظرة عامة.
مثال على الرمز البرمجي
يوفّر التطبيق النموذجي لواجهة برمجة تطبيقات الاستنتاج اللغوي الكبير (LLM) طريقة تنفيذ أساسية هذه المهمة في JavaScript كمرجع لك. يمكنك استخدام نموذج التطبيق هذا وبدأت في إنشاء تطبيقك الخاص لإنشاء النصوص.
يمكنك الوصول إلى مثال على تطبيق LLM Inference API على GitHub.
ضبط إعدادات الجهاز
يصف هذا القسم الخطوات الرئيسية لإعداد بيئة التطوير بشكل خاص لاستخدام واجهة برمجة التطبيقات LLM Inference API. للحصول على معلومات عامة عن إعداد بيئة التطوير لاستخدام مهام MediaPipe، بما في ذلك متطلبات إصدار النظام الأساسي، راجع دليل إعداد الويب:
توافُق المتصفح
تتطلّب واجهة برمجة التطبيقات للاستنتاج اللغوي الكبير (LLM) متصفّح ويب يتوافق مع WebGPU. للحصول على المتصفحات المتوافقة، راجع متصفح وحدة معالجة الرسومات .
حزم JavaScript
يتوفّر رمز واجهة برمجة التطبيقات للاستنتاج LLM من خلال
@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>
الطراز
تتطلب واجهة برمجة التطبيقات MediaPipe LLM Inference API نموذجًا مدرَّبًا متوافقًا مع هذه. المهمة. بالنسبة إلى تطبيقات الويب، يجب أن يكون النموذج متوافقًا مع وحدة معالجة الرسومات.
لمزيد من المعلومات حول النماذج المُدرَّبة المتاحة لواجهة LLM Inference API، يُرجى الاطّلاع على المهمة. نظرة عامة على قسم "النماذج".
تنزيل نموذج
قبل إعداد واجهة برمجة تطبيقات استنتاج النموذج اللغوي الكبير (LLM)، يجب تنزيل أحد النماذج المتوافقة تخزين الملف داخل دليل المشروع الخاص بك:
- Gemma: جزء من مجموعة من النماذج الخفيفة والعصرية المفتوحة التي تم إنشاؤها من نفس البحث والتكنولوجيا المستخدمة لإنشاء نماذج Gemini مناسب تمامًا لمجموعة متنوعة من مهام إنشاء النص، بما في ذلك الإجابة على الأسئلة والتلخيص التحليل. يمكنك تنزيل خيار طراز Gemma 2B أو Gemma 7B.
- Phi-2: 2.7 مليار معلَمة نموذج محوّل، يناسب الأسئلة والأجوبة والمحادثات والرموز البرمجية .
- Falcon-RW-1B: مليار نموذج يعتمد على أداة فك الترميز السببي لمعاملات متعددة وتم تدريبه على 350 مليار رمز مميز RefinedWeb:
- StableLM-3B: 3 تم تدريب نموذج لغوي يستند إلى مليار معلَمة فقط على تريليون رموز مميزة لمجموعات بيانات متنوعة باللغة الإنجليزية والرموز.
نقترح استخدام Gemma 2B أو Gemma 7B، المتاحين على Kaggle تتوفر نماذج بتنسيق متوافق مع واجهة LLM Inference API. في حال استخدام نموذج لغوي كبير آخر، عليك تحويل النموذج إلى نموذج لغوي كبير. تنسيق متوافق مع MediaPipe. لمزيد من المعلومات حول Gemma، يمكنك الاطّلاع على موقع Gemma الإلكتروني لمزيد من المعلومات حول النماذج الأخرى المتاحة، راجع قسم نظرة عامة على المهمة في قسم النماذج.
تحويل النموذج إلى تنسيق MediaPipe
إحالة ناجحة من نموذج مدمج مع المحتوى
عند استخدام نموذج لغوي كبير (LLM) خارجي (Phi-2 أو Falcon أو StableLM) أو نموذج غير Kaggle من Gemma، استخدم النصوص البرمجية للتحويل لتنسيق النموذج متوافق مع MediaPipe
تتطلب عملية تحويل النموذج توفُّر حزمة MediaPipe PyPI. الإحالة الناجحة
يتوفر النص البرمجي في كل حزم MediaPipe بعد 0.10.11
.
ثبِّت التبعيات واستورِدها مع ما يلي:
$ python3 -m pip install mediapipe
استخدِم مكتبة genai.converter
لتحويل النموذج:
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
input_ckpt=INPUT_CKPT,
ckpt_format=CKPT_FORMAT,
model_type=MODEL_TYPE,
backend=BACKEND,
output_dir=OUTPUT_DIR,
combine_file_only=False,
vocab_model_file=VOCAB_MODEL_FILE,
output_tflite_file=OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
لتحويل نموذج LoRA، يجب أن تحدّد ConversionConfig
النموذج الأساسي.
بالإضافة إلى خيارات LoRA إضافية. لاحظ أنه نظرًا لأن واجهة برمجة التطبيقات
يدعم استنتاج LoRA باستخدام وحدة معالجة الرسومات، يجب ضبط الواجهة الخلفية على '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)
ستُخرج أداة التحويل ملفَّي TFLite للتخزين المؤقت، أحدهما للنموذج الأساسي والآخر لنموذج LoRA.
المعلمة | الوصف | القيم المقبولة |
---|---|---|
input_ckpt |
المسار إلى ملف model.safetensors أو pytorch.bin . يُرجى العِلم أنّه في بعض الأحيان يتم تقسيم تنسيق أدوات أمان النموذج إلى عدة ملفات، على سبيل المثال: model-00001-of-00003.safetensors ، model-00001-of-00003.safetensors يمكنك تحديد نمط للملف، مثل model*.safetensors . |
المسار |
ckpt_format |
تمثّل هذه السمة تنسيق ملف النموذج. | {"safetensors", "pytorch"} |
model_type |
جارٍ تحويل النموذج اللغوي الكبير. | {"PHI_2", "FALCON_RW_1B", "STABLELM_4E1T_3B", "GEMMA_2B"} |
backend |
المعالج (المُفوَّض) المستخدَم لتشغيل النموذج. | {"cpu", "gpu"} |
output_dir |
المسار إلى دليل الإخراج الذي يستضيف ملفات الوزن لكل طبقة. | المسار |
output_tflite_file |
المسار إلى ملف الإخراج. على سبيل المثال، "model_cpu.bin" أو "model_gpu.bin". هذا الملف متوافق فقط مع واجهة برمجة التطبيقات للاستنتاج اللغوي الكبير (LLM)، ولا يمكن استخدامه كملف "tflite" عام. | المسار |
vocab_model_file |
المسار إلى الدليل الذي يخزن tokenizer.json
tokenizer_config.json ملفًا. بالنسبة إلى Gemma، أشِر إلى ملف tokenizer.model واحد. |
المسار |
lora_ckpt |
المسار إلى ملف LoRA ckpt الخاص بأدوات السلامة التي تخزن وزن محوّل LoRA. | المسار |
lora_rank |
عدد صحيح يمثّل رتبة LoRA ckpt. مطلوبة لتحويل ترجيحات lora. إذا لم يتم تقديمها، يفترض المُحول أنه ليست هناك ترجيحات LoRA. ملاحظة: لا تدعم خلفية وحدة معالجة الرسومات فقط LoRA. | عدد صحيح |
lora_output_tflite_file |
إخراج اسم ملف tflite لأوزان LoRA. | المسار |
تحويل نموذج AI Edge
في حال استخدام نموذج لغوي كبير تم ربطه بنموذج TFLite من خلال AI Edge، استخدِم نص برمجي لإنشاء حزمة مهام. تضم عملية التجميع مع بيانات وصفية إضافية (مثل معلَمات أداة إنشاء الرموز المميّزة) مطلوبة لتنفيذ الاستنتاج الشامل.
تتطلب عملية تجميع النموذج توفر حزمة MediaPipe PyPI. الإحالة الناجحة
يتوفر النص البرمجي في كل حزم MediaPipe بعد 0.10.14
.
ثبِّت التبعيات واستورِدها مع ما يلي:
$ python3 -m pip install mediapipe
استخدِم مكتبة genai.bundler
لتجميع النموذج:
import mediapipe as mp
from mediapipe.tasks.python.genai import bundler
config = bundler.BundleConfig(
tflite_model=TFLITE_MODEL,
tokenizer_model=TOKENIZER_MODEL,
start_token=START_TOKEN,
stop_tokens=STOP_TOKENS,
output_filename=OUTPUT_FILENAME,
enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
المعلمة | الوصف | القيم المقبولة |
---|---|---|
tflite_model |
المسار إلى AI Edge الذي تم تصدير نموذج TFLite | المسار |
tokenizer_model |
المسار إلى نموذج أداة إنشاء الرموز المميّزة لـ SentencePiece | المسار |
start_token |
الرمز المميّز للبدء الخاص بالنموذج. يجب أن يكون رمز البدء موجودًا في نموذج أداة إنشاء الرموز المميزة. | سلسلة |
stop_tokens |
رموز محطات التوقف الخاصة بالنموذج. يجب أن تكون رموز التوقف موجودة في نموذج أداة إنشاء الرموز المميزة. | القائمة[STRING] |
output_filename |
اسم ملف حزمة مهام الإخراج. | المسار |
إضافة نموذج إلى دليل المشروع
تخزين النموذج في دليل المشروع:
<dev-project-root>/assets/gemma-2b-it-gpu-int4.bin
تحديد مسار النموذج باستخدام الكائن baseOptions
modelAssetPath
:
baseOptions: { modelAssetPath: `/assets/gemma-2b-it-gpu-int4.bin`}
إنشاء المهمة
استخدِم إحدى دوال createFrom...()
الخاصة بواجهة برمجة التطبيقات للاستنتاج اللغوي الكبير (LLM) لإعداد المهمة
الاستنتاجات المجرية. يمكنك استخدام الدالة createFromModelPath()
مع
المسار النسبي أو المطلق لملف النموذج المدرَّب. يستخدم مثال الرمز البرمجي
createFromOptions()
. لمزيد من المعلومات حول
خيارات الضبط، راجِع خيارات الضبط.
توضح التعليمة البرمجية التالية كيفية إنشاء هذه المهمة وتهيئتها:
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
});
خيارات الإعداد
تتضمّن هذه المهمة خيارات الضبط التالية لتطبيقات الويب وتطبيقات JavaScript:
اسم الخيار | الوصف | نطاق القيمة | القيمة الافتراضية |
---|---|---|---|
modelPath |
المسار إلى مكان تخزين النموذج ضمن دليل المشروع. | المسار | لا ينطبق |
maxTokens |
الحد الأقصى لعدد الرموز المميزة (الرموز المميزة للإدخال + الرموز المميزة للمخرجات) التي يتعامل معها النموذج. | عدد صحيح | 512 |
topK |
يشير ذلك المصطلح إلى عدد الرموز المميّزة التي يأخذها النموذج في الاعتبار في كل خطوة من خطوات الإنشاء. يحدد هذا الخيار التوقعات الخاصة بأعلى ألف رمز من المرجح أن يكون أكثر ترجيحًا. | عدد صحيح | 40 |
temperature |
مقدار العشوائية التي تم تقديمها أثناء الإنشاء. ارتفاع تؤدي درجة الحرارة إلى مزيد من الإبداع في النص الذي يتم إنشاؤه، بينما ودرجة الحرارة المنخفضة ينتج عنها قدر أكبر من التنبؤ. | عائم | 0.8 |
randomSeed |
القيمة العشوائية المستخدمة أثناء إنشاء النص. | عدد صحيح | 0 |
loraRanks |
تم ترتيب LoRA لاستخدامها بواسطة نماذج LoRA أثناء وقت التشغيل. ملاحظة: لا يتوافق هذا إلا مع طُرز وحدة معالجة الرسومات. | مصفوفة عدد صحيح | لا ينطبق |
تجهيز البيانات
تقبل واجهة برمجة التطبيقات للاستنتاج اللغوي الكبير (LLM) البيانات النصية (string
). تتعامل المهمة مع إدخال البيانات
المعالجة المسبقة، بما في ذلك الترميز والمعالجة المسبقة لـ Tenor.
تتم معالجة جميع عمليات المعالجة المسبقة ضمن الدالة generateResponse()
. تتوفر
لا حاجة إلى معالجة مسبقة إضافية لنص الإدخال.
const inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday.";
تنفيذ المهمة
تستخدم واجهة برمجة التطبيقات للاستدلال من النموذج اللغوي الكبير الدالة generateResponse()
لعرض الاستنتاجات.
فيما يخص تصنيف النص، هذا يعني عرض الفئات المحتملة
إدخال النص.
يوضح الرمز التالي كيفية تنفيذ المعالجة باستخدام المهمة الأمثل.
const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;
لبث الرد، استخدِم ما يلي:
llmInference.generateResponse(
inputPrompt,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});
التعامل مع العملاء وعرض النتائج
تعرض واجهة برمجة التطبيقات للاستنتاج اللغوي الكبير (LLM) سلسلة تتضمّن نص الردّ الذي تم إنشاؤه.
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]
تخصيص نموذج LoRA
يمكن ضبط واجهة برمجة تطبيقات استدلال الوسائط اللغوية الكبيرة (LLM) لدعم التوافق منخفض الترتيب (LoRA). للنماذج اللغوية الكبيرة. وباستخدام نماذج LoRA محسّنة، يستطيع المطورون تخصيص سلوك النماذج اللغوية الكبيرة من خلال عملية تدريب فعّالة من حيث التكلفة
يتوافق استخدام LoRA مع واجهة برمجة تطبيقات الاستنتاج اللغوي الكبير (LLM) لنماذج Gemma-2B وPhi-2 الواجهة الخلفية لوحدة GPU، مع تطبيق ترجيحات LoRA على طبقات الانتباه فقط. هذا النمط يعمل التنفيذ الأولي بمثابة واجهة برمجة تطبيقات تجريبية للتطويرات المستقبلية مع خطط لدعم المزيد من النماذج وأنواع الطبقات المختلفة في المستقبل التحديثات.
إعداد نماذج LoRA
اتّبِع التعليمات المتعلقة بتطبيق HuggingFace لتدريب نموذج LoRA مضبوط بشكلٍ دقيق على مجموعة بياناتك باستخدام أنواع النماذج المتوافقة، مثل Gemma-2B أو Phi-2. يتوفّر كل من نموذجَي Gemma-2B وPhi-2 على HuggingFace بتنسيق أدوات السلامة. بما أنّ واجهة برمجة تطبيقات الاستنتاج اللغوي الكبير (LLM) لا تتوافق إلا مع LoRA في طبقات الانتباه، يجب تحديد طبقات الانتباه فقط أثناء إنشاء LoraConfig
على النحو التالي:
# For Gemma-2B
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"],
)
لأغراض الاختبار، تتوفّر على HuggingFace نماذج LoRA محسّنة ومتاحة للجميع تتناسب مع واجهة LLM Inference API. على سبيل المثال، monsterapi/gemma-2b-lora-maths-orca-200k لـ Gemma-2B وlole25/phi-2-sft-ultrachat-lora لـ Phi-2.
بعد التدريب على مجموعة البيانات المعدّة وحفظ النموذج، ستحصل على ملف adapter_model.safetensors
يحتوي على القيم التقديرية لنموذج LoRA. ملف Safetensors هو نقطة تفتيش LoRA المستخدمة في تحويل النموذج.
كخطوة تالية، ستحتاج إلى تحويل ترجيحات النموذج إلى مخزن مؤقت مسطح TensorFlow Lite باستخدام حزمة MediaPipe Python. يجب أن تحدِّد ConversionConfig
خيارات النموذج الأساسي بالإضافة إلى خيارات LoRA الإضافية. يُرجى العلم أنّه يجب ضبط الخلفية على 'gpu'
لأنّ واجهة برمجة التطبيقات لا تتوافق إلا مع استنتاج 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_TFLITE_FILE,
)
converter.convert_checkpoint(config)
ستُخرج أداة التحويل ملفَّي TFLite للتخزين المؤقت، أحدهما للنموذج الأساسي والآخر لنموذج LoRA.
استنتاج نموذج لوRA
تم تعديل واجهة برمجة التطبيقات LLM للنماذج اللغوية الكبيرة على الويب وAndroid وiOS لإتاحة استنتاج نموذج LoRA. يتوافق الويب مع LoRA الديناميكية التي يمكنها تبديل نماذج LoRA المختلفة أثناء وقت التشغيل. يدعم Android وiOS تنسيق 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 من خلال إدخال مرجع نموذج 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;
});