تتيح لك واجهة برمجة التطبيقات LLM Inference API تشغيل النماذج اللغوية الكبيرة (LLM) بالكامل على الجهاز لتطبيقات iOS، والتي يمكنك استخدامها لتنفيذ مجموعة كبيرة من المهام، مثل إنشاء النصوص واسترداد المعلومات بتنسيق لغة طبيعية وملخّص المستندات. توفّر المهمة دعمًا مضمّنًا لعدة نماذج لغوية كبيرة لتحويل النص إلى نص، ما يتيح لك تطبيق أحدث نماذج الذكاء الاصطناعي التوليدي على الأجهزة فقط على تطبيقات iOS.
لإضافة واجهة برمجة التطبيقات LLM Inference API بسرعة إلى تطبيقك المتوافق مع نظام التشغيل iOS، اتّبِع خطوات التشغيل السريع. للحصول على مثال أساسي على تطبيق iOS يستخدم واجهة برمجة التطبيقات LLM Inference API، يمكنك الاطّلاع على نموذج التطبيق. لفهمٍ عميقٍ أكثر لطريقة عمل واجهة برمجة التطبيقات LLM Inference API، يُرجى الرجوع إلى أقسام خيارات الضبط وتحويل النماذج وضبط LoRA.
يمكنك الاطّلاع على هذه المهمة في العرض التمهيدي لتطبيق MediaPipe Studio. لمزيد من المعلومات عن الإمكانات والنماذج وخيارات الضبط لهذه المهمة، اطّلِع على نظرة عامة.
البدء السريع
اتّبِع الخطوات التالية لإضافة واجهة برمجة التطبيقات LLM Inference API إلى تطبيقك المتوافق مع نظام التشغيل iOS.
تستخدِم واجهة برمجة التطبيقات LLM Inference API مكتبة MediaPipeTasksGenai
التي يجب تثبيتها
باستخدام CocoaPods. تتوافق المكتبة مع تطبيقات Swift وObjective-C،
ولا تتطلّب أي إعدادات إضافية خاصة باللغة.
للحصول على تعليمات لتثبيت CocoaPods على نظام التشغيل macOS، يُرجى الرجوع إلى دليل تثبيت CocoaPods.
للحصول على تعليمات حول كيفية إنشاء Podfile
باستخدام الحِزم اللازمة لتطبيقك، يُرجى الرجوع إلى مقالة استخدام
CocoaPods.
إضافة التبعيات
أضِف مجموعة MediaPipeTasksGenai
في Podfile
باستخدام الرمز التالي:
target 'MyLlmInferenceApp' do
use_frameworks!
pod 'MediaPipeTasksGenAI'
pod 'MediaPipeTasksGenAIC'
end
إذا كان تطبيقك يتضمّن أهداف اختبار الوحدات، يمكنك الرجوع إلى دليل الإعداد لنظام التشغيل
iOS للحصول على معلومات إضافية عن إعداد
Podfile
.
تنزيل نموذج
نزِّل Gemma-2 2B بتنسيق كمية 8 بت من نماذج Kaggle. لمزيد من المعلومات عن النماذج المتاحة، اطّلِع على مستندات نماذج تحديد المصدر.
أضِف النموذج إلى دليل مشروعك باستخدام Xcode. للحصول على تعليمات حول كيفية إضافة ملفات إلى مشروع Xcode، يُرجى الرجوع إلى مقالة إدارة الملفات والمجلدات في مشروع Xcode.
إعداد المهمة
ابدأ المهمة باستخدام خيارات الإعداد الأساسية:
import MediaPipeTasksGenai
let modelPath = Bundle.main.path(forResource: "model",
ofType: "bin")
let options = LlmInferenceOptions()
options.baseOptions.modelPath = modelPath
options.maxTokens = 1000
options.topk = 40
options.temperature = 0.8
options.randomSeed = 101
let llmInference = try LlmInference(options: options)
تنفيذ المهمة
استخدِم الطريقة generateResponse(inputText:)
لإنشاء ردّ نصي. يؤدي ذلك إلى توليد ردّ واحد.
let result = try LlmInference.generateResponse(inputText: inputPrompt)
لبثّ الردّ، استخدِم الطريقة generateResponseAsync(inputText:)
.
let resultStream = LlmInference.generateResponseAsync(inputText: inputPrompt)
do {
for try await partialResult in resultStream {
print("\(partialResult)")
}
print("Done")
}
catch {
print("Response error: '\(error)")
}
نموذج طلب
يمثّل نموذج التطبيق مثالاً على تطبيق أساسي لإنشاء النصوص على أجهزة iOS، ويستخدم واجهة برمجة التطبيقات LLM Inference API. يمكنك استخدام التطبيق كنقطة بداية لتطبيقك المخصّص لنظام iOS، أو الرجوع إليه عند تعديل تطبيق حالي. يتم استضافة مثال الرمز على GitHub.
استنسِخ مستودع git باستخدام الأمر التالي:
git clone https://github.com/google-ai-edge/mediapipe-samples
بعد إنشاء نسخة محلية من نموذج الرمز البرمجي، يمكنك استيراد المشروع إلى iOS Studio وتشغيل التطبيق. لمزيد من المعلومات، يُرجى الاطّلاع على دليل الإعداد لنظام iOS.
خيارات الضبط
استخدِم خيارات الضبط التالية لإعداد تطبيق iOS:
اسم الخيار | الوصف | نطاق القيمة | القيمة التلقائية |
---|---|---|---|
modelPath |
مسار مكان تخزين النموذج ضمن دليل المشروع | PATH | لا ينطبق |
maxTokens |
الحد الأقصى لعدد الرموز المميّزة (رموز الإدخال + رموز الإخراج) التي يعالجها النموذج | عدد صحيح | 512 |
topk |
عدد الرموز التي يأخذها النموذج في الاعتبار في كل خطوة من خطوات الإنشاء حصر التوقّعات بأكبر عدد من الرموز الاحتمالية | عدد صحيح | 40 |
temperature |
مقدار العشوائية التي تمّ إدخالها أثناء الإنشاء تؤدّي درجة الحرارة المرتفعة إلى زيادة الإبداع في النص الذي يتم إنشاؤه، في حين تؤدّي درجة الحرارة المنخفضة إلى إنشاء نصوص يمكن توقّعها بشكل أكبر. | عدد عائم | 0.8 |
randomSeed |
البذرة العشوائية المستخدَمة أثناء إنشاء النص | عدد صحيح | 0 |
loraPath |
المسار المطلق إلى نموذج LoRA على الجهاز ملاحظة: لا يتوافق هذا الإجراء إلا مع طُرز وحدة معالجة الرسومات. | PATH | لا ينطبق |
وضع نماذج للإحالات الناجحة
تتوافق واجهة برمجة التطبيقات 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 |
جميع نماذج PyTorch LLM | مكتبة AI Edge Torch التوليدية | Android وiOS | .task |
لمعرفة كيفية تحويل نماذج أخرى، اطّلِع على قسم تحويل النموذج.
تخصيص LoRA
تتيح واجهة برمجة التطبيقات LLM Inference API ضبط LoRA (التكيّف منخفض الترتيب) باستخدام مكتبة PEFT (الضبط الدقيق الفعال للمعلَمات). تعمل ميزة LoRA على تخصيص سلوك النماذج اللغوية الكبيرة من خلال عملية تدريب ملفتة للتكلفة، ما يؤدي إلى إنشاء مجموعة صغيرة من الأوزان القابلة للتدريب استنادًا إلى بيانات التدريب الجديدة بدلاً من إعادة تدريب النموذج بالكامل.
تتيح واجهة برمجة التطبيقات LLM Inference API إضافة أوزان LoRA إلى طبقات الانتباه في نماذج
Gemma-2 2B وGemma
2B و
Phi-2. نزِّل النموذج بتنسيق safetensors
.
يجب أن يكون النموذج الأساسي بتنسيق safetensors
لإنشاء معاملات LoRA. بعد تدريب LoRA، يمكنك تحويل النماذج إلى تنسيق FlatBuffers
لتشغيلها على MediaPipe.
إعداد قيم ترجيح LoRA
استخدِم دليل LoRA Methods من 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)
سيُنشئ المحوِّل ملفي Flatbuffer، أحدهما للنموذج الأساسي و الآخر لنموذج LoRA.
استنتاج نموذج LoRA
يتوافق نظام التشغيل iOS مع بروتوكول LoRA الثابت أثناء الإعداد. لتحميل نموذج LoRA، حدِّد مسار نموذج LoRA بالإضافة إلى النموذج اللغوي الكبير الأساسي.
import MediaPipeTasksGenai
let modelPath = Bundle.main.path(forResource: "model",
ofType: "bin")
let loraPath= Bundle.main.path(forResource: "lora_model",
ofType: "bin")
let options = LlmInferenceOptions()
options.modelPath = modelPath
options.maxTokens = 1000
options.topk = 40
options.temperature = 0.8
options.randomSeed = 101
options.loraPath = loraPath
let llmInference = try LlmInference(options: options)
لتنفيذ الاستنتاج بالاستناد إلى نموذج لغوي كبير باستخدام LoRA، استخدِم طريقة generateResponse()
أو
generateResponseAsync()
نفسها المستخدَمة في النموذج الأساسي.