⚠️ গুরুত্বপূর্ণ: এলএলএম ইনফারেন্স এপিআই আপডেট
LLM ইনফারেন্স এপিআই-এর অ্যান্ড্রয়েড এবং আইওএস সংস্করণগুলো এখন অপ্রচলিত। ওয়েব অপ্রচলিত নয়।
নিরবচ্ছিন্ন সাপোর্ট ও পারফরম্যান্স নিশ্চিত করতে আপনার মোবাইল প্রোজেক্টগুলো LiteRT-LM- এ স্থানান্তর করুন।
এলএলএম ইনফারেন্স এপিআই আপনাকে লার্জ ল্যাঙ্গুয়েজ মডেল (এলএলএম) সম্পূর্ণরূপে ডিভাইসেই চালানোর সুযোগ দেয়, যা ব্যবহার করে আপনি টেক্সট তৈরি করা, স্বাভাবিক ভাষায় তথ্য সংগ্রহ করা এবং ডকুমেন্টের সারসংক্ষেপ করার মতো বিভিন্ন ধরনের কাজ সম্পাদন করতে পারেন। এই টাস্কটিতে একাধিক টেক্সট-টু-টেক্সট লার্জ ল্যাঙ্গুয়েজ মডেলের জন্য বিল্ট-ইন সাপোর্ট রয়েছে, ফলে আপনি আপনার অ্যাপ ও প্রোডাক্টে ডিভাইসের সর্বাধুনিক জেনারেটিভ এআই মডেলগুলো প্রয়োগ করতে পারবেন।
এই টাস্কটি বিভিন্ন ধরনের এলএলএম (LLM)-এর জন্য অন্তর্নির্মিত সমর্থন প্রদান করে। LiteRT কমিউনিটি পেজে হোস্ট করা মডেলগুলো মিডিয়াপাইপ-বান্ধব ফরম্যাটে পাওয়া যায় এবং এগুলোর জন্য কোনো অতিরিক্ত রূপান্তর বা সংকলন ধাপের প্রয়োজন হয় না।
আপনি LiteRT Torch ব্যবহার করে PyTorch মডেলগুলোকে মাল্টি-সিগনেচার LiteRT ( tflite ) মডেলে এক্সপোর্ট করতে পারেন, যেগুলো টাস্ক বান্ডেল (Task Bundles) তৈরির জন্য টোকেনাইজার প্যারামিটারসহ বান্ডেল করা থাকে। LiteRT Torch দিয়ে রূপান্তরিত মডেলগুলো LLM ইনফারেন্স API-এর সাথে সামঞ্জস্যপূর্ণ এবং CPU ব্যাকএন্ডে চলতে পারে, ফলে এগুলো অ্যান্ড্রয়েড এবং iOS অ্যাপ্লিকেশনের জন্য উপযুক্ত।
শুরু করুন
আপনার টার্গেট প্ল্যাটফর্মের জন্য এই ইমপ্লিমেন্টেশন গাইডগুলোর মধ্যে একটি অনুসরণ করে এই টাস্কটি ব্যবহার করা শুরু করুন। এই প্ল্যাটফর্ম-নির্দিষ্ট গাইডগুলো আপনাকে এই টাস্কটির একটি বেসিক ইমপ্লিমেন্টেশনের মধ্য দিয়ে ধাপে ধাপে নিয়ে যাবে, যেখানে একটি উপলব্ধ মডেল এবং প্রস্তাবিত কনফিগারেশন অপশনগুলো ব্যবহার করে কোডের উদাহরণ দেওয়া আছে:
ওয়েব :
অ্যান্ড্রয়েড :
আইওএস
কাজের বিবরণ
এই অংশে এই টাস্কটির সক্ষমতা, ইনপুট, আউটপুট এবং কনফিগারেশন বিকল্পগুলো বর্ণনা করা হয়েছে।
বৈশিষ্ট্য
এলএলএম ইনফারেন্স এপিআই-তে নিম্নলিখিত প্রধান বৈশিষ্ট্যগুলো রয়েছে:
- টেক্সট-টু-টেক্সট জেনারেশন - প্রদত্ত টেক্সট প্রম্পটের উপর ভিত্তি করে টেক্সট তৈরি করুন।
- এলএলএম নির্বাচন - আপনার নির্দিষ্ট ব্যবহারের জন্য অ্যাপটিকে উপযোগী করে তুলতে একাধিক মডেল প্রয়োগ করুন। এছাড়াও আপনি মডেলটিকে পুনরায় প্রশিক্ষণ দিতে এবং কাস্টমাইজড ওয়েট প্রয়োগ করতে পারেন।
- LoRA সাপোর্ট - আপনার সম্পূর্ণ ডেটাসেটে প্রশিক্ষণ দিয়ে, অথবা ওপেন-সোর্স কমিউনিটি থেকে আগে থেকে তৈরি LoRA মডেল নিয়ে LLM সক্ষমতা প্রসারিত ও কাস্টমাইজ করুন (LiteRT Torch Generative API দিয়ে রূপান্তরিত মডেলের সাথে সামঞ্জস্যপূর্ণ নয়)।
| টাস্ক ইনপুট | টাস্ক আউটপুট |
|---|---|
এলএলএম ইনফারেন্স এপিআই নিম্নলিখিত ইনপুটগুলো গ্রহণ করে:
| এলএলএম ইনফারেন্স এপিআই নিম্নলিখিত ফলাফলগুলো আউটপুট করে:
|
কনফিগারেশন বিকল্পগুলি
এই টাস্কটির নিম্নলিখিত কনফিগারেশন অপশনগুলো রয়েছে:
| বিকল্পের নাম | বর্ণনা | মান পরিসীমা | ডিফল্ট মান |
|---|---|---|---|
modelPath | প্রজেক্ট ডিরেক্টরির মধ্যে মডেলটি যেখানে সংরক্ষিত আছে তার পথ। | পথ | প্রযোজ্য নয় |
maxTokens | মডেলটি সর্বোচ্চ যতগুলো টোকেন (ইনপুট টোকেন + আউটপুট টোকেন) পরিচালনা করতে পারে। | পূর্ণসংখ্যা | ৫১২ |
topK | তৈরির প্রতিটি ধাপে মডেলটি যতগুলো টোকেন বিবেচনা করে। এটি পূর্বাভাসকে শীর্ষ k সর্বাধিক সম্ভাব্য টোকেনগুলোর মধ্যে সীমাবদ্ধ রাখে। | পূর্ণসংখ্যা | ৪০ |
temperature | তৈরির সময় যে পরিমাণ এলোমেলোভাব আনা হয়। উচ্চ তাপমাত্রা তৈরি হওয়া লেখায় অধিক সৃজনশীলতা নিয়ে আসে, অন্যদিকে নিম্ন তাপমাত্রা আরও অনুমানযোগ্য লেখা তৈরি করে। | ভাসা | ০.৮ |
randomSeed | টেক্সট তৈরির সময় ব্যবহৃত র্যান্ডম সিড। | পূর্ণসংখ্যা | ০ |
loraPath | ডিভাইসে স্থানীয়ভাবে LoRA মডেলটির সম্পূর্ণ পাথ। দ্রষ্টব্য: এটি শুধুমাত্র GPU মডেলের সাথেই সামঞ্জস্যপূর্ণ। | পথ | প্রযোজ্য নয় |
resultListener | অ্যাসিঙ্ক্রোনাসভাবে ফলাফল গ্রহণ করার জন্য রেজাল্ট লিসেনার সেট করে। শুধুমাত্র অ্যাসিঙ্ক জেনারেশন মেথড ব্যবহার করার ক্ষেত্রেই প্রযোজ্য। | প্রযোজ্য নয় | প্রযোজ্য নয় |
errorListener | একটি ঐচ্ছিক ত্রুটি লিসেনার সেট করে। | প্রযোজ্য নয় | প্রযোজ্য নয় |
মডেল
এলএলএম ইনফারেন্স এপিআই অনেক টেক্সট-টু-টেক্সট লার্জ ল্যাঙ্গুয়েজ মডেল সমর্থন করে, যার মধ্যে ব্রাউজার এবং মোবাইল ডিভাইসে চালানোর জন্য অপ্টিমাইজ করা বেশ কিছু মডেলের জন্য বিল্ট-ইন সমর্থনও রয়েছে। এই লাইটওয়েট মডেলগুলো ব্যবহার করে ইনফারেন্সগুলো সম্পূর্ণরূপে ডিভাইসেই চালানো যায়।
LLM ইনফারেন্স API ইনিশিয়ালাইজ করার আগে, একটি মডেল ডাউনলোড করে ফাইলটি আপনার প্রজেক্ট ডিরেক্টরিতে সংরক্ষণ করুন। আপনি LiteRT কমিউনিটির HuggingFace রিপোজিটরি থেকে আগে থেকে রূপান্তরিত কোনো মডেল ব্যবহার করতে পারেন, অথবা AI Edge Torch Generative Converter দিয়ে মডেলটিকে MediaPipe-উপযোগী ফরম্যাটে রূপান্তর করতে পারেন।
LLM Inference API-এর সাথে ব্যবহার করার জন্য আপনার যদি আগে থেকেই কোনো LLM না থাকে, তাহলে নিচের মডেলগুলোর মধ্যে যেকোনো একটি দিয়ে শুরু করুন।
জেমা-৩এন
জেমা-৩এন ই২বি এবং ই৪বি হলো জেমা পরিবারের হালকা ও অত্যাধুনিক ওপেন মডেলগুলোর মধ্যে সর্বাধুনিক মডেল, যা জেমিনি মডেলগুলো তৈরিতে ব্যবহৃত একই গবেষণা ও প্রযুক্তি দিয়ে নির্মিত। জেমা ৩এন মডেলগুলো স্বল্প-ক্ষমতাসম্পন্ন ডিভাইসে দক্ষতার সাথে চলার জন্য ডিজাইন করা হয়েছে। এগুলো মাল্টিমোডাল ইনপুট নিতে সক্ষম, অর্থাৎ টেক্সট, ছবি ও অডিও ইনপুট গ্রহণ করতে এবং টেক্সট আউটপুট তৈরি করতে পারে।
জেমা 3n মডেলগুলো রিসোর্সের প্রয়োজনীয়তা কমাতে সিলেক্টিভ প্যারামিটার অ্যাক্টিভেশন প্রযুক্তি ব্যবহার করে। এই কৌশলটি মডেলগুলোকে 2B এবং 4B প্যারামিটারের কার্যকর আকারে কাজ করতে সক্ষম করে, যা তাদের অন্তর্ভুক্ত মোট প্যারামিটার সংখ্যার চেয়ে কম।
HuggingFace-এর Gemma-3n E2B এবং E4B মডেলগুলো .litertlm ফরম্যাটে পাওয়া যায় এবং Android ও Web-এর জন্য LLM Inference API-এর সাথে ব্যবহারের জন্য প্রস্তুত।
জেমা-৩ ১বি
জেমা-৩ ১বি হলো জেমা পরিবারের হালকা ওজনের, অত্যাধুনিক ওপেন মডেলগুলোর মধ্যে সবচেয়ে হালকা মডেল, যা জেমিনি মডেলগুলো তৈরিতে ব্যবহৃত একই গবেষণা ও প্রযুক্তি দিয়ে নির্মিত। এই মডেলে ১বি প্যারামিটার এবং ওপেন ওজন রয়েছে।
HuggingFace- এর Gemma-3 1B মডেলটি .task / .litertlm ফরম্যাটে পাওয়া যায় এবং অ্যান্ড্রয়েড ও ওয়েব অ্যাপ্লিকেশনের জন্য LLM Inference API-এর সাথে ব্যবহারের জন্য প্রস্তুত।
LLM ইনফারেন্স API সহ Gemma-3 1B চালানোর সময়, নিম্নলিখিত অপশনগুলি যথাযথভাবে কনফিগার করুন:
-
preferredBackend:CPUঅথবাGPUব্যাকএন্ডের মধ্যে যেকোনো একটি বেছে নিতে এই অপশনটি ব্যবহার করুন। এই অপশনটি শুধুমাত্র অ্যান্ড্রয়েডের জন্য উপলব্ধ। -
supportedLoraRanks: Gemma-3 1B মডেলের সাথে Low-Rank Adaptation (LoRA) সমর্থন করার জন্য LLM Inference API কনফিগার করা যাবে না।supportedLoraRanksবাloraRanksঅপশনগুলো ব্যবহার করবেন না। -
maxTokens:maxTokensএর মান অবশ্যই মডেলে অন্তর্নির্মিত কনটেক্সট সাইজের সাথে মিলতে হবে। এটিকে কী-ভ্যালু (KV) ক্যাশে বা কনটেক্সট লেংথ নামেও উল্লেখ করা যেতে পারে। -
numResponses: এর মান সর্বদা ১ হতে হবে। এই অপশনটি শুধুমাত্র ওয়েবের জন্য উপলব্ধ।
ওয়েব অ্যাপ্লিকেশনে Gemma-3 1B চালানোর সময়, ইনিশিয়ালাইজেশনের কারণে বর্তমান থ্রেডে একটি দীর্ঘ ব্লক তৈরি হতে পারে। সম্ভব হলে, মডেলটি সবসময় একটি ওয়ার্কার থ্রেড থেকে চালান।
জেমা-২ ২বি
জেমা-২ ২বি হলো জেমা-২ এর একটি ২বি সংস্করণ, এবং এটি সকল প্ল্যাটফর্মে কাজ করে।
মডেলটিতে 2B প্যারামিটার এবং ওপেন ওয়েট রয়েছে। জেমা-২ ২বি তার শ্রেণীর মডেলগুলোর মধ্যে অত্যাধুনিক যুক্তি দক্ষতার জন্য পরিচিত।
পাইটর্চ মডেল রূপান্তর
LiteRT Torch Generative API ব্যবহার করে PyTorch জেনারেটিভ মডেলগুলোকে MediaPipe-উপযোগী ফরম্যাটে রূপান্তর করা যায়। আপনি এই API ব্যবহার করে PyTorch মডেলগুলোকে মাল্টি-সিগনেচার LiteRT (TensorFlow Lite) মডেলে রূপান্তর করতে পারেন। মডেল ম্যাপিং এবং এক্সপোর্ট করার বিষয়ে আরও বিস্তারিত জানতে LiteRT Torch GitHub পেজটি দেখুন।
LiteRT Torch Generative API ব্যবহার করে একটি PyTorch মডেল রূপান্তর করতে নিম্নলিখিত ধাপগুলো অনুসরণ করতে হয়:
- পাইটর্চ মডেল চেকপয়েন্টগুলো ডাউনলোড করুন।
- LiteRT Torch Generative API ব্যবহার করে মডেলটিকে একটি MediaPipe-উপযোগী ফাইল ফরম্যাটে (
.tflite) তৈরি, রূপান্তর এবং কোয়ান্টাইজ করুন। - tflite ফাইল এবং মডেল টোকেনাইজার থেকে একটি টাস্ক বান্ডেল (
.task/.litertlm) তৈরি করুন।
টর্চ জেনারেটিভ কনভার্টারটি শুধুমাত্র সিপিইউ-এর জন্য রূপান্তর করে এবং এর জন্য কমপক্ষে ৬৪ জিবি র্যামসহ একটি লিনাক্স মেশিন প্রয়োজন।
একটি টাস্ক বান্ডেল তৈরি করতে, বান্ডেলিং স্ক্রিপ্টটি ব্যবহার করুন। বান্ডেলিং প্রক্রিয়াটি এন্ড-টু-এন্ড ইনফারেন্স চালানোর জন্য প্রয়োজনীয় অতিরিক্ত মেটাডেটা (যেমন, টোকেনাইজার প্যারামিটার) সহ ম্যাপ করা মডেলটিকে প্যাক করে।
মডেল বান্ডলিং প্রক্রিয়ার জন্য MediaPipe PyPI প্যাকেজটি প্রয়োজন। রূপান্তর স্ক্রিপ্টটি 0.10.14 পরবর্তী সমস্ত MediaPipe প্যাকেজে উপলব্ধ।
নিম্নলিখিতগুলি ব্যবহার করে নির্ভরতাগুলি ইনস্টল এবং ইম্পোর্ট করুন:
$ python3 -m pip install mediapipe
মডেলটি বান্ডল করতে genai.bundler লাইব্রেরিটি ব্যবহার করুন:
import mediapipe as mp
from mediapipe.tasks.python.genai import bundler
config = bundler.BundleConfig(
tflite_model=TFLITE_MODEL,
tokenizer_model=TOKENIZER_MODEL,
start_token=START_TOKEN,
stop_tokens=STOP_TOKENS,
output_filename=OUTPUT_FILENAME,
enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
| প্যারামিটার | বর্ণনা | গৃহীত মান |
|---|---|---|
tflite_model | এআই এজ-এর পথ টিএফলাইট মডেলটি রপ্তানি করেছে। | পথ |
tokenizer_model | SentencePiece টোকেনাইজার মডেলের পথ। | পথ |
start_token | মডেল-নির্দিষ্ট স্টার্ট টোকেন। স্টার্ট টোকেনটি অবশ্যই প্রদত্ত টোকেনাইজার মডেলে উপস্থিত থাকতে হবে। | স্ট্রিং |
stop_tokens | মডেল-নির্দিষ্ট স্টপ টোকেন। স্টপ টোকেনগুলো অবশ্যই প্রদত্ত টোকেনাইজার মডেলে উপস্থিত থাকতে হবে। | তালিকা[স্ট্রিং] |
output_filename | আউটপুট টাস্ক বান্ডেল ফাইলের নাম। | পথ |
LoRA কাস্টমাইজেশন
বৃহৎ ল্যাঙ্গুয়েজ মডেলের জন্য লো-র্যাঙ্ক অ্যাডাপটেশন (LoRA) সমর্থন করতে মিডিয়াপাইপ এলএলএম ইনফারেন্স এপিআই কনফিগার করা যেতে পারে। ফাইন-টিউনড LoRA মডেল ব্যবহার করে, ডেভেলপাররা একটি সাশ্রয়ী প্রশিক্ষণ প্রক্রিয়ার মাধ্যমে এলএলএম-এর আচরণ কাস্টমাইজ করতে পারেন।GPU ব্যাকএন্ডের জন্য LLM ইনফারেন্স API-এর LoRA সাপোর্ট সকল জেমা ভ্যারিয়েন্ট এবং ফাই-২ মডেলে কাজ করে, যেখানে LoRA ওয়েট শুধুমাত্র অ্যাটেনশন লেয়ারের জন্য প্রযোজ্য। এই প্রাথমিক বাস্তবায়নটি ভবিষ্যতের উন্নয়নের জন্য একটি পরীক্ষামূলক API হিসেবে কাজ করে এবং আসন্ন আপডেটগুলিতে আরও মডেল ও বিভিন্ন ধরণের লেয়ার সাপোর্ট করার পরিকল্পনা রয়েছে।
LoRA মডেল প্রস্তুত করুন
আপনার নিজস্ব ডেটাসেটে সমর্থিত মডেল টাইপ, যেমন জেমা (Gemma) বা ফাই-২ (Phi-2) ব্যবহার করে একটি ফাইন-টিউনড লোরা (LoRA) মডেলকে প্রশিক্ষণ দিতে হাগিংফেস (HuggingFace)-এর নির্দেশাবলী অনুসরণ করুন। জেমা-২ ২বি (Gemma-2 2B) এবং জেমা ২বি (Gemma 2B) ও ফাই-২ (Phi-2) উভয় মডেলই হাগিংফেস-এ সেফটেনসরস (safetensors) ফরম্যাটে পাওয়া যায়। যেহেতু এলএলএম ইনফারেন্স এপিআই (LLM Inference API) শুধুমাত্র অ্যাটেনশন লেয়ারে লোরা (LoRA) সমর্থন করে, তাই LoraConfig তৈরি করার সময় কেবল অ্যাটেনশন লেয়ারগুলো নির্দিষ্ট করুন, যেমনটি নিচে দেখানো হলো:
# For Gemma
from peft import LoraConfig
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
)
# For Phi-2
config = LoraConfig(
r=LORA_RANK,
target_modules=["q_proj", "v_proj", "k_proj", "dense"],
)
পরীক্ষার জন্য, হাগিংফেসে সর্বজনীনভাবে প্রবেশযোগ্য কিছু ফাইন-টিউনড লোরা মডেল রয়েছে যা এলএলএম ইনফারেন্স এপিআই (LLM Inference API)-এর সাথে সামঞ্জস্যপূর্ণ। উদাহরণস্বরূপ, জেমা-২বি (Gemma-2B)-এর জন্য monsterapi/gemma-2b-lora-maths-orca-200k এবং ফাই-২ (Phi-2)-এর জন্য lole25/phi-2-sft-ultrachat-lora ।
প্রস্তুতকৃত ডেটাসেটে প্রশিক্ষণ দেওয়ার পর এবং মডেলটি সংরক্ষণ করার পরে, আপনি একটি adapter_model.safetensors ফাইল পাবেন, যেটিতে ফাইন-টিউন করা LoRA মডেলের ওয়েটগুলো থাকে। এই safetensors ফাইলটি হলো LoRA চেকপয়েন্ট, যা মডেল রূপান্তরের সময় ব্যবহৃত হয়।
পরবর্তী পদক্ষেপ হিসেবে, আপনাকে MediaPipe পাইথন প্যাকেজ ব্যবহার করে মডেলের ওয়েটগুলোকে একটি TensorFlow Lite Flatbuffer-এ রূপান্তর করতে হবে। ConversionConfig এ বেস মডেল অপশনগুলোর পাশাপাশি অতিরিক্ত LoRA অপশনগুলোও উল্লেখ করতে হবে। লক্ষ্য করুন যে, যেহেতু API শুধুমাত্র GPU-এর মাধ্যমে LoRA ইনফারেন্স সমর্থন করে, তাই ব্যাকএন্ড অবশ্যই 'gpu' তে সেট করতে হবে।
import mediapipe as mp
from mediapipe.tasks.python.genai import converter
config = converter.ConversionConfig(
# Other params related to base model
...
# Must use gpu backend for LoRA conversion
backend='gpu',
# LoRA related params
lora_ckpt=LORA_CKPT,
lora_rank=LORA_RANK,
lora_output_tflite_file=LORA_OUTPUT_TFLITE_FILE,
)
converter.convert_checkpoint(config)
কনভার্টারটি দুটি TFLite ফ্ল্যাটবাফার ফাইল আউটপুট করবে, একটি বেস মডেলের জন্য এবং অন্যটি LoRA মডেলের জন্য।
LoRA মডেল অনুমান
ওয়েব, অ্যান্ড্রয়েড এবং আইওএস এলএলএম ইনফারেন্স এপিআই-কে লোরা মডেল ইনফারেন্স সমর্থন করার জন্য আপডেট করা হয়েছে।
অ্যান্ড্রয়েড ইনিশিয়ালাইজেশনের সময় স্ট্যাটিক LoRA সমর্থন করে। একটি LoRA মডেল লোড করার জন্য, ব্যবহারকারীরা LoRA মডেলের পাথ এবং বেস LLM উল্লেখ করেন।// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
.setModelPath('<path to base model>')
.setMaxTokens(1000)
.setTopK(40)
.setTemperature(0.8)
.setRandomSeed(101)
.setLoraPath('<path to LoRA model>')
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)
LoRA-এর সাথে LLM ইনফারেন্স চালানোর জন্য, বেস মডেলের মতোই generateResponse() বা generateResponseAsync() মেথডগুলো ব্যবহার করুন।