LiteRT-LM ব্যবহার করে LLM চালান

LiteRT-LM হলো একটি ক্রস-প্ল্যাটফর্ম লাইব্রেরি, যা মোবাইল ফোন থেকে শুরু করে এমবেডেড সিস্টেম পর্যন্ত বিস্তৃত পরিসরের ডিভাইসে দক্ষতার সাথে ল্যাঙ্গুয়েজ মডেল পাইপলাইন চালানোর জন্য ডিজাইন করা হয়েছে। এটি ডেভেলপারদের অত্যাধুনিক ল্যাঙ্গুয়েজ মডেল ওয়ার্কফ্লো তৈরি ও স্থাপন করার জন্য প্রয়োজনীয় টুলস সরবরাহ করে, যা এখন নির্বিঘ্ন NPU ইন্টিগ্রেশন সহ পাওয়া যায়।

সিপিইউ এবং জিপিইউ-তে এলএলএম চালান

ক্রস-প্ল্যাটফর্ম ডেভেলপমেন্ট এবং সিপিইউ/জিপিইউ হার্ডওয়্যার অ্যাক্সিলারেশন সম্পর্কিত বিস্তারিত নির্দেশাবলীর জন্য LiteRT-LM গিটহাব রিপো দেখুন।

NPU-তে LLM চালান

নিউরাল প্রসেসিং ইউনিট (এনপিইউ) হলো ডিপ লার্নিং ওয়ার্কলোডের জন্য অপ্টিমাইজ করা বিশেষায়িত হার্ডওয়্যার ব্লক। আধুনিক সিস্টেম অন এ চিপ (এসওসি)-তে, বিশেষ করে মোবাইল ডিভাইসে, এগুলোর সহজলভ্যতা ক্রমশ বাড়ছে। এদের উচ্চ কার্যক্ষমতার কারণে এগুলো এলএলএম ইনফারেন্স চালানোর জন্য অত্যন্ত উপযুক্ত।

এনপিইউ বিক্রেতারা

LiteRT-LM নিম্নলিখিত ভেন্ডরগুলির সাথে NPU অ্যাক্সিলারেশন ব্যবহার করে LLM চালানো সমর্থন করে। আপনি কোন ভেন্ডরটি চেষ্টা করতে চান তার উপর নির্ভর করে নির্দেশাবলী বেছে নিন:

দ্রুত শুরু

শুরু করার জন্য, প্রথমে পরিবেশ এবং রিপোজিটরি সেট আপ করতে পূর্বশর্ত নির্দেশাবলী অনুসরণ করুন।

এছাড়াও, আপনার অ্যান্ড্রয়েড ডিভাইসের সাথে যোগাযোগ করতে, নিশ্চিত করুন যে আপনি অ্যান্ড্রয়েড ডিবাগ ব্রিজ সঠিকভাবে ইনস্টল করেছেন এবং এমন একটি সংযুক্ত ডিভাইস রয়েছে যা adb ব্যবহার করে অ্যাক্সেস করা যায়।

আরও বিস্তারিত নির্দেশাবলীর জন্য, LiteRT-LM রিপোজিটরির কুইক স্টার্ট সেকশনটি দেখুন এবং litert_lm_main কমান্ড লাইন ডেমো সম্পর্কে আরও তথ্য জানুন।

কোয়ালকম এআই ইঞ্জিন ডাইরেক্ট

কোয়ালকম এনপিইউ-তে এলএলএমগুলো চালানোর ধাপগুলো নিম্নরূপ:

ধাপ ১: .litertlm মডেলটি ডাউনলোড করুন। LiteRT-LM রানটাইমটি .litertlm ফরম্যাটের মডেলগুলোর সাথে কাজ করার জন্য ডিজাইন করা হয়েছে। আপনি নিচের সারণি থেকে সামঞ্জস্যপূর্ণ মডেলগুলো খুঁজে ডাউনলোড করতে পারেন।

মডেল SoC কোয়ান্টাইজেশন প্রসঙ্গের আকার মডেলের আকার (এমবি) ডাউনলোড লিঙ্ক
জেমা৩-১বি এসএম৮৭৫০ প্রতি চ্যানেলে ৪-বিট ১২৮০ ৬৫৮ ডাউনলোড
জেমা৩-১বি এসএম৮৬৫০ প্রতি চ্যানেলে ৪-বিট ১২৮০ ৬৫৮ ডাউনলোড
জেমা৩-১বি এসএম৮৫৫০ প্রতি চ্যানেলে ৪-বিট ১২৮০ ৬৫৭ ডাউনলোড

আপনাকে আপনার 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 লাইব্রেরিগুলো ডাউনলোড এবং এক্সট্র্যাক্ট করুন। কোয়ালকম এনপিইউ ব্যবহার করে মডেলটি চালানোর জন্য, ডিভাইসে এর সাথে সম্পর্কিত রানটাইম লাইব্রেরি থাকা প্রয়োজন। লিঙ্ক থেকে QAIRT SDK ডাউনলোড করে ফাইলটি এক্সট্র্যাক্ট করা যেতে পারে। আনজিপ করা ফোল্ডারটিকে নির্দেশ করার জন্য QAIRT_ROOT ভেরিয়েবলটি সেট করুন (পরবর্তী ধাপগুলিতে এটি ব্যবহৃত হবে), যেটিতে ভার্সন নম্বরটি রয়েছে, উদাহরণস্বরূপ:

unzip <your_file.zip> -d ~/

QAIRT_ROOT=~/qairt/2.42.0.251225

ধাপ ৩: LiteRT-LM রানটাইম / লাইব্রেরিগুলো বিল্ড করুন

লিনাক্সে ডেভেলপ করুন

অ্যান্ড্রয়েডের জন্য বাইনারি বিল্ড করতে হলে, https://developer.android.com/ndk/downloads#stable-downloads থেকে NDK r28b বা তার নতুন সংস্করণ ইনস্টল করতে হবে। নির্দিষ্ট ধাপগুলো হলো:

  • https://developer.android.com/ndk/downloads#stable-downloads থেকে zip ফাইলটি ডাউনলোড করুন।
  • 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

এছাড়াও, LiteRT-LM রানটাইম যাতে NPU-এর সাথে যোগাযোগ করতে পারে, তার জন্য আমাদের ডিসপ্যাচ এপিআই লাইব্রেরিটি বিল্ড করতে হবে:

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

ম্যাকওএস-এ ডেভেলপ করুন

Xcode কমান্ড লাইন টুলগুলোর মধ্যে clang অন্তর্ভুক্ত। যদি আগে থেকে ইনস্টল করা না থাকে, তাহলে xcode-select --install চালান।

অ্যান্ড্রয়েডের জন্য বাইনারি বিল্ড করতে হলে, https://developer.android.com/ndk/downloads#stable-downloads থেকে NDK r28b বা তার নতুন সংস্করণ ইনস্টল করতে হবে। নির্দিষ্ট ধাপগুলো হলো:

  • https://developer.android.com/ndk/downloads#stable-downloads থেকে .dmg ফাইলটি ডাউনলোড করুন।
  • .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

এছাড়াও, 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

ধাপ ৩-এ কম্পাইল করা ডিসপ্যাচ এপিআই এবং মূল বাইনারিটি পুশ করুন।

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

মিডিয়াটেক নিউরোপাইলট

মিডিয়াটেক এনপিইউ-তে এলএলএমগুলো চালানোর ধাপগুলো নিম্নরূপ:

ধাপ ১: .litertlm মডেলটি ডাউনলোড করুন। LiteRT-LM রানটাইমটি .litertlm ফরম্যাটের মডেলগুলোর সাথে কাজ করার জন্য ডিজাইন করা হয়েছে। আপনি নিচের সারণি থেকে সামঞ্জস্যপূর্ণ মডেলগুলো খুঁজে ডাউনলোড করতে পারেন।

মডেল SoC কোয়ান্টাইজেশন প্রসঙ্গের আকার মডেলের আকার (এমবি) ডাউনলোড লিঙ্ক
জেমা৩-১বি এমটি৬৯৮৯ প্রতি চ্যানেলে ৪-বিট ১২৮০ ৯৮৫ ডাউনলোড
জেমা৩-১বি এমটি৬৯৯১ প্রতি চ্যানেলে ৪-বিট ১২৮০ ৯৮৬ ডাউনলোড

আপনাকে আপনার 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 রানটাইম / লাইব্রেরিগুলো বিল্ড করুন

লিনাক্সে ডেভেলপ করুন

অ্যান্ড্রয়েডের জন্য বাইনারি বিল্ড করতে হলে, https://developer.android.com/ndk/downloads#stable-downloads থেকে NDK r28b বা তার নতুন সংস্করণ ইনস্টল করতে হবে। নির্দিষ্ট ধাপগুলো হলো:

  • https://developer.android.com/ndk/downloads#stable-downloads থেকে zip ফাইলটি ডাউনলোড করুন।
  • 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

এছাড়াও, LiteRT-LM রানটাইম যাতে NPU-এর সাথে যোগাযোগ করতে পারে, তার জন্য আমাদের ডিসপ্যাচ এপিআই লাইব্রেরিটি বিল্ড করতে হবে:

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

ম্যাকওএস-এ ডেভেলপ করুন

Xcode কমান্ড লাইন টুলগুলোর মধ্যে clang অন্তর্ভুক্ত। যদি আগে থেকে ইনস্টল করা না থাকে, তাহলে xcode-select --install চালান।

অ্যান্ড্রয়েডের জন্য বাইনারি বিল্ড করতে হলে, https://developer.android.com/ndk/downloads#stable-downloads থেকে NDK r28b বা তার নতুন সংস্করণ ইনস্টল করতে হবে। নির্দিষ্ট ধাপগুলো হলো:

  • https://developer.android.com/ndk/downloads#stable-downloads থেকে .dmg ফাইলটি ডাউনলোড করুন।
  • .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

এছাড়াও, 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

ধাপ ২-এ কম্পাইল করা ডিসপ্যাচ এপিআই এবং মূল বাইনারিটি পুশ করুন।

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

ইন্টেল ওপেনভিনো

ইন্টেল এনপিইউ-তে এলএলএম চালানোর ধাপগুলো নিম্নরূপ:

ধাপ ১: .litertlm মডেলটি ডাউনলোড করুন। LiteRT-LM রানটাইমটি .litertlm ফরম্যাটের মডেলগুলোর সাথে কাজ করার জন্য ডিজাইন করা হয়েছে। আপনি নিচের সারণি থেকে সামঞ্জস্যপূর্ণ মডেলগুলো খুঁজে ডাউনলোড করতে পারেন।

মডেল SoC কোয়ান্টাইজেশন প্রসঙ্গের আকার মডেলের আকার (এমবি) ডাউনলোড লিঙ্ক
জেমা৩-২বি প্যান্থারলেক ... ৪০৯৬ ... TODO ডাউনলোড লিঙ্ক

ধাপ ২: LiteRT-LM রানটাইম এবং LiteRT ইন্টেল ডিসপ্যাচ লাইব্রেরি বিল্ড করুন

উইন্ডোজে ডেভেলপ করুন

সেটআপটি সম্পন্ন হলে, litert_lm_main বাইনারিটি বিল্ড করার চেষ্টা করুন:

bazel --output_base=C:\bzl_lrtlm build --define=DISABLE_HUGGINGFACE_TOKENIZER=1 --config=windows //runtime/engine:litert_lm_main

এছাড়াও, LiteRT-LM রানটাইম যাতে NPU-এর সাথে যোগাযোগ করতে পারে, তার জন্য আমাদের ডিসপ্যাচ এপিআই লাইব্রেরিটি বিল্ড করতে হবে:

bazel --output_base=C:\bzl_lrtlm build --config=windows \
    @litert//litert/vendors/intel_openvino/dispatch:LiteRtDispatch

ধাপ ৩: ডিভাইসে মডেলটি চালান বাইনারিটি সফলভাবে বিল্ড হয়ে গেলে, আমরা এখন ডিভাইসে মডেলটি চালানোর চেষ্টা করতে পারি। আমরা সমস্ত বাইনারি, ডিএলএল এবং মডেলকে একটি '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?" --use_hw_masking_for_npu=false