تشغيل النماذج اللغوية الكبيرة باستخدام LiteRT-LM

‫LiteRT-LM هي مكتبة متوافقة مع عدة منصات ومصمَّمة لتشغيل مسارات نماذج اللغة بكفاءة على مجموعة كبيرة من الأجهزة، بدءًا من الهواتف الجوّالة وصولاً إلى الأنظمة المضمَّنة. توفّر هذه الأداة للمطوّرين الأدوات اللازمة لإنشاء عمليات سير عمل متطورة لنماذج اللغة ونشرها، وهي تتضمّن الآن ميزة التكامل السلس مع وحدة المعالجة العصبية (NPU).

تشغيل نماذج اللغات الكبيرة على وحدة المعالجة المركزية ووحدة معالجة الرسومات

يمكنك الاطّلاع على مستودع LiteRT-LM على GitHub للحصول على تعليمات مفصّلة حول التطوير المتوافق مع عدة أنظمة أساسية وتسريع الأجهزة باستخدام وحدة المعالجة المركزية (CPU) أو وحدة معالجة الرسومات (GPU).

تشغيل النماذج اللغوية الكبيرة على وحدة المعالجة العصبية

توفّر وحدات المعالجة العصبية (NPU) وحدات أجهزة متخصّصة تم تحسينها لتناسب أحجام المعالجة في التعلّم العميق. وتتوفّر هذه الميزات بشكل متزايد في الأنظمة الحديثة على شريحة واحدة (SoC)، خاصةً على الأجهزة الجوّالة. وبفضل أدائها العالي، تُعدّ هذه الوحدات مناسبة جدًا لتنفيذ استنتاجات نماذج اللغات الكبيرة.

مورّدو وحدات المعالجة العصبية

يتيح LiteRT-LM تشغيل نماذج اللغات الكبيرة باستخدام تسريع وحدة المعالجة العصبية (NPU) مع المورّدين التاليين. اختَر التعليمات حسب المورّد الذي تريد تجربته:

البدء بسرعة

للبدء، اتّبِع أولاً تعليمات المتطلبات الأساسية لإعداد البيئة والمستودع.

للتفاعل مع جهاز Android، تأكَّد أيضًا من تثبيت Android Debug Bridge بشكل صحيح ومن توفُّر جهاز متصل يمكن الوصول إليه باستخدام adb.

للحصول على تعليمات أكثر تفصيلاً، يمكنك الاطّلاع على قسم البدء السريع في مستودع LiteRT-LM، والعثور على مزيد من المعلومات حول litert_lm_main العرض التوضيحي لسطر الأوامر.

Qualcomm AI Engine Direct

في ما يلي خطوات تشغيل النماذج اللغوية الكبيرة على وحدة المعالجة العصبية من Qualcomm:

الخطوة 1: تنزيل نموذج .litertlm تم تصميم وقت تشغيل LiteRT-LM للعمل مع النماذج بتنسيق .litertlm. يمكنك العثور على الطُرز المتوافقة وتنزيلها في الجدول التالي.

الطراز منظومة على رقاقة (SoC) التكميم حجم الاستيعاب حجم النموذج (ميغابايت) رابط التنزيل
Gemma3-1B SM8750 4 بت لكل قناة 1280 658 تنزيل
Gemma3-1B SM8650 4 بت لكل قناة 1280 658 تنزيل
Gemma3-1B SM8550 4 بت لكل قناة 1280 657 تنزيل

عليك تنزيل النموذج المتوافق مع نظامك على الشريحة. في ما يلي مثال على أمر يمكن أن يساعدك في الحصول على رابط Hugging Face الذي يمكنه تنزيل النموذج الصحيح لنظامك على الشريحة في هاتفك (يُرجى العِلم أنّه عليك تسجيل الدخول والموافقة على النموذج من أجل الحصول على إذن بتنزيل الملف). يجب التأكّد من توفّر جهاز متصل يمكن الوصول إليه باستخدام adb.

SOC_MODEL=$(adb shell getprop ro.soc.model | tr '[:upper:]' '[:lower:]')
echo "https://huggingface.co/litert-community/Gemma3-1B-IT/blob/main/Gemma3-1B-IT_q4_ekv1280_${SOC_MODEL}.litertlm"

تأكَّد من إدراج $SOC_MODEL في جدول الأجهزة المتوافقة. لن يعمل الرابط الذي تم إنشاؤه مع الطُرز غير المتوافقة. تتم إضافة دعم لوحدات معالجة عصبية جديدة بانتظام، لذا يُرجى التحقّق مجددًا لاحقًا لمعرفة ما إذا كان جهازك متوافقًا.

الخطوة 2: تنزيل مكتبات QAIRT واستخراجها لتشغيل النموذج باستخدام وحدة المعالجة العصبية (NPU) من Qualcomm، يجب توفُّر مكتبات وقت التشغيل المرتبطة على الجهاز. يمكن تنزيل حزمة تطوير البرامج (SDK) الخاصة بأداة QAIRT من خلال الرابط واستخراج الملف. اضبط المتغيّر QAIRT_ROOT (سيتم استخدامه في الخطوات اللاحقة) للإشارة إلى المجلد الذي تم فك ضغطه والذي يحتوي على رقم الإصدار، على سبيل المثال:

unzip <your_file.zip> -d ~/

QAIRT_ROOT=~/qairt/2.42.0.251225

الخطوة 3: إنشاء وقت التشغيل / المكتبات LiteRT-LM

التطوير في نظام التشغيل Linux

لتتمكّن من إنشاء ملف ثنائي لنظام التشغيل Android، عليك تثبيت الإصدار r28b من حزمة NDK أو إصدار أحدث من https://developer.android.com/ndk/downloads#stable-downloads. في ما يلي الخطوات المحدّدة:

  • نزِّل ملف zip من https://developer.android.com/ndk/downloads#stable-downloads.
  • استخرِج ملف zip إلى الموقع الجغرافي المفضّل لديك (مثلاً /path/to/AndroidNDK/).
  • استبدِل ANDROID_NDK_HOME بمسار دليل NDK. يجب أن يكون شيئًا مثل:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

ملاحظات: تأكَّد من أنّ ANDROID_NDK_HOME يشير إلى الدليل الذي يتضمّن README.md.

بعد إعداد البيئة، جرِّب إنشاء حزمة litert_lm_main الثنائية:

bazel build --config=android_arm64 //runtime/engine:litert_lm_main

بالإضافة إلى ذلك، يجب إنشاء مكتبة واجهة برمجة التطبيقات dispatch لكي يتفاعل وقت تشغيل LiteRT-LM مع وحدة المعالجة العصبية:

bazel build --config=android_arm64 \
    @litert//litert/vendors/qualcomm/dispatch:dispatch_api_so

التطوير في نظام التشغيل macOS

تتضمّن أدوات سطر الأوامر في Xcode أداة clang. تشغيل xcode-select --install إذا لم يسبق تثبيته

لتتمكّن من إنشاء ملف ثنائي لنظام التشغيل Android، عليك تثبيت الإصدار r28b من حزمة NDK أو إصدار أحدث من https://developer.android.com/ndk/downloads#stable-downloads. في ما يلي الخطوات المحدّدة:

  • نزِّل ملف .dmg من https://developer.android.com/ndk/downloads#stable-downloads.
  • افتح الملف .dmg وانقل الملف AndroidNDK* إلى الموقع الجغرافي المفضّل لديك (مثلاً /path/to/AndroidNDK/).
  • استبدِل ANDROID_NDK_HOME بمسار دليل NDK. يجب أن يكون شيئًا مثل:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

ملاحظات: تأكَّد من أنّ ANDROID_NDK_HOME يشير إلى الدليل الذي يتضمّن README.md.

بعد إعداد البيئة، جرِّب إنشاء حزمة litert_lm_main الثنائية:

bazel build --config=android_arm64 //runtime/engine:litert_lm_main

بالإضافة إلى ذلك، يجب إنشاء مكتبة واجهة برمجة التطبيقات dispatch لكي يتفاعل وقت تشغيل LiteRT-LM مع وحدة المعالجة العصبية:

bazel build --config=android_arm64 \
    @litert//litert/vendors/qualcomm/dispatch:dispatch_api_so

الخطوة 4: تشغيل النموذج على الجهاز بعد إنشاء الملف الثنائي بنجاح، يمكننا الآن محاولة تشغيل النموذج على الجهاز. تأكَّد من أنّ لديك إذن الوصول للكتابة في DEVICE_FOLDER:

لتشغيل الملف الثنائي على جهاز Android، علينا نقل بعض مواد العرض والملفات الثنائية. أولاً، اضبط DEVICE_FOLDER وتأكَّد من أنّ لديك إذن الوصول للكتابة إليه (يمكنك عادةً وضع عناصر ضمن /data/local/tmp/):

export DEVICE_FOLDER=/data/local/tmp/
adb shell mkdir -p $DEVICE_FOLDER

export MODEL_PATH=<path to your downloaded .litertlm >

ادفع ملف ‎ .litertlm. ملاحظة: عليك إرسال مواد العرض هذه مرة واحدة فقط.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

ادفع مكتبات QAIRT. يمكنك العثور عليها في المجلد الذي تم فك ضغطه في الخطوة 2 $QAIRT_ROOT/lib/aarch64-android/. يُرجى العِلم أنّ QAIRT_ROOT يجب أن يحتوي على رقم الإصدار، مثل 2.42.0.251225.

adb push $QAIRT_ROOT/lib/aarch64-android/libQnnHtp*Stub.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnHtp.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnSystem.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnHtpPrepare.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/hexagon-*/unsigned/libQnnHtp*Skel.so $DEVICE_FOLDER

أرسِل واجهة برمجة التطبيقات dispatch والملف الثنائي الرئيسي الذي تم تجميعه في الخطوة 3.

adb push bazel-bin/external/litert/litert/vendors/qualcomm/*/*.so \
    $DEVICE_FOLDER
adb push prebuilt/android_arm64/*.so $DEVICE_FOLDER
adb push bazel-bin/runtime/engine/litert_lm_main $DEVICE_FOLDER

يمكنك الآن تنفيذ الملف الثنائي.

adb shell LD_LIBRARY_PATH=$DEVICE_FOLDER ADSP_LIBRARY_PATH=$DEVICE_FOLDER \
    $DEVICE_FOLDER/litert_lm_main \
    --backend=npu \
    --model_path=$DEVICE_FOLDER/model.litertlm

‫MediaTek NeuroPilot

في ما يلي خطوات تشغيل نماذج اللغات الكبيرة على وحدة المعالجة العصبية من MediaTek:

الخطوة 1: تنزيل نموذج .litertlm تم تصميم وقت تشغيل LiteRT-LM للعمل مع النماذج بتنسيق .litertlm. يمكنك العثور على الطُرز المتوافقة وتنزيلها في الجدول التالي.

الطراز منظومة على رقاقة (SoC) التكميم حجم الاستيعاب حجم النموذج (ميغابايت) رابط التنزيل
Gemma3-1B MT6989 4 بت لكل قناة 1280 985 تنزيل
Gemma3-1B MT6991 4 بت لكل قناة 1280 986 تنزيل

عليك تنزيل النموذج المتوافق مع نظامك على الشريحة. في ما يلي مثال على أمر يمكن أن يساعدك في الحصول على رابط Hugging Face الذي يمكنه تنزيل النموذج الصحيح لنظامك على الشريحة في هاتفك (يُرجى العِلم أنّه عليك تسجيل الدخول والموافقة على النموذج من أجل الحصول على إذن بتنزيل الملف). يجب التأكّد من توفّر جهاز متصل يمكن الوصول إليه باستخدام adb.

SOC_MODEL=$(adb shell getprop ro.soc.model | tr '[:upper:]' '[:lower:]')
echo "https://huggingface.co/litert-community/Gemma3-1B-IT/blob/main/Gemma3-1B-IT_q4_ekv1280_${SOC_MODEL}.litertlm"

تأكَّد من إدراج $SOC_MODEL في جدول الأجهزة المتوافقة. لن يعمل الرابط الذي تم إنشاؤه مع الطُرز غير المتوافقة. تتم إضافة دعم لوحدات معالجة عصبية جديدة بانتظام، لذا يُرجى التحقّق مجددًا لاحقًا لمعرفة ما إذا كان جهازك متوافقًا.

الخطوة 2:إنشاء وقت التشغيل / المكتبات LiteRT-LM

التطوير في نظام التشغيل Linux

لتتمكّن من إنشاء ملف ثنائي لنظام التشغيل Android، عليك تثبيت الإصدار r28b من حزمة NDK أو إصدار أحدث من https://developer.android.com/ndk/downloads#stable-downloads. في ما يلي الخطوات المحدّدة:

  • نزِّل ملف zip من https://developer.android.com/ndk/downloads#stable-downloads.
  • استخرِج ملف zip إلى الموقع الجغرافي المفضّل لديك (مثلاً /path/to/AndroidNDK/).
  • استبدِل ANDROID_NDK_HOME بمسار دليل NDK. يجب أن يكون شيئًا مثل:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

ملاحظات: تأكَّد من أنّ ANDROID_NDK_HOME يشير إلى الدليل الذي يتضمّن README.md.

بعد إعداد البيئة، جرِّب إنشاء حزمة litert_lm_main الثنائية:

bazel build --config=android_arm64 //runtime/engine:litert_lm_main

بالإضافة إلى ذلك، يجب إنشاء مكتبة واجهة برمجة التطبيقات dispatch لكي يتفاعل وقت تشغيل LiteRT-LM مع وحدة المعالجة العصبية:

bazel build --config=android_arm64 \
    @litert//litert/vendors/mediatek/dispatch:dispatch_api_so

التطوير في نظام التشغيل macOS

تتضمّن أدوات سطر الأوامر في Xcode أداة clang. تشغيل xcode-select --install إذا لم يسبق تثبيته

لتتمكّن من إنشاء ملف ثنائي لنظام التشغيل Android، عليك تثبيت الإصدار r28b من حزمة NDK أو إصدار أحدث من https://developer.android.com/ndk/downloads#stable-downloads. في ما يلي الخطوات المحدّدة:

  • نزِّل ملف .dmg من https://developer.android.com/ndk/downloads#stable-downloads.
  • افتح الملف .dmg وانقل الملف AndroidNDK* إلى الموقع الجغرافي المفضّل لديك (مثلاً /path/to/AndroidNDK/).
  • استبدِل ANDROID_NDK_HOME بمسار دليل NDK. يجب أن يكون شيئًا مثل:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

ملاحظات: تأكَّد من أنّ ANDROID_NDK_HOME يشير إلى الدليل الذي يتضمّن README.md.

بعد إعداد البيئة، جرِّب إنشاء حزمة litert_lm_main الثنائية:

bazel build --config=android_arm64 //runtime/engine:litert_lm_main

بالإضافة إلى ذلك، يجب إنشاء مكتبة واجهة برمجة التطبيقات dispatch لكي يتفاعل وقت تشغيل LiteRT-LM مع وحدة المعالجة العصبية:

bazel build --config=android_arm64 \
    @litert//litert/vendors/mediatek/dispatch:dispatch_api_so

الخطوة 3: تشغيل النموذج على الجهاز بعد إنشاء الملف الثنائي بنجاح، يمكننا الآن محاولة تشغيل النموذج على الجهاز. تأكَّد من أنّ لديك إذن الوصول للكتابة في DEVICE_FOLDER:

لتشغيل الملف الثنائي على جهاز Android، علينا نقل بعض مواد العرض والملفات الثنائية. أولاً، اضبط DEVICE_FOLDER وتأكَّد من أنّ لديك إذن الوصول للكتابة إليه (يمكنك عادةً وضع عناصر ضمن /data/local/tmp/):

export DEVICE_FOLDER=/data/local/tmp/
adb shell mkdir -p $DEVICE_FOLDER

export MODEL_PATH=<path to your downloaded .litertlm >

ادفع ملف ‎ .litertlm. ملاحظة: عليك إرسال مواد العرض هذه مرة واحدة فقط.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

أرسِل واجهة برمجة التطبيقات dispatch والثنائي الرئيسي الذي تم تجميعه في الخطوة 2.

adb push bazel-bin/external/litert/litert/vendors/mediatek/*/*.so \
    $DEVICE_FOLDER
adb push prebuilt/android_arm64/*.so $DEVICE_FOLDER
adb push bazel-bin/runtime/engine/litert_lm_main $DEVICE_FOLDER

يمكنك الآن تنفيذ الملف الثنائي.

adb shell LD_LIBRARY_PATH=$DEVICE_FOLDER \
    $DEVICE_FOLDER/litert_lm_main \
    --backend=npu \
    --model_path=$DEVICE_FOLDER/model.litertlm