LiteRT-LM یک کتابخانه چند پلتفرمی است که برای اجرای کارآمد خطوط لوله مدل زبان در طیف وسیعی از دستگاهها، از تلفنهای همراه گرفته تا سیستمهای تعبیهشده، طراحی شده است. این کتابخانه ابزارهایی را برای توسعهدهندگان فراهم میکند تا گردشهای کاری پیچیده مدل زبان را ایجاد و مستقر کنند، که اکنون با ادغام یکپارچه NPU همراه است.
اجرای LLMها روی CPU و GPU
برای دستورالعملهای دقیق در مورد توسعه بین پلتفرمی و شتابدهی سختافزاری CPU/GPU، به مخزن LiteRT-LM GitHub مراجعه کنید.
LLM ها را در NPU اجرا کنید
واحدهای پردازش عصبی (NPU) بلوکهای سختافزاری تخصصی بهینه شده برای بارهای کاری یادگیری عمیق را ارائه میدهند. آنها به طور فزایندهای در سیستمهای مدرن روی تراشه (SoC) به ویژه در دستگاههای تلفن همراه در دسترس هستند. ماهیت عملکرد بالای آنها، آنها را برای اجرای استنتاج LLM بسیار مناسب میکند.
فروشندگان NPU
LiteRT-LM از اجرای LLMها با استفاده از شتاب NPU با فروشندگان زیر پشتیبانی میکند. دستورالعملها را بسته به فروشندهای که میخواهید امتحان کنید، انتخاب کنید:
شروع سریع
برای شروع، ابتدا دستورالعملهای پیشنیازها را برای راهاندازی محیط و مخزن دنبال کنید.
همچنین، برای اینکه بتوانید با دستگاه اندروید خود تعامل داشته باشید، مطمئن شوید که Android Debug Bridge را به درستی نصب کردهاید و دستگاهی متصل دارید که با استفاده از adb قابل دسترسی باشد.
برای دستورالعملهای دقیقتر، بخش شروع سریع را در مخزن LiteRT-LM بررسی کنید و اطلاعات بیشتری در مورد نسخه آزمایشی خط فرمان litert_lm_main پیدا کنید.
گوگل تنسور
برای اجرای LLM ها در Google Tensor این مراحل را دنبال کنید:
مرحله ۱: مدل
زمان اجرای LiteRT-LM برای کار با مدلهایی با فرمت .litertlm را دانلود کنید.litertlm طراحی شده است.
میتوانید مدلهای سازگار را در جدول زیر پیدا و دانلود کنید:
| مدل | تراشه | کوانتیزاسیون | اندازه متن | اندازه مدل (مگابایت) | لینک دانلود |
|---|---|---|---|---|---|
| جما۳-۱بی | تنسور_جی۵ | ۸ بیت در هر کانال | ۱۲۸۰ | ۱۷۰۴ | دانلود |
در ادامه یک دستور نمونه آمده است که میتواند به شما در دریافت لینک 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
برای اینکه بتوانید فایل باینری را برای اندروید بسازید، باید NDK r28b یا جدیدتر از آخرین نسخه پایدار را نصب کنید.
این مراحل را دنبال کنید:
- آخرین بسته پایدار NDK (فایل
zip) را از Latest Stable Version دانلود کنید. - فایل
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
مرحله ۳: اجرای مدل روی دستگاه
پس از اینکه فایل باینری با موفقیت ساخته شد، اکنون میتوانیم مدل را روی دستگاه اجرا کنیم. مطمئن شوید که دسترسی نوشتن به DEVICE_FOLDER را دارید:
برای اجرای فایل باینری روی دستگاه اندروید شما، باید چند فایل/فایل باینری را ارسال کنیم. ابتدا 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ها روی Qualcomm NPU به شرح زیر است:
مرحله ۱: مدل
محیط اجرایی LiteRT-LM برای کار با مدلهایی با فرمت .litertlm را دانلود کنید.litertlm طراحی شده است. میتوانید مدلهای سازگار را در جدول زیر پیدا و دانلود کنید.
| مدل | تراشه | کوانتیزاسیون | اندازه متن | اندازه مدل (مگابایت) | لینک دانلود |
|---|---|---|---|---|---|
| جما۳-۱بی | SM8750 | ۴ بیت در هر کانال | ۱۲۸۰ | ۶۵۸ | دانلود |
| جما۳-۱بی | SM8650 | ۴ بیت در هر کانال | ۱۲۸۰ | ۶۵۸ | دانلود |
| جما۳-۱بی | SM8550 | ۴ بیت در هر کانال | ۱۲۸۰ | ۶۵۷ | دانلود |
شما باید مدلی را دانلود کنید که با 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ها به طور مرتب اضافه میشود، بنابراین بعداً دوباره بررسی کنید تا ببینید آیا دستگاه شما پشتیبانی میشود یا خیر.
مرحله ۲: دانلود و استخراج کتابخانههای QAIRT
برای اجرای مدل با استفاده از واحد پردازش عصبی کوالکام (NPU)، به کتابخانههای زمان اجرا مرتبط روی دستگاه نیاز است. میتوانید QAIRT SDK را از لینک دانلود کرده و فایل را استخراج کنید. متغیر QAIRT_ROOT (که در مراحل بعدی از آن استفاده خواهیم کرد) را طوری تنظیم کنید که به پوشهی از حالت فشرده خارج شده که حاوی شماره نسخه است اشاره کند، برای مثال:
unzip <your_file.zip> -d ~/
QAIRT_ROOT=~/qairt/2.42.0.251225
مرحله 3: ساخت کتابخانهها/زمان اجرای LiteRT-LM
برای اینکه بتوانید فایل باینری را برای اندروید بسازید، باید 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 را اجرا کنید.
برای اینکه بتوانید فایل باینری را برای اندروید بسازید، باید 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
مرحله ۴: اجرای مدل روی دستگاه
پس از اینکه فایل باینری با موفقیت ساخته شد، اکنون میتوانیم مدل را روی دستگاه اجرا کنیم. مطمئن شوید که دسترسی نوشتن به DEVICE_FOLDER را دارید:
برای اجرای فایل باینری روی دستگاه اندروید شما، باید چند فایل/فایل باینری را ارسال کنیم. ابتدا 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 را وارد کنید. میتوانید آنها را در پوشهی از حالت فشرده خارج شده در مرحلهی ۲ $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 ارسال و فایل باینری اصلی کامپایل شده در مرحله ۳ را ارسال کنید.
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
مدیاتک نوروپایلوت
مراحل اجرای LLMها روی واحد پردازش عصبی مدیاتک به شرح زیر است:
مرحله ۱: مدل
محیط اجرایی LiteRT-LM برای کار با مدلهایی با فرمت .litertlm را دانلود کنید.litertlm طراحی شده است. میتوانید مدلهای سازگار را در جدول زیر پیدا و دانلود کنید.
| مدل | تراشه | کوانتیزاسیون | اندازه متن | اندازه مدل (مگابایت) | لینک دانلود |
|---|---|---|---|---|---|
| جما۳-۱بی | MT6989 | ۴ بیت در هر کانال | ۱۲۸۰ | ۹۸۵ | دانلود |
| جما۳-۱بی | MT6991 | ۴ بیت در هر کانال | ۱۲۸۰ | ۹۸۶ عدد | دانلود |
شما باید مدلی را دانلود کنید که با 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
برای اینکه بتوانید فایل باینری را برای اندروید بسازید، باید 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 را اجرا کنید.
برای اینکه بتوانید فایل باینری را برای اندروید بسازید، باید 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
مرحله ۳: اجرای مدل روی دستگاه
پس از اینکه فایل باینری با موفقیت ساخته شد، اکنون میتوانیم مدل را روی دستگاه اجرا کنیم. مطمئن شوید که دسترسی نوشتن به DEVICE_FOLDER را دارید:
برای اجرای فایل باینری روی دستگاه اندروید شما، باید چند فایل/فایل باینری را ارسال کنیم. ابتدا 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
اینتل اوپنوینو
با استفاده از فایل اجرایی ++C اجرا کنید
مراحل اجرای LLMها روی Intel NPU به شرح زیر است:
مرحله ۱: مدل
محیط اجرایی LiteRT-LM برای کار با مدلهایی با فرمت .litertlm را دانلود کنید.litertlm طراحی شده است. میتوانید مدلهای سازگار را در جدول زیر پیدا و دانلود کنید.
| مدل | تراشه | اندازه متن | اندازه مدل (مگابایت) | لینک دانلود |
|---|---|---|---|---|
| جما۴-۲بی | پنترلیک | ۴۰۹۶ عدد | ۲.۹۵ گیگابایت | دانلود |
| جما۴-۲بی | لونارلیک | ۴۰۹۶ عدد | ۲.۹۶ گیگابایت | دانلود |
مرحله ۲: ساخت زمان اجرای LiteRT-LM و کتابخانه LiteRT Intel Dispatch
با تنظیمات انجام شده، سعی کنید فایل باینری 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
مرحله ۳: اجرای مدل روی دستگاه
پس از اینکه فایل باینری با موفقیت ساخته شد، اکنون میتوانیم مدل را روی دستگاه اجرا کنیم. تمام فایلهای باینری، 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?"
همچنین برای مشاهدهی رابط برنامهنویسی پایتون LiteRT-LM جهت اجرای فایل litertlm با پشتیبانی NPU، به آدرس https://ai.google.dev/edge/litert-lm/python مراجعه کنید.
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?"))