دليل استنتاج النموذج اللغوي الكبير للويب

تتيح لك واجهة 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 جارٍ تحويل النموذج اللغوي الكبير. {&quot;PHI_2&quot;, &quot;FALCON_RW_1B&quot;, &quot;STABLELM_4E1T_3B&quot;, &quot;GEMMA_2B&quot;}
backend المعالج (المُفوَّض) المستخدَم لتشغيل النموذج. {&quot;cpu&quot;, &quot;gpu&quot;}
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;
});