הפעלת מודלים גדולים של שפה (LLM) באמצעות LiteRT-LM

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?"))