ওয়েবের জন্য এলএলএম ইনফারেন্স গাইড

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

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

আপনি MediaPipe Studio ডেমোতে এই কাজটি বাস্তবে দেখতে পারেন। এই কাজটি সম্পাদনের ক্ষমতা, মডেল এবং কনফিগারেশন বিকল্পগুলো সম্পর্কে আরও তথ্যের জন্য, ওভারভিউ দেখুন।

কুইকস্টার্ট

আপনার ওয়েব অ্যাপ্লিকেশনে LLM ইনফারেন্স এপিআই যোগ করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন। LLM ইনফারেন্স এপিআই-এর জন্য WebGPU সামঞ্জস্যপূর্ণ একটি ওয়েব ব্রাউজার প্রয়োজন। সামঞ্জস্যপূর্ণ ব্রাউজারগুলোর সম্পূর্ণ তালিকার জন্য, জিপিইউ ব্রাউজার সামঞ্জস্যতা দেখুন।

নির্ভরতা যোগ করুন

এলএলএম ইনফারেন্স এপিআই @mediapipe/tasks-genai প্যাকেজটি ব্যবহার করে।

লোকাল স্টেজিংয়ের জন্য প্রয়োজনীয় প্যাকেজগুলো ইনস্টল করুন:

npm install @mediapipe/tasks-genai

সার্ভারে ডেপ্লয় করার জন্য, jsDelivr-এর মতো একটি কন্টেন্ট ডেলিভারি নেটওয়ার্ক (CDN) পরিষেবা ব্যবহার করে সরাসরি আপনার HTML পেজে কোড যোগ করুন:

<head>
  <script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/genai_bundle.cjs"
    crossorigin="anonymous"></script>
</head>

একটি মডেল ডাউনলোড করুন

HuggingFace থেকে Gemma-3n E4B বা E2B ডাউনলোড করুন। যেসব মডেলের নামে "-Web" লেখা থাকে, সেগুলো বিশেষভাবে ওয়েব ব্যবহারের জন্য রূপান্তরিত করা হয়, তাই সবসময় এগুলোর মধ্যে একটি ব্যবহার করার জন্য বিশেষভাবে সুপারিশ করা হয়।

উপলব্ধ মডেলগুলো সম্পর্কে আরও তথ্যের জন্য, মডেল ডকুমেন্টেশন দেখুন, অথবা আমাদের হাগিংফেস কমিউনিটি পেজ ব্রাউজ করুন, যেখানে সদ্য প্রকাশিত Gemma 4 E2B এবং E4B-এর পাশাপাশি ডকুমেন্টেশনে অন্তর্ভুক্ত নয় এমন আরও বেশ কিছু Gemma 3 ভ্যারিয়েন্ট রয়েছে, যেগুলোকে বিশেষভাবে ওয়েবের জন্য রূপান্তর করা হয়েছে, যেমন 270M , 4B , 12B , 27B , এবং MedGemma-27B-Text

মডেলটি আপনার প্রজেক্ট ডিরেক্টরির মধ্যে সংরক্ষণ করুন:

<dev-project-root>/assets/gemma-3n-E4B-it-int4-Web.litertlm

baseOptions অবজেক্টের modelAssetPath প্যারামিটার ব্যবহার করে মডেলের পাথ নির্দিষ্ট করুন:

baseOptions: { modelAssetPath: `/assets/gemma-3n-E4B-it-int4-Web.litertlm`}

টাস্কটি শুরু করুন

মৌলিক কনফিগারেশন বিকল্পগুলির সাহায্যে টাস্কটি শুরু করুন:

const genai = await FilesetResolver.forGenAiTasks(
    // path/to/wasm/root
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm"
);
llmInference = await LlmInference.createFromOptions(genai, {
    baseOptions: {
        modelAssetPath: '/assets/gemma-3n-E4B-it-int4-Web.litertlm'
    },
    maxTokens: 1000,
    topK: 40,
    temperature: 0.8,
    randomSeed: 101
});

টাস্কটি চালান

অনুমান শুরু করতে generateResponse() ফাংশনটি ব্যবহার করুন।

const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;

প্রতিক্রিয়াটি স্ট্রিম করতে, নিম্নলিখিতগুলি ব্যবহার করুন:

llmInference.generateResponse(
  inputPrompt,
  (partialResult, done) => {
        document.getElementById('output').textContent += partialResult;
});

মাল্টিমোডাল প্রম্পটিং

জেমা-3n মডেলের জন্য, LLM ইনফারেন্স এপিআই ওয়েব এপিআইগুলো মাল্টিমোডাল প্রম্পটিং সমর্থন করে। মাল্টিমোডালিটি সক্রিয় থাকলে, ব্যবহারকারীরা তাদের প্রম্পটে ছবি, অডিও এবং টেক্সটের একটি ক্রমিক সংমিশ্রণ অন্তর্ভুক্ত করতে পারেন। এরপর LLM একটি টেক্সট প্রতিক্রিয়া প্রদান করে।

শুরু করার জন্য, মিডিয়াপাইপ- এবং ওয়েব-উপযোগী ফরম্যাটে থাকা Gemma-3n E4B অথবা Gemma-3n E2B ব্যবহার করুন। আরও তথ্যের জন্য, Gemma-3n ডকুমেন্টেশন দেখুন।

ভিশন সাপোর্ট সক্রিয় করতে, maxNumImages মান ধনাত্মক কিনা তা নিশ্চিত করুন। এটি নির্ধারণ করে যে LLM একটি একক প্রম্পটে সর্বাধিক কতগুলি ছবির অংশ প্রক্রিয়া করতে পারবে।

অডিও সাপোর্ট চালু করতে, নিশ্চিত করুন যে supportAudio true সেট করা আছে।

llmInference = await LlmInference.createFromOptions(genai, {
    baseOptions: {
        modelAssetPath: '/assets/gemma-3n-E4B-it-int4-Web.litertlm'
    },
    maxTokens: 1000,
    topK: 40,
    temperature: 0.8,
    randomSeed: 101,
    maxNumImages: 5,
    supportAudio: true,
});

এখন আগের মতোই প্রতিক্রিয়া তৈরি করা যাবে, তবে এক্ষেত্রে স্ট্রিং, ছবি এবং অডিও ডেটার একটি ক্রমবিন্যস্ত অ্যারে ব্যবহার করতে হবে:

const response = await llmInference.generateResponse([
  '<start_of_turn>user\n',
  'Describe ',
  {imageSource: '/assets/test_image.png'},
  ' and then transcribe ',
  {audioSource: '/assets/test_audio.wav'},
  '<end_of_turn>\n<start_of_turn>model\n',
]);

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

নমুনা অ্যাপ্লিকেশন

নমুনা অ্যাপ্লিকেশনটি হলো LLM ইনফারেন্স এপিআই ব্যবহার করে তৈরি একটি সাধারণ ওয়েব টেক্সট জেনারেশন অ্যাপের উদাহরণ। আপনি আপনার নিজের ওয়েব অ্যাপ তৈরির জন্য এটিকে একটি সূচনা বিন্দু হিসেবে ব্যবহার করতে পারেন, অথবা বিদ্যমান কোনো অ্যাপ পরিবর্তন করার সময় এর সাহায্য নিতে পারেন। উদাহরণ কোডটি গিটহাবে হোস্ট করা আছে।

নিম্নলিখিত কমান্ডটি ব্যবহার করে গিট রিপোজিটরিটি ক্লোন করুন:

git clone https://github.com/google-ai-edge/mediapipe-samples

আরও তথ্যের জন্য, ওয়েব সেটআপ গাইড দেখুন।

কনফিগারেশন বিকল্পগুলি

একটি ওয়েব অ্যাপ সেট আপ করতে নিম্নলিখিত কনফিগারেশন বিকল্পগুলি ব্যবহার করুন:

বিকল্পের নাম বর্ণনা মান পরিসীমা ডিফল্ট মান
modelPath প্রজেক্ট ডিরেক্টরির মধ্যে মডেলটি যেখানে সংরক্ষিত আছে তার পথ। পথ প্রযোজ্য নয়
maxTokens মডেলটি সর্বোচ্চ যতগুলো টোকেন (ইনপুট টোকেন + আউটপুট টোকেন) পরিচালনা করতে পারে। পূর্ণসংখ্যা ৫১২
topK তৈরির প্রতিটি ধাপে মডেলটি যতগুলো টোকেন বিবেচনা করে। এটি পূর্বাভাসকে শীর্ষ k সর্বাধিক সম্ভাব্য টোকেনগুলোর মধ্যে সীমাবদ্ধ রাখে। পূর্ণসংখ্যা ৪০
temperature তৈরির সময় যে পরিমাণ এলোমেলোভাব আনা হয়। উচ্চ তাপমাত্রা তৈরি হওয়া লেখায় অধিক সৃজনশীলতা নিয়ে আসে, অন্যদিকে নিম্ন তাপমাত্রা আরও অনুমানযোগ্য লেখা তৈরি করে। ভাসা ০.৮
randomSeed টেক্সট তৈরির সময় ব্যবহৃত র‍্যান্ডম সিড। পূর্ণসংখ্যা
loraRanks রানটাইমের সময় LoRA মডেলগুলো যে LoRA র‍্যাঙ্কগুলো ব্যবহার করবে। দ্রষ্টব্য: এটি শুধুমাত্র GPU মডেলের সাথেই সামঞ্জস্যপূর্ণ। পূর্ণসংখ্যা অ্যারে প্রযোজ্য নয়

মডেল রূপান্তর

এলএলএম ইনফারেন্স এপিআই নিম্নলিখিত ধরণের মডেলগুলির সাথে সামঞ্জস্যপূর্ণ, যার মধ্যে কয়েকটির জন্য মডেল রূপান্তরের প্রয়োজন হয়। আপনার মডেলের জন্য প্রয়োজনীয় স্টেপস মেথড শনাক্ত করতে সারণিটি ব্যবহার করুন।

মডেল রূপান্তর পদ্ধতি সামঞ্জস্যপূর্ণ প্ল্যাটফর্ম ফাইলের ধরন
জেমা-৩ ১বি কোন রূপান্তরের প্রয়োজন নেই অ্যান্ড্রয়েড, ওয়েব কাজ
Gemma 2B, Gemma 7B, Gemma-2 2B কোন রূপান্তরের প্রয়োজন নেই অ্যান্ড্রয়েড, আইওএস, ওয়েব .বিন
ফাই-২, স্টেবলএলএম, ফ্যালকন মিডিয়াপাইপ রূপান্তর স্ক্রিপ্ট অ্যান্ড্রয়েড, আইওএস, ওয়েব .বিন
সমস্ত পাইটর্চ এলএলএম মডেল LiteRT টর্চ জেনারেটিভ লাইব্রেরি অ্যান্ড্রয়েড, আইওএস কাজ

অন্যান্য মডেল কীভাবে রূপান্তর করবেন তা জানতে, মডেল রূপান্তর বিভাগটি দেখুন।

LoRA কাস্টমাইজেশন

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

LLM ইনফারেন্স এপিআই Gemma-2 2B , Gemma 2B এবং Phi-2 মডেলের অ্যাটেনশন লেয়ারগুলিতে LoRA ওয়েট যোগ করা সমর্থন করে। মডেলটি safetensors ফরম্যাটে ডাউনলোড করুন।

LoRA ওয়েট তৈরি করার জন্য বেস মডেলটি অবশ্যই safetensors ফরম্যাটে থাকতে হবে। LoRA ট্রেনিংয়ের পরে, আপনি MediaPipe-এ চালানোর জন্য মডেলগুলিকে FlatBuffers ফরম্যাটে রূপান্তর করতে পারেন।

LoRA ওজন প্রস্তুত করুন

আপনার নিজস্ব ডেটাসেটে একটি ফাইন-টিউনড LoRA মডেলকে প্রশিক্ষণ দিতে PEFT-এর LoRA Methods গাইডটি ব্যবহার করুন।

LLM ইনফারেন্স 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"],
)

প্রস্তুতকৃত ডেটাসেটে প্রশিক্ষণ দেওয়ার পর এবং মডেলটি সংরক্ষণ করার পরে, ফাইন-টিউন করা LoRA মডেলের ওয়েটগুলো adapter_model.safetensors ফাইলে পাওয়া যায়। safetensors ফাইলটি হলো LoRA চেকপয়েন্ট, যা মডেল রূপান্তরের সময় ব্যবহৃত হয়।

মডেল রূপান্তর

মডেলের ওয়েটগুলোকে ফ্ল্যাটবাফার ফরম্যাটে রূপান্তর করতে মিডিয়াপাইপ পাইথন প্যাকেজটি ব্যবহার করুন। ConversionConfig বেস মডেল অপশনগুলোর পাশাপাশি অতিরিক্ত লোরা অপশনগুলোও নির্দিষ্ট করে।

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_FILE,
)

converter.convert_checkpoint(config)

কনভার্টারটি দুটি MediaPipe-উপযোগী ফাইল তৈরি করবে, একটি বেস মডেলের জন্য এবং অন্যটি LoRA মডেলের জন্য।

LoRA মডেল অনুমান

ওয়েব রানটাইমে ডাইনামিক LoRA সমর্থন করে, অর্থাৎ ব্যবহারকারীরা ইনিশিয়ালাইজেশনের সময় LoRA র‍্যাঙ্ক ঘোষণা করেন। এর মানে হলো, আপনি রানটাইমে বিভিন্ন LoRA মডেল অদলবদল করতে পারবেন।

const genai = await FilesetResolver.forGenAiTasks(
    // path/to/wasm/root
    "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm"
);
const llmInference = await LlmInference.createFromOptions(genai, {
    // options for the base model
    ...
    // LoRA ranks to be used by the LoRA models during runtime
    loraRanks: [4, 8, 16]
});

বেস মডেল ইনিশিয়ালাইজ করার পর, রানটাইমে LoRA মডেলগুলো লোড করুন। LLM রেসপন্স জেনারেট করার সময় মডেল রেফারেন্সটি পাস করে LoRA মডেলটি ট্রিগার করুন।

// Load several LoRA models. The returned LoRA model reference is used to specify
// which LoRA model to be used for inference.
loraModelRank4 = await llmInference.loadLoraModel(loraModelRank4Url);
loraModelRank8 = await llmInference.loadLoraModel(loraModelRank8Url);

// Specify LoRA model to be used during inference
llmInference.generateResponse(
  inputPrompt,
  loraModelRank4,
  (partialResult, done) => {
        document.getElementById('output').textContent += partialResult;
});