LiteRT-LM היא ספרייה חוצת פלטפורמות שנועדה להפעיל ביעילות צינורות של מודלים של שפה במגוון רחב של מכשירים, מטלפונים ניידים ועד מערכות מוטמעות. הכלי מספק למפתחים את האמצעים ליצור ולפרוס תהליכי עבודה מתוחכמים של מודלים לשוניים, ועכשיו הוא כולל שילוב חלק של NPU.
הפעלת מודלים גדולים של שפה (LLM) במעבד (CPU) ובמעבד גרפי (GPU)
הוראות מפורטות על פיתוח חוצה פלטפורמות והאצת חומרה של CPU/GPU זמינות במאגר LiteRT-LM ב-GitHub.
הפעלת מודלים גדולים של שפה (LLM) ב-NPU
יחידות לעיבוד עצבי (NPU) מציעות בלוקים מיוחדים של חומרה שעברו אופטימיזציה לעומסי עבודה של למידה עמוקה. הן זמינות יותר ויותר במערכות מודרניות על שבב (SoC), במיוחד בניידים. הביצועים הגבוהים שלהם הופכים אותם למתאימים מאוד להסקת מסקנות של LLM.
ספקי NPU
LiteRT-LM תומך בהרצת מודלים גדולים של שפה (LLM) באמצעות האצת NPU עם הספקים הבאים. בוחרים את ההוראות בהתאם לספק שרוצים לנסות:
התחלה מהירה
כדי להתחיל, קודם פועלים לפי ההוראות שבקטע דרישות מוקדמות כדי להגדיר את הסביבה ואת המאגר.
בנוסף, כדי שתוכלו ליצור אינטראקציה עם מכשיר Android, ודאו שהתקנתם כמו שצריך את ממשק הגישור של Android (ADB) ושיש לכם מכשיר מחובר שאפשר לגשת אליו באמצעות adb.
הוראות מפורטות מופיעות בקטע Quick Start במאגר LiteRT-LM. אפשר גם לקרוא מידע נוסף על litert_lm_main
הדגמה של שורת הפקודה.
Qualcomm AI Engine Direct
כדי להריץ מודלים גדולים של שפה (LLM) ב-NPU של Qualcomm:
שלב 1: מורידים את מודל .litertlm
זמן הריצה של LiteRT-LM מיועד לעבודה עם מודלים בפורמט .litertlm.
בטבלה הבאה אפשר למצוא ולהוריד מודלים תואמים.
| דגם | SoC | קוונטיזציה | גודל ההקשר | גודל המודל (Mb) | קישור להורדה |
|---|---|---|---|---|---|
| Gemma3-1B | SM8750 | 4 ביט לכל ערוץ | 1280 | 658 | הורדה |
| Gemma3-1B | SM8650 | 4 ביט לכל ערוץ | 1280 | 658 | הורדה |
| Gemma3-1B | SM8550 | 4 ביט לכל ערוץ | 1280 | 657 | הורדה |
תצטרכו להוריד את המודל שמתאים ל-SoC שלכם.
בהמשך מופיעה דוגמה לפקודה שיכולה לעזור לכם לקבל את הקישור ל-Hugging Face שדרכו אפשר להוריד את המודל הנכון ל-SoC של הטלפון (שימו לב שתצטרכו להתחבר ולאשר את הטופס כדי לקבל הרשאה להוריד את הקובץ). צריך לוודא שיש מכשיר מחובר שאפשר לגשת אליו באמצעות 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 מופיע בטבלת התמיכה. הקישור שנוצר לא יפעל במודלים שלא נתמכים. אנחנו מוסיפים תמיכה ב-NPU באופן קבוע, לכן כדאי לחזור לכאן מאוחר יותר כדי לבדוק אם המכשיר שלכם נתמך.
שלב 2: הורדה ופריסה של ספריות QAIRT
כדי להריץ את המודל באמצעות Qualcomm NPU, צריך ספריות זמן ריצה משויכות במכשיר. אפשר להוריד את QAIRT SDK מהקישור ולחלץ את הקובץ. מגדירים את המשתנהQAIRT_ROOT (נשתמש בו בשלבים הבאים) כך שיצביע על התיקייה שלא נפרסה ומכילה את מספר הגרסה, למשל:
unzip <your_file.zip> -d ~/
QAIRT_ROOT=~/qairt/2.42.0.251225
שלב 3: בניית ספריות או זמן ריצה של LiteRT-LM
פיתוח ב-Linux
כדי ליצור את הקובץ הבינארי ל-Android, צריך להתקין את NDK r28b או גרסה חדשה יותר מכתובת 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
בנוסף, צריך ליצור את ספריית ה-API של השליחה כדי שזמן הריצה של LiteRT-LM יוכל ליצור אינטראקציה עם NPU:
bazel build --config=android_arm64 \
@litert//litert/vendors/qualcomm/dispatch:dispatch_api_so
פיתוח ב-macOS
כלי שורת הפקודה של Xcode כוללים את clang. מריצים את xcode-select --install אם הוא לא מותקן.
כדי ליצור את הקובץ הבינארי ל-Android, צריך להתקין את NDK r28b או גרסה חדשה יותר מכתובת 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
בנוסף, צריך ליצור את ספריית ה-API של השליחה כדי שזמן הריצה של LiteRT-LM יוכל ליצור אינטראקציה עם NPU:
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
מעבירים את ה-API של השליחה ואת הקובץ הבינארי הראשי שקומפל בשלב 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
כדי להריץ מודלים של LLM ב-NPU של MediaTek:
שלב 1: מורידים את מודל .litertlm
זמן הריצה של LiteRT-LM מיועד לעבודה עם מודלים בפורמט .litertlm.
בטבלה הבאה אפשר למצוא ולהוריד מודלים תואמים.
| דגם | SoC | קוונטיזציה | גודל ההקשר | גודל המודל (Mb) | קישור להורדה |
|---|---|---|---|---|---|
| Gemma3-1B | MT6989 | 4 ביט לכל ערוץ | 1280 | 985 | הורדה |
| Gemma3-1B | MT6991 | 4 ביט לכל ערוץ | 1280 | 986 | הורדה |
תצטרכו להוריד את המודל שמתאים ל-SoC שלכם.
בהמשך מופיעה דוגמה לפקודה שיכולה לעזור לכם לקבל את הקישור ל-Hugging Face שדרכו אפשר להוריד את המודל הנכון ל-SoC של הטלפון (שימו לב שתצטרכו להתחבר ולאשר את הטופס כדי לקבל הרשאה להוריד את הקובץ). צריך לוודא שיש מכשיר מחובר שאפשר לגשת אליו באמצעות 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 מופיע בטבלת התמיכה. הקישור שנוצר לא יפעל במודלים שלא נתמכים. אנחנו מוסיפים תמיכה ב-NPU באופן קבוע, לכן כדאי לחזור לכאן מאוחר יותר כדי לבדוק אם המכשיר שלכם נתמך.
שלב 2: בניית זמן הריצה או הספריות של LiteRT-LM
פיתוח ב-Linux
כדי ליצור את הקובץ הבינארי ל-Android, צריך להתקין את NDK r28b או גרסה חדשה יותר מכתובת 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
בנוסף, צריך ליצור את ספריית ה-API של השליחה כדי שזמן הריצה של LiteRT-LM יוכל ליצור אינטראקציה עם NPU:
bazel build --config=android_arm64 \
@litert//litert/vendors/mediatek/dispatch:dispatch_api_so
פיתוח ב-macOS
כלי שורת הפקודה של Xcode כוללים את clang. מריצים את xcode-select --install אם הוא לא מותקן.
כדי ליצור את הקובץ הבינארי ל-Android, צריך להתקין את NDK r28b או גרסה חדשה יותר מכתובת 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
בנוסף, צריך ליצור את ספריית ה-API של השליחה כדי שזמן הריצה של LiteRT-LM יוכל ליצור אינטראקציה עם NPU:
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
דוחפים את ה-API של השליחה ואת הקובץ הבינארי הראשי שקומפל בשלב 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