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

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

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

কোড উদাহরণ

MediaPipe টাস্ক উদাহরণ কোড হল iOS এর জন্য একটি LLM ইনফারেন্স API অ্যাপের একটি মৌলিক বাস্তবায়ন। আপনি অ্যাপটিকে আপনার নিজের iOS অ্যাপের জন্য একটি সূচনা পয়েন্ট হিসাবে ব্যবহার করতে পারেন, অথবা একটি বিদ্যমান অ্যাপ পরিবর্তন করার সময় এটি উল্লেখ করতে পারেন। এলএলএম ইনফারেন্স এপিআই উদাহরণ কোডটি গিটহাবে হোস্ট করা হয়েছে।

কোডটি ডাউনলোড করুন

নিম্নলিখিত নির্দেশাবলী আপনাকে দেখায় কিভাবে গিট কমান্ড লাইন টুল ব্যবহার করে উদাহরণ কোডের একটি স্থানীয় অনুলিপি তৈরি করতে হয়।

উদাহরণ কোড ডাউনলোড করতে:

  1. নিম্নলিখিত কমান্ড ব্যবহার করে গিট সংগ্রহস্থল ক্লোন করুন:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. ঐচ্ছিকভাবে, স্পার্স চেকআউট ব্যবহার করার জন্য আপনার গিট ইন্সট্যান্স কনফিগার করুন, তাই আপনার কাছে শুধুমাত্র এলএলএম ইনফারেন্স এপিআই উদাহরণ অ্যাপের ফাইল আছে:

    cd mediapipe
    git sparse-checkout init --cone
    git sparse-checkout set examples/llm_inference/ios/
    

উদাহরণ কোডের একটি স্থানীয় সংস্করণ তৈরি করার পরে, আপনি MediaPipe টাস্ক লাইব্রেরি ইনস্টল করতে পারেন, Xcode ব্যবহার করে প্রকল্পটি খুলতে পারেন এবং অ্যাপটি চালাতে পারেন। নির্দেশাবলীর জন্য, iOS এর জন্য সেটআপ গাইড দেখুন।

সেটআপ

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

নির্ভরতা

এলএলএম ইনফারেন্স এপিআই MediaPipeTasksGenai লাইব্রেরি ব্যবহার করে, যা অবশ্যই কোকোপড ব্যবহার করে ইনস্টল করা উচিত। লাইব্রেরিটি সুইফট এবং অবজেক্টিভ-সি উভয় অ্যাপের সাথেই সামঞ্জস্যপূর্ণ এবং কোনো অতিরিক্ত ভাষা-নির্দিষ্ট সেটআপের প্রয়োজন নেই।

ম্যাকওএস-এ কোকোপড ইনস্টল করার নির্দেশাবলীর জন্য, কোকোপডস ইনস্টলেশন নির্দেশিকা পড়ুন। আপনার অ্যাপের জন্য প্রয়োজনীয় পড দিয়ে কীভাবে একটি Podfile তৈরি করবেন তার নির্দেশাবলীর জন্য, CocoaPods ব্যবহার করুন দেখুন।

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

target 'MyLlmInferenceApp' do
  use_frameworks!
  pod 'MediaPipeTasksGenAI'
  pod 'MediaPipeTasksGenAIC'
end

যদি আপনার অ্যাপে ইউনিট পরীক্ষার লক্ষ্য অন্তর্ভুক্ত থাকে, তাহলে আপনার Podfile সেট আপ করার বিষয়ে অতিরিক্ত তথ্যের জন্য iOS এর জন্য সেট আপ গাইড দেখুন।

মডেল

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

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

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

Gemma 2B ডাউনলোড করুন

iOS অ্যাপ্লিকেশানগুলি তৈরি করার সময়, নিম্নলিখিত রূপগুলির মধ্যে একটি ব্যবহার করুন:

  • gemma-2b-it-cpu-int4 : CPU সামঞ্জস্য সহ জেমা 4-বিট মডেল।
  • gemma-2b-it-gpu-int4 : জিপিইউ সামঞ্জস্য সহ জেমা 4-বিট মডেল।
  • AI এজ টর্চ ম্যাপ করা মডেলগুলি যা iOS মেমরির প্রয়োজনীয়তার সাথে সামঞ্জস্যপূর্ণ।

অন্যান্য মডেল সম্পর্কে আরও তথ্যের জন্য, টাস্ক ওভারভিউ মডেল বিভাগটি দেখুন।

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

আপনি LLM ইনফারেন্স API টাস্ক তৈরি করতে পারেন এর ইনিশিয়ালাইজারগুলির একটিকে কল করে। LlmInference(options:) সূচনাকারী কনফিগারেশন বিকল্পগুলির জন্য মান সেট করে।

আপনার যদি কাস্টমাইজড কনফিগারেশন বিকল্পগুলির সাথে শুরু করা একটি LLM ইনফারেন্স API এর প্রয়োজন না হয় তবে আপনি ডিফল্ট বিকল্পগুলির সাথে একটি LLM ইনফারেন্স API তৈরি করতে LlmInference(modelPath:) ইনিশিয়ালাইজার ব্যবহার করতে পারেন। কনফিগারেশন বিকল্প সম্পর্কে আরও তথ্যের জন্য, কনফিগারেশন ওভারভিউ দেখুন।

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

import MediaPipeTasksGenai

let modelPath = Bundle.main.path(forResource: "model",
                                      ofType: "bin")

let options = LlmInferenceOptions()
options.baseOptions.modelPath = modelPath
options.maxTokens = 1000
options.topk = 40
options.temperature = 0.8
options.randomSeed = 101

let LlmInference = try LlmInference(options: options)

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

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

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

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

এলএলএম ইনফারেন্স এপিআই টেক্সট ডেটার সাথে কাজ করে। টাস্কটি টোকেনাইজেশন এবং টেনসর প্রিপ্রসেসিং সহ ডেটা ইনপুট প্রিপ্রসেসিং পরিচালনা করে।

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

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

টাস্ক চালান

LLM ইনফারেন্স API চালানোর জন্য, generateResponse(inputText:) পদ্ধতি ব্যবহার করুন। LLM ইনফারেন্স API ইনপুট পাঠ্যের সম্ভাব্য বিভাগগুলি প্রদান করে।

let result = try LlmInference.generateResponse(inputText: inputPrompt)

প্রতিক্রিয়া স্ট্রিম করতে, generateResponseAsync(inputText:) পদ্ধতি ব্যবহার করুন।

let resultStream =  LlmInference.generateResponseAsync(inputText: inputPrompt)

do {
  for try await partialResult in resultStream {
    print("\(partialResult)")
  }
  print("Done")
}
catch {
  print("Response error: '\(error)")
}

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

LLM ইনফারেন্স API একটি LlmInferenceResult প্রদান করে, যার মধ্যে জেনারেট করা প্রতিক্রিয়া পাঠ্য রয়েছে।

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

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

আপনার নিজস্ব ডেটাসেটে সমর্থিত মডেলের ধরন, Gemma-2B বা Phi-2 সহ একটি সূক্ষ্ম টিউন করা LoRA মডেল প্রশিক্ষণের জন্য HuggingFace-এর নির্দেশাবলী অনুসরণ করুন। Gemma-2B এবং Phi-2 মডেল দুটিই সেফটেনসর ফরম্যাটে HuggingFace-এ উপলব্ধ। যেহেতু LLM ইনফারেন্স API শুধুমাত্র মনোযোগের স্তরগুলিতে LoRA সমর্থন করে, তাই LoraConfig তৈরি করার সময় নিম্নলিখিত হিসাবে শুধুমাত্র মনোযোগ স্তরগুলি নির্দিষ্ট করুন:

# For Gemma-2B
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 সমর্থন করে, যা টাস্কের জীবদ্দশায় একই LoRA ওজন ব্যবহার করে।

শুরু করার সময় iOS স্ট্যাটিক LoRA সমর্থন করে। একটি LoRA মডেল লোড করতে, ব্যবহারকারীরা LoRA মডেল পাথের পাশাপাশি বেস LLM নির্দিষ্ট করে।

import MediaPipeTasksGenai

let modelPath = Bundle.main.path(forResource: "model",
                                      ofType: "bin")
let loraPath= Bundle.main.path(forResource: "lora_model",
                                      ofType: "bin")
let options = LlmInferenceOptions()
options.modelPath = modelPath
options.maxTokens = 1000
options.topk = 40
options.temperature = 0.8
options.randomSeed = 101
options.loraPath = loraPath

let LlmInference = try LlmInference(options: options)

LoRA এর সাথে LLM অনুমান চালানোর জন্য, বেস মডেল হিসাবে একই generateResponse() বা generateResponseAsync() পদ্ধতি ব্যবহার করুন।