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
הדגמה של שורת הפקודה.
Google Tensor
כדי להריץ מודלים של שפה גדולה (LLM) ב-Google Tensor:
שלב 1: מורידים את מודל .litertlm
זמן הריצה של LiteRT-LM מיועד לעבודה עם מודלים בפורמט .litertlm.
בטבלה הבאה אפשר למצוא ולהוריד מודלים תואמים:
| מודל | SoC | קוונטיזציה | גודל ההקשר | גודל המודל (Mb) | קישור להורדה |
|---|---|---|---|---|---|
| Gemma3-1B | Tensor_G5 | 8 ביט לכל ערוץ | 1280 | 1704 | הורדה |
זו דוגמה לפקודה שיכולה לעזור לכם לקבל את הקישור ל-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_Google_${SOC_MODEL}.litertlm"
מוודאים שהמשתנה $SOC_MODEL מופיע בטבלת התמיכה. הקישור שנוצר לא יפעל במודלים שלא נתמכים. אנחנו מוסיפים תמיכה ב-NPU באופן קבוע, לכן כדאי לחזור לכאן מאוחר יותר כדי לבדוק אם המכשיר שלכם נתמך.
שלב 2: בניית זמן הריצה או הספריות של LiteRT-LM
פיתוח ב-Linux
כדי ליצור את הקובץ הבינארי ל-Android, צריך להתקין את NDK r28b או גרסה חדשה יותר מתוך הגרסה היציבה האחרונה.
כך עושים את זה:
- מורידים את חבילת ה-NDK היציבה האחרונה (קובץ
zip) מהגרסה היציבה האחרונה. - מחלצים את הקובץ
zipלמיקום הרצוי (למשל/path/to/AndroidNDK/). - מגדירים את
ANDROID_NDK_HOMEכך שיצביע על ספריית ה-NDK. הוא אמור להיראות כך:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/
אחרי שמגדירים את זה, יוצרים את הקובץ הבינארי 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/google_tensor/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/google_tensor/*/*.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
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
כדי להריץ את המודל באמצעות ה-NPU של Qualcomm, צריך ספריות זמן ריצה משויכות במכשיר. אפשר להוריד את 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
Intel OpenVino
הרצה באמצעות קובץ ההפעלה של C++
כדי להריץ מודלים של LLM ב-NPU של Intel:
שלב 1: מורידים את מודל .litertlm
זמן הריצה של LiteRT-LM מיועד לעבודה עם מודלים בפורמט .litertlm.
בטבלה הבאה אפשר למצוא ולהוריד מודלים תואמים.
| מודל | SoC | גודל ההקשר | גודל המודל (Mb) | קישור להורדה |
|---|---|---|---|---|
| Gemma4-2B | PantherLake | 4096 | 2.95GB | הורדה |
| Gemma4-2B | LunarLake | 4096 | 2.96 GB | הורדה |
שלב 2: בניית זמן הריצה של LiteRT-LM וספריית השליחה של LiteRT Intel
פיתוח ב-Windows
אחרי ההגדרה, מנסים ליצור את הקובץ הבינארי litert_lm_main:
bazel --output_base=C:\bzl_lrtlm build --define=DISABLE_HUGGINGFACE_TOKENIZER=1 --config=windows //runtime/engine:litert_lm_main
בנוסף, צריך ליצור את ספריית ה-API של השליחה כדי שזמן הריצה של LiteRT-LM יוכל לקיים אינטראקציה עם NPU:
bazel --output_base=C:\bzl_lrtlm build --config=windows @litert//litert/vendors/intel_openvino/dispatch:LiteRtDispatch
שלב 3: הפעלת המודל במכשיר
אחרי שהקובץ הבינארי נוצר בהצלחה, אפשר לנסות להפעיל את המודל במכשיר. אנחנו אורזים את כל הקבצים הבינאריים, קובצי ה-DLL והמודל בתיקייה execution_dir:cp bazel-bin/external/litert/vendors/intel_openvino/dispatch/LiteRtDispatch.dll execution_dir
cp bazel-bin/runtime/engine/litert_lm_main.exe execution_dir
cp prebuilt\windows_x86_64\libGemmaModelConstraintProvider.dll execution_dir
# Run OpenVino's setup script to ensure the OpenVino DLLs can be found.
& C:\bzl_lrtlm\external\intel_openvino\openvino\setupvars.ps1
# Test run
cd execution_dir
.\litert_lm_main.exe --backend=npu --model_path="execution_dir\model.litertlm" --input_prompt="What is the capital of France?"
אפשר גם לעיין בכתובת https://ai.google.dev/edge/litert-lm/python כדי להריץ את API בשפת Python של LiteRT-LM .litertlm עם העורף של ה-NPU.
import litert_lm
with litert_lm.Engine("C:\path\to\npu-model.litertlm", backend=litert_lm.Backend.NPU()) as engine:
with engine.create_conversation() as conversation:
print(conversation.send_message("What is the capital of France?"))