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

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

কাজটি জেমার নিম্নলিখিত রূপগুলিকে সমর্থন করে: জেমা-2 2B, জেমা 2B, এবং জেমা 7B৷ Gemma হল হালকা ওজনের, অত্যাধুনিক ওপেন মডেলগুলির একটি পরিবার যা জেমিনি মডেলগুলি তৈরি করতে ব্যবহৃত একই গবেষণা এবং প্রযুক্তি থেকে তৈরি৷ এটি নিম্নলিখিত বাহ্যিক মডেলগুলিকেও সমর্থন করে: Phi-2 , Falcon-RW-1B এবং StableLM-3B

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

কোড উদাহরণ

LLM ইনফারেন্স API-এর উদাহরণ অ্যাপ্লিকেশনটি আপনার রেফারেন্সের জন্য জাভাস্ক্রিপ্টে এই টাস্কটির একটি মৌলিক বাস্তবায়ন প্রদান করে। আপনার নিজের টেক্সট জেনারেশন অ্যাপ তৈরি করা শুরু করতে আপনি এই নমুনা অ্যাপটি ব্যবহার করতে পারেন।

আপনি GitHub-এ LLM ইনফারেন্স API উদাহরণ অ্যাপ অ্যাক্সেস করতে পারেন।

সেটআপ

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

ব্রাউজার সামঞ্জস্য

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

জাভাস্ক্রিপ্ট প্যাকেজ

LLM ইনফারেন্স API কোড @mediapipe/tasks-genai প্যাকেজের মাধ্যমে উপলব্ধ। আপনি প্ল্যাটফর্ম সেটআপ গাইডে দেওয়া লিঙ্কগুলি থেকে এই লাইব্রেরিগুলি খুঁজে পেতে এবং ডাউনলোড করতে পারেন৷

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

npm install @mediapipe/tasks-genai

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

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

মডেল

MediaPipe LLM Inference API-এর জন্য একটি প্রশিক্ষিত মডেল প্রয়োজন যা এই কাজের সাথে সামঞ্জস্যপূর্ণ। ওয়েব অ্যাপ্লিকেশনের জন্য, মডেলটি অবশ্যই GPU- সামঞ্জস্যপূর্ণ হতে হবে।

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

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

এলএলএম ইনফারেন্স এপিআই শুরু করার আগে, সমর্থিত মডেলগুলির একটি ডাউনলোড করুন এবং আপনার প্রকল্প ডিরেক্টরির মধ্যে ফাইলটি সংরক্ষণ করুন:

  • Gemma-2 2B : মডেলের জেমা পরিবারের সর্বশেষ সংস্করণ। মিথুন মডেলগুলি তৈরি করতে ব্যবহৃত একই গবেষণা এবং প্রযুক্তি থেকে তৈরি হালকা ওজনের, অত্যাধুনিক ওপেন মডেলগুলির একটি পরিবারের অংশ৷
  • জেমিনি মডেল তৈরি করতে ব্যবহৃত একই গবেষণা এবং প্রযুক্তি থেকে তৈরি হালকা ওজনের, অত্যাধুনিক ওপেন মডেলের একটি পরিবারের অংশ। প্রশ্ন উত্তর, সংক্ষিপ্তকরণ এবং যুক্তি সহ পাঠ্য তৈরির বিভিন্ন কাজের জন্য উপযুক্ত।
  • Phi-2 : 2.7 বিলিয়ন প্যারামিটার ট্রান্সফরমার মডেল, প্রশ্ন-উত্তর, চ্যাট এবং কোড ফর্ম্যাটের জন্য সবচেয়ে উপযুক্ত।
  • Falcon-RW-1B : RefinedWeb- এর 350B টোকেনগুলিতে প্রশিক্ষিত 1 বিলিয়ন প্যারামিটার কার্যকারণ ডিকোডার-শুধু মডেল৷
  • StableLM-3B : 3 বিলিয়ন প্যারামিটার ডিকোডার-শুধু ভাষা মডেল বিভিন্ন ইংরেজি এবং কোড ডেটাসেটের 1 ট্রিলিয়ন টোকেনগুলিতে প্রাক-প্রশিক্ষিত।

সমর্থিত মডেলগুলি ছাড়াও, আপনি PyTorch মডেলগুলিকে বহু-স্বাক্ষর LiteRT ( tflite ) মডেলগুলিতে রপ্তানি করতে Google এর AI এজ টর্চ ব্যবহার করতে পারেন৷ আরও তথ্যের জন্য, পাইটর্চ মডেলের জন্য টর্চ জেনারেটিভ কনভার্টার দেখুন।

আমরা Gemma-2 2B ব্যবহার করার পরামর্শ দিই, যা Kaggle মডেলগুলিতে পাওয়া যায়। অন্যান্য উপলব্ধ মডেল সম্পর্কে আরও তথ্যের জন্য, টাস্ক ওভারভিউ মডেল বিভাগটি দেখুন।

মিডিয়াপাইপ ফর্ম্যাটে মডেল রূপান্তর করুন

LLM ইনফারেন্স API দুটি বিভাগের ধরণের মডেলের সাথে সামঞ্জস্যপূর্ণ, যার মধ্যে কিছু মডেল রূপান্তর প্রয়োজন। আপনার মডেলের জন্য প্রয়োজনীয় পদক্ষেপ পদ্ধতি সনাক্ত করতে টেবিলটি ব্যবহার করুন।

মডেল রূপান্তর পদ্ধতি সামঞ্জস্যপূর্ণ প্ল্যাটফর্ম ফাইলের ধরন
সমর্থিত মডেল Gemma 2B, Gemma 7B, Gemma-2 2B, Phi-2, StableLM, Falcon মিডিয়াপাইপ অ্যান্ড্রয়েড, আইওএস, ওয়েব .বিন
অন্যান্য PyTorch মডেল সমস্ত PyTorch LLM মডেল এআই এজ টর্চ জেনারেটিভ লাইব্রেরি অ্যান্ড্রয়েড, আইওএস .টাস্ক

আমরা Kaggle-এ Gemma 2B, Gemma 7B, এবং Gemma-2 2B-এর জন্য রূপান্তরিত .bin ফাইলগুলি হোস্ট করছি। এই মডেলগুলি সরাসরি আমাদের LLM ইনফারেন্স API ব্যবহার করে স্থাপন করা যেতে পারে। আপনি কীভাবে অন্যান্য মডেলগুলিকে রূপান্তর করতে পারেন তা জানতে, মডেল রূপান্তর বিভাগটি দেখুন৷

প্রকল্প ডিরেক্টরিতে মডেল যোগ করুন

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

<dev-project-root>/assets/gemma-2b-it-gpu-int4.bin

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

baseOptions: { modelAssetPath: `/assets/gemma-2b-it-gpu-int4.bin`}

টাস্ক তৈরি করুন

অনুমান চালানোর জন্য টাস্ক প্রস্তুত করতে LLM ইনফারেন্স API createFrom...() ফাংশনগুলির একটি ব্যবহার করুন। আপনি প্রশিক্ষিত মডেল ফাইলের আপেক্ষিক বা পরম পাথ সহ createFromModelPath() ফাংশনটি ব্যবহার করতে পারেন। কোড উদাহরণ createFromOptions() ফাংশন ব্যবহার করে। উপলব্ধ কনফিগারেশন বিকল্পগুলি সম্পর্কে আরও তথ্যের জন্য, কনফিগারেশন বিকল্পগুলি দেখুন।

নিম্নলিখিত কোডটি এই কাজটি কীভাবে তৈরি এবং কনফিগার করতে হয় তা প্রদর্শন করে:

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-2b-it-gpu-int4.bin'
    },
    maxTokens: 1000,
    topK: 40,
    temperature: 0.8,
    randomSeed: 101
});

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

এই কাজটিতে ওয়েব এবং জাভাস্ক্রিপ্ট অ্যাপের জন্য নিম্নলিখিত কনফিগারেশন বিকল্প রয়েছে:

বিকল্পের নাম বর্ণনা মান পরিসীমা ডিফল্ট মান
modelPath প্রজেক্ট ডিরেক্টরির মধ্যে মডেলটি যেখানে সংরক্ষণ করা হয় তার পথ। PATH N/A
maxTokens মডেলটি পরিচালনা করে সর্বাধিক সংখ্যক টোকেন (ইনপুট টোকেন + আউটপুট টোকেন)। পূর্ণসংখ্যা 512
topK প্রজন্মের প্রতিটি ধাপে মডেলটি বিবেচনা করে টোকেনের সংখ্যা। পূর্বাভাসগুলিকে শীর্ষ k সর্বাধিক সম্ভাব্য টোকেনে সীমাবদ্ধ করে৷ পূর্ণসংখ্যা 40
temperature প্রজন্মের সময় যে পরিমাণ এলোমেলোভাবে প্রবর্তিত হয়। একটি উচ্চ তাপমাত্রার ফলে উত্পন্ন পাঠে আরও সৃজনশীলতা আসে, যখন নিম্ন তাপমাত্রা আরও অনুমানযোগ্য প্রজন্ম তৈরি করে। ভাসা 0.8
randomSeed টেক্সট তৈরির সময় ব্যবহৃত এলোমেলো বীজ। পূর্ণসংখ্যা 0
loraRanks LoRA র‍্যাঙ্কগুলি LoRA মডেলগুলি রানটাইমের সময় ব্যবহার করবে৷ দ্রষ্টব্য: এটি শুধুমাত্র GPU মডেলের সাথে সামঞ্জস্যপূর্ণ। পূর্ণসংখ্যা অ্যারে N/A

ডেটা প্রস্তুত করুন

LLM ইনফারেন্স API টেক্সট ( string ) ডেটা গ্রহণ করে। টাস্কটি টোকেনাইজেশন এবং টেনসর প্রিপ্রসেসিং সহ ডেটা ইনপুট প্রিপ্রসেসিং পরিচালনা করে।

সমস্ত প্রিপ্রসেসিং generateResponse() ফাংশনের মধ্যে পরিচালিত হয়। ইনপুট পাঠ্যের অতিরিক্ত প্রিপ্রসেসিংয়ের প্রয়োজন নেই।

const inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday.";

টাস্ক চালান

LLM ইনফারেন্স API অনুমানগুলি ট্রিগার করতে generateResponse() ফাংশন ব্যবহার করে। পাঠ্য শ্রেণীবিভাগের জন্য, এর অর্থ হল ইনপুট পাঠ্যের সম্ভাব্য বিভাগগুলি ফেরত দেওয়া।

নিম্নলিখিত কোডটি প্রদর্শন করে কিভাবে টাস্ক মডেলের সাথে প্রক্রিয়াকরণ চালানো যায়।

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

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

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

হ্যান্ডেল এবং প্রদর্শন ফলাফল

LLM ইনফারেন্স API একটি স্ট্রিং প্রদান করে, যার মধ্যে জেনারেট করা প্রতিক্রিয়া পাঠ্য অন্তর্ভুক্ত থাকে।

Here's a draft you can use:

Subject: Lunch on Saturday Reminder

Hi Brett,

Just a quick reminder about our lunch plans this Saturday at noon.
Let me know if that still works for you.

Looking forward to it!

Best,
[Your Name]

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

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

LLM ইনফারেন্স API-এর LoRA সমর্থন সমস্ত Gemma ভেরিয়েন্ট এবং GPU ব্যাকএন্ডের জন্য Phi-2 মডেলের জন্য কাজ করে, LoRA ওজন শুধুমাত্র মনোযোগ স্তরগুলিতে প্রযোজ্য। এই প্রাথমিক বাস্তবায়ন ভবিষ্যতের উন্নয়নের জন্য একটি পরীক্ষামূলক API হিসাবে কাজ করে যাতে আগামী আপডেটগুলিতে আরও মডেল এবং বিভিন্ন ধরণের স্তর সমর্থন করার পরিকল্পনা রয়েছে।

LoRA মডেল প্রস্তুত করুন

আপনার নিজস্ব ডেটাসেটে সমর্থিত মডেলের ধরন, জেমা বা ফি-২ সহ একটি সূক্ষ্ম টিউন করা LoRA মডেল প্রশিক্ষণের জন্য HuggingFace-এর নির্দেশাবলী অনুসরণ করুন। Gemma-2 2B , Gemma 2B এবং Phi-2 মডেল দুটিই সেফটেনসর ফরম্যাটে HuggingFace-এ উপলব্ধ। যেহেতু 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 মডেল রয়েছে যা HuggingFace-এ উপলব্ধ LLM ইনফারেন্স API-এর সাথে মানানসই। উদাহরণস্বরূপ, Gemma-2B-এর জন্য monsterapi/gemma-2b-lora-maths-orca-200k এবং Phi-2-এর জন্য lole25/phi-2-sft-ultrachat-lora

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

পরবর্তী ধাপ হিসেবে, আপনাকে মিডিয়াপাইপ পাইথন প্যাকেজ ব্যবহার করে মডেলের ওজনকে টেনসরফ্লো লাইট ফ্ল্যাটবাফারে রূপান্তর করতে হবে। 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 মডেল অনুমান

ওয়েব, অ্যান্ড্রয়েড এবং আইওএস এলএলএম ইনফারেন্স API 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 মডেল রেফারেন্স পাস করে 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;
});