اجرای 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 Debug Bridge را به درستی نصب کرده‌اید و دستگاهی متصل دارید که با استفاده از adb قابل دسترسی باشد.

برای دستورالعمل‌های دقیق‌تر، بخش شروع سریع را در مخزن LiteRT-LM بررسی کنید و اطلاعات بیشتری در مورد نسخه آزمایشی خط فرمان litert_lm_main پیدا کنید.

موتور هوش مصنوعی کوالکام (Qualcomm AI Engine Direct)

مراحل اجرای LLMها روی Qualcomm NPU به شرح زیر است:

مرحله ۱: مدل .litertlm را دانلود کنید محیط اجرایی LiteRT-LM برای کار با مدل‌هایی با فرمت .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ها روی واحد پردازش عصبی مدیاتک به شرح زیر است:

مرحله ۱: مدل .litertlm را دانلود کنید محیط اجرایی LiteRT-LM برای کار با مدل‌هایی با فرمت .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