LiteRT-LM का इस्तेमाल करके एलएलएम चलाना

LiteRT-LM एक क्रॉस-प्लैटफ़ॉर्म लाइब्रेरी है. इसे अलग-अलग तरह के डिवाइसों पर, भाषा मॉडल पाइपलाइन को आसानी से चलाने के लिए डिज़ाइन किया गया है. जैसे, मोबाइल फ़ोन से लेकर एम्बेड किए गए सिस्टम तक. यह डेवलपर को, भाषा मॉडल के बेहतर वर्कफ़्लो बनाने और उन्हें डिप्लॉय करने के लिए टूल उपलब्ध कराता है. अब इसमें एनपीयू को आसानी से इंटिग्रेट किया जा सकता है.

सीपीयू और जीपीयू पर एलएलएम चलाना

क्रॉस-प्लैटफ़ॉर्म डेवलपमेंट और सीपीयू/जीपीयू हार्डवेयर ऐक्सलरेशन के बारे में ज़्यादा जानने के लिए, LiteRT-LM GitHub repo देखें.

एनपीयू पर एलएलएम चलाना

न्यूरल प्रोसेसिंग यूनिट (एनपीयू), डीप लर्निंग के कामों के लिए ऑप्टिमाइज़ किए गए खास हार्डवेयर ब्लॉक उपलब्ध कराती हैं. ये चिप पर मौजूद आधुनिक सिस्टम (एसओसी) में ज़्यादा से ज़्यादा उपलब्ध होते हैं. खास तौर पर, मोबाइल डिवाइसों पर. इनकी बेहतर परफ़ॉर्मेंस की वजह से, ये एलएलएम इन्फ़्रेंस चलाने के लिए सबसे सही हैं.

एनपीयू वेंडर

LiteRT-LM, एनपीयू ऐक्सेलरेटर का इस्तेमाल करके एलएलएम चलाने की सुविधा देता है. इसके लिए, इन वेंडर के एनपीयू ऐक्सेलरेटर का इस्तेमाल किया जा सकता है. आपको जिस वेंडर का इस्तेमाल करना है उसके हिसाब से निर्देश चुनें:

क्विक स्टार्ट

शुरू करने के लिए, पहले ज़रूरी शर्तें पढ़ें और एनवायरमेंट और रिपॉज़िटरी सेट अप करने के लिए दिए गए निर्देशों का पालन करें.

इसके अलावा, अपने Android डिवाइस से इंटरैक्ट करने के लिए, पक्का करें कि आपने Android डीबग ब्रिज को ठीक से इंस्टॉल किया हो. साथ ही, आपके पास एक ऐसा डिवाइस हो जिसे adb का इस्तेमाल करके ऐक्सेस किया जा सकता हो.

ज़्यादा जानकारी के लिए, LiteRT-LM रिपॉज़िटरी में क्विक स्टार्ट सेक्शन देखें. साथ ही, litert_lm_main कमांड लाइन डेमो के बारे में ज़्यादा जानें.

Qualcomm AI Engine Direct

Qualcomm NPU पर LLM चलाने का तरीका यहां दिया गया है:

पहला चरण: .litertlm मॉडल डाउनलोड करें LiteRT-LM रनटाइम को .litertlm फ़ॉर्मैट वाले मॉडल के साथ काम करने के लिए डिज़ाइन किया गया है. नीचे दी गई टेबल में, साथ काम करने वाले मॉडल देखे और डाउनलोड किए जा सकते हैं.

मॉडल SoC क्वांटाइज़ेशन कॉन्टेक्स्ट विंडो का साइज़ मॉडल का साइज़ (एमबी) डाउनलोड करने का लिंक
Gemma3-1B SM8750 हर चैनल के लिए 4 बिट 1280 658 download
Gemma3-1B SM8650 हर चैनल के लिए 4 बिट 1280 658 download
Gemma3-1B SM8550 हर चैनल के लिए 4 बिट 1280 657 download

आपको अपने 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, सहायता टेबल में शामिल है. जनरेट किया गया लिंक, उन मॉडल के लिए काम नहीं करेगा जिनके साथ इसका इस्तेमाल नहीं किया जा सकता. एनपीयू के लिए नई सुविधाएं लगातार जोड़ी जा रही हैं. इसलिए, कुछ समय बाद फिर से देखें कि आपके डिवाइस पर ये सुविधाएं काम करती हैं या नहीं.

दूसरा चरण: QAIRT लाइब्रेरी डाउनलोड और एक्सट्रैक्ट करें Qualcomm NPU का इस्तेमाल करके मॉडल चलाने के लिए, डिवाइस पर इससे जुड़ी रनटाइम लाइब्रेरी की ज़रूरत होती है. QAIRT SDK को इस लिंक से डाउनलोड किया जा सकता है. इसके बाद, फ़ाइल को एक्सट्रैक्ट करें. वेरिएबल QAIRT_ROOT को सेट करें. इसका इस्तेमाल बाद के चरणों में किया जाएगा. इसे उस अनज़िप किए गए फ़ोल्डर की ओर ले जाएं जिसमें वर्शन नंबर शामिल है. उदाहरण के लिए:

unzip <your_file.zip> -d ~/

QAIRT_ROOT=~/qairt/2.42.0.251225

तीसरा चरण: LiteRT-LM रनटाइम / लाइब्रेरी बनाना

Linux में डेवलपमेंट करना

Android के लिए बाइनरी बनाने के लिए, https://developer.android.com/ndk/downloads#stable-downloads से NDK r28b या नया वर्शन इंस्टॉल करना होगा. इसके लिए, यह तरीका अपनाएं:

  • zip फ़ाइल को https://developer.android.com/ndk/downloads#stable-downloads से डाउनलोड करें.
  • zip फ़ाइल को अपनी पसंद की जगह पर निकालें. उदाहरण के लिए, /path/to/AndroidNDK/
  • NDK डायरेक्ट्री की ओर ले जाने के लिए ANDROID_NDK_HOME बनाएं. यह इस तरह का होना चाहिए:
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

इसके अलावा, हमें डिस्पैच एपीआई लाइब्रेरी बनानी चाहिए, ताकि LiteRT-LM रनटाइम, एनपीयू के साथ इंटरैक्ट कर सके:

bazel build --config=android_arm64 \
    @litert//litert/vendors/qualcomm/dispatch:dispatch_api_so

macOS में डेवलप करना

Xcode कमांड-लाइन टूल में clang शामिल है. अगर आपने इसे पहले इंस्टॉल नहीं किया है, तो xcode-select --install चलाएं.

Android के लिए बाइनरी बनाने के लिए, https://developer.android.com/ndk/downloads#stable-downloads से NDK r28b या नया वर्शन इंस्टॉल करना होगा. इसके लिए, यह तरीका अपनाएं:

  • .dmg फ़ाइल को https://developer.android.com/ndk/downloads#stable-downloads से डाउनलोड करें.
  • .dmg फ़ाइल खोलें और AndroidNDK* फ़ाइल को अपनी पसंद की जगह (जैसे कि /path/to/AndroidNDK/) पर ले जाएं
  • NDK डायरेक्ट्री की ओर ले जाने के लिए ANDROID_NDK_HOME बनाएं. यह इस तरह का होना चाहिए:
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

इसके अलावा, हमें डिस्पैच एपीआई लाइब्रेरी बनानी चाहिए, ताकि LiteRT-LM रनटाइम, एनपीयू के साथ इंटरैक्ट कर सके:

bazel build --config=android_arm64 \
    @litert//litert/vendors/qualcomm/dispatch:dispatch_api_so

चौथा चरण: डिवाइस पर मॉडल चलाना बाइनरी फ़ाइल बन जाने के बाद, अब हम डिवाइस पर मॉडल चलाने की कोशिश कर सकते हैं. पक्का करें कि आपके पास 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 लाइब्रेरी पुश करें. ये फ़ाइलें, अनज़िप किए गए फ़ोल्डर में मौजूद होती हैं. इस फ़ोल्डर को ऐक्सेस करने के लिए, दूसरा चरण $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

तीसरे चरण में कंपाइल की गई डिसपैच एपीआई और मुख्य बाइनरी को पुश करें.

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

MediaTek NPU पर LLM चलाने का तरीका यहां दिया गया है:

पहला चरण: .litertlm मॉडल डाउनलोड करें LiteRT-LM रनटाइम को .litertlm फ़ॉर्मैट वाले मॉडल के साथ काम करने के लिए डिज़ाइन किया गया है. नीचे दी गई टेबल में, साथ काम करने वाले मॉडल देखे और डाउनलोड किए जा सकते हैं.

मॉडल SoC क्वांटाइज़ेशन कॉन्टेक्स्ट विंडो का साइज़ मॉडल का साइज़ (एमबी) डाउनलोड करने का लिंक
Gemma3-1B MT6989 हर चैनल के लिए 4 बिट 1280 985 download
Gemma3-1B MT6991 हर चैनल के लिए 4 बिट 1280 986 download

आपको अपने 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, सहायता टेबल में शामिल है. जनरेट किया गया लिंक, उन मॉडल के लिए काम नहीं करेगा जिनके साथ इसका इस्तेमाल नहीं किया जा सकता. एनपीयू के लिए नई सुविधाएं लगातार जोड़ी जा रही हैं. इसलिए, कुछ समय बाद फिर से देखें कि आपके डिवाइस पर ये सुविधाएं काम करती हैं या नहीं.

दूसरा चरण:LiteRT-LM रनटाइम / लाइब्रेरी बनाना

Linux में डेवलपमेंट करना

Android के लिए बाइनरी बनाने के लिए, https://developer.android.com/ndk/downloads#stable-downloads से NDK r28b या नया वर्शन इंस्टॉल करना होगा. इसके लिए, यह तरीका अपनाएं:

  • zip फ़ाइल को https://developer.android.com/ndk/downloads#stable-downloads से डाउनलोड करें.
  • zip फ़ाइल को अपनी पसंद की जगह पर निकालें. उदाहरण के लिए, /path/to/AndroidNDK/
  • NDK डायरेक्ट्री की ओर ले जाने के लिए ANDROID_NDK_HOME बनाएं. यह इस तरह का होना चाहिए:
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

इसके अलावा, हमें डिस्पैच एपीआई लाइब्रेरी बनानी चाहिए, ताकि LiteRT-LM रनटाइम, एनपीयू के साथ इंटरैक्ट कर सके:

bazel build --config=android_arm64 \
    @litert//litert/vendors/mediatek/dispatch:dispatch_api_so

macOS में डेवलप करना

Xcode कमांड-लाइन टूल में clang शामिल है. अगर आपने इसे पहले इंस्टॉल नहीं किया है, तो xcode-select --install चलाएं.

Android के लिए बाइनरी बनाने के लिए, https://developer.android.com/ndk/downloads#stable-downloads से NDK r28b या नया वर्शन इंस्टॉल करना होगा. इसके लिए, यह तरीका अपनाएं:

  • .dmg फ़ाइल को https://developer.android.com/ndk/downloads#stable-downloads से डाउनलोड करें.
  • .dmg फ़ाइल खोलें और AndroidNDK* फ़ाइल को अपनी पसंद की जगह (जैसे कि /path/to/AndroidNDK/) पर ले जाएं
  • NDK डायरेक्ट्री की ओर ले जाने के लिए ANDROID_NDK_HOME बनाएं. यह इस तरह का होना चाहिए:
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

इसके अलावा, हमें डिस्पैच एपीआई लाइब्रेरी बनानी चाहिए, ताकि LiteRT-LM रनटाइम, एनपीयू के साथ इंटरैक्ट कर सके:

bazel build --config=android_arm64 \
    @litert//litert/vendors/mediatek/dispatch:dispatch_api_so

तीसरा चरण: डिवाइस पर मॉडल चलाना बाइनरी फ़ाइल बन जाने के बाद, अब हम डिवाइस पर मॉडल चलाने की कोशिश कर सकते हैं. पक्का करें कि आपके पास 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

दूसरे चरण में कंपाइल किए गए Dispatch API और मुख्य बाइनरी को पुश करें.

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