एलएलएम इन्फ़रेंस एपीआई की मदद से, iOS ऐप्लिकेशन के लिए लार्ज लैंग्वेज मॉडल (एलएलएम) को पूरी तरह से डिवाइस पर चलाया जा सकता है. इसका इस्तेमाल कई तरह के टास्क करने के लिए किया जा सकता है. जैसे, टेक्स्ट जनरेट करना, सामान्य भाषा में जानकारी पाना, और दस्तावेज़ों की खास जानकारी तैयार करना. इस टास्क में, टाइप किए गए टेक्स्ट का लिखकर जवाब पाने की सुविधा देने वाले कई लार्ज लैंग्वेज मॉडल के लिए, पहले से मौजूद सपोर्ट मिलता है. इसलिए, अपने iOS ऐप्लिकेशन पर डिवाइस में मौजूद जनरेटिव एआई मॉडल के नए वर्शन लागू किए जा सकते हैं.
अपने iOS ऐप्लिकेशन में LLM Inference API को तुरंत जोड़ने के लिए, क्विकस्टार्ट गाइड का इस्तेमाल करें. LLM Inference API चलाने वाले iOS ऐप्लिकेशन के बुनियादी उदाहरण के लिए, सैंपल ऐप्लिकेशन देखें. LLM Inference API के काम करने के तरीके के बारे में ज़्यादा जानकारी पाने के लिए, कॉन्फ़िगरेशन के विकल्प, मॉडल कन्वर्ज़न, और LoRA ट्यूनिंग सेक्शन देखें.
MediaPipe Studio के डेमो में, इस टास्क को काम करते हुए देखा जा सकता है. इस टास्क की क्षमताओं, मॉडल, और कॉन्फ़िगरेशन के विकल्पों के बारे में ज़्यादा जानने के लिए, खास जानकारी देखें.
क्विकस्टार्ट
अपने iOS ऐप्लिकेशन में LLM Inference API जोड़ने के लिए, यह तरीका अपनाएं.
एलएलएम इन्फ़रेंस एपीआई, MediaPipeTasksGenai लाइब्रेरी का इस्तेमाल करता है. इसे CocoaPods का इस्तेमाल करके इंस्टॉल करना ज़रूरी है. यह लाइब्रेरी, Swift और Objective-C, दोनों तरह के ऐप्लिकेशन के साथ काम करती है. इसके लिए, किसी अन्य भाषा के हिसाब से सेटअप करने की ज़रूरत नहीं होती.
macOS पर CocoaPods इंस्टॉल करने के निर्देशों के लिए, CocoaPods को इंस्टॉल करने से जुड़ी गाइड देखें.
अपने ऐप्लिकेशन के लिए ज़रूरी पॉड के साथ Podfile बनाने के तरीके के बारे में निर्देश पाने के लिए, CocoaPods का इस्तेमाल करना लेख पढ़ें.
डिपेंडेंसी जोड़ें
नीचे दिए गए कोड का इस्तेमाल करके, Podfile में MediaPipeTasksGenai पॉड जोड़ें:
target 'MyLlmInferenceApp' do
use_frameworks!
pod 'MediaPipeTasksGenAI'
pod 'MediaPipeTasksGenAIC'
end
अगर आपके ऐप्लिकेशन में यूनिट टेस्ट टारगेट शामिल हैं, तो iOS के लिए सेट अप गाइड देखें. इसमें Podfile को सेट अप करने के बारे में ज़्यादा जानकारी दी गई है.
मॉडल डाउनलोड करना
Gemma-2 2B को 8-बिट क्वांटाइज़्ड फ़ॉर्मैट में Kaggle Models से डाउनलोड करें. उपलब्ध मॉडल के बारे में ज़्यादा जानकारी के लिए, मॉडल का दस्तावेज़ देखें.
Xcode का इस्तेमाल करके, मॉडल को अपनी प्रोजेक्ट डायरेक्ट्री में जोड़ें. अपने Xcode प्रोजेक्ट में फ़ाइलें जोड़ने के निर्देशों के लिए, अपने Xcode प्रोजेक्ट में फ़ाइलें और फ़ोल्डर मैनेज करना लेख पढ़ें.
टास्क शुरू करना
टास्क को बुनियादी कॉन्फ़िगरेशन विकल्पों के साथ शुरू करें:
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)
टास्क चलाना
टेक्स्ट वाला जवाब जनरेट करने के लिए, generateResponse(inputText:) तरीके का इस्तेमाल करें. इससे जनरेट किया गया एक जवाब मिलता है.
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)")
}
सैंपल ऐप्लिकेशन
सैंपल ऐप्लिकेशन, iOS के लिए बुनियादी टेक्स्ट जनरेट करने वाले ऐप्लिकेशन का उदाहरण है. इसमें LLM Inference API का इस्तेमाल किया गया है. इस ऐप्लिकेशन का इस्तेमाल, अपने iOS ऐप्लिकेशन को बनाने के लिए किया जा सकता है. इसके अलावा, मौजूदा ऐप्लिकेशन में बदलाव करते समय भी इसका इस्तेमाल किया जा सकता है. उदाहरण के तौर पर दिया गया कोड, GitHub पर होस्ट किया गया है.
नीचे दिए गए कमांड का इस्तेमाल करके, git रिपॉज़िटरी को क्लोन करें:
git clone https://github.com/google-ai-edge/mediapipe-samples
उदाहरण कोड का लोकल वर्शन बनाने के बाद, प्रोजेक्ट को iOS Studio में इंपोर्ट किया जा सकता है और ऐप्लिकेशन को चलाया जा सकता है. ज़्यादा जानकारी के लिए, iOS के लिए सेटअप गाइड देखें.
कॉन्फ़िगरेशन विकल्प
iOS ऐप्लिकेशन को सेट अप करने के लिए, कॉन्फ़िगरेशन के इन विकल्पों का इस्तेमाल करें:
| विकल्प का नाम | ब्यौरा | वैल्यू की सीमा | डिफ़ॉल्ट मान |
|---|---|---|---|
modelPath |
प्रोजेक्ट डायरेक्ट्री में मॉडल के सेव होने का पाथ. | पाथ | लागू नहीं |
maxTokens |
मॉडल, ज़्यादा से ज़्यादा इतने टोकन (इनपुट टोकन + आउटपुट टोकन) प्रोसेस कर सकता है. | पूर्णांक | 512 |
topk |
जनरेट करने के हर चरण में मॉडल कितने टोकन का इस्तेमाल करता है. पूर्वानुमानों को सबसे ज़्यादा संभावना वाले k टोकन तक सीमित करता है. | पूर्णांक | 40 |
temperature |
जनरेट करने के दौरान, बिना किसी क्रम के जोड़े गए डेटा की मात्रा. ज़्यादा तापमान पर, जनरेट किए गए टेक्स्ट में ज़्यादा क्रिएटिविटी दिखती है. वहीं, कम तापमान पर, जनरेट किया गया टेक्स्ट ज़्यादा अनुमानित होता है. | फ़्लोट | 0.8 |
randomSeed |
टेक्स्ट जनरेट करने के दौरान इस्तेमाल किया गया रैंडम सीड. | पूर्णांक | 0 |
loraPath |
डिवाइस पर स्थानीय तौर पर मौजूद LoRA मॉडल का ऐब्सलूट पाथ. ध्यान दें: यह सिर्फ़ GPU मॉडल के साथ काम करता है. | पाथ | लागू नहीं |
मॉडल कन्वर्ज़न
LLM Inference API का इस्तेमाल इन मॉडल के साथ किया जा सकता है. इनमें से कुछ मॉडल के लिए, मॉडल कन्वर्ज़न की ज़रूरत होती है. अपने मॉडल के लिए ज़रूरी चरणों/तरीके की पहचान करने के लिए, इस टेबल का इस्तेमाल करें.
| मॉडल | कन्वर्ज़न का तरीका | इन प्लैटफ़ॉर्म पर काम करता है | फ़ाइल टाइप |
|---|---|---|---|
| Gemma-3 1B | कन्वर्ज़न की ज़रूरत नहीं है | Android, वेब | .task |
| Gemma 2B, Gemma 7B, Gemma-2 2B | कन्वर्ज़न की ज़रूरत नहीं है | Android, iOS, वेब | .bin |
| Phi-2, StableLM, Falcon | MediaPipe कन्वर्ज़न स्क्रिप्ट | Android, iOS, वेब | .bin |
| PyTorch के सभी एलएलएम मॉडल | LiteRT Torch Generative library | Android, iOS | .task |
अन्य मॉडल को बदलने का तरीका जानने के लिए, मॉडल कन्वर्ज़न सेक्शन देखें.
LoRA को पसंद के मुताबिक बनाना
एलएलएम इन्फ़्रेंस एपीआई, PEFT (पैरामीटर-इफ़िशिएंट फ़ाइन-ट्यूनिंग) लाइब्रेरी का इस्तेमाल करके, LoRA (लो-रैंक अडैप्टेशन) ट्यूनिंग के साथ काम करता है. LoRA ट्यूनिंग की मदद से, एलएलएम के व्यवहार को पसंद के मुताबिक बनाया जा सकता है. इसके लिए, ट्रेनिंग की कम लागत वाली प्रोसेस का इस्तेमाल किया जाता है. इससे, ट्रेनिंग के नए डेटा के आधार पर, ट्रेनिंग के लिए उपलब्ध वज़न का एक छोटा सेट तैयार किया जाता है. इसके लिए, पूरे मॉडल को फिर से ट्रेन करने की ज़रूरत नहीं होती.
एलएलएम इन्फ़रेंस एपीआई, Gemma-2 2B, Gemma 2B, और Phi-2 मॉडल की अटेंशन लेयर में LoRA वेट जोड़ने की सुविधा देता है. मॉडल को safetensors फ़ॉर्मैट में डाउनलोड करें.
LoRA वेट बनाने के लिए, बेस मॉडल safetensors फ़ॉर्मैट में होना चाहिए. LoRA ट्रेनिंग के बाद, मॉडल को MediaPipe पर चलाने के लिए, उन्हें FlatBuffers फ़ॉर्मैट में बदला जा सकता है.
LoRA वेट तैयार करना
अपने डेटासेट पर फ़ाइन-ट्यून किए गए LoRA मॉडल को ट्रेन करने के लिए, PEFT की LoRA Methods गाइड का इस्तेमाल करें.
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"],
)
तैयार किए गए डेटासेट पर ट्रेनिंग देने और मॉडल को सेव करने के बाद, फ़ाइन-ट्यून किए गए LoRA मॉडल के वेट, adapter_model.safetensors में उपलब्ध होते हैं. safetensors फ़ाइल, LoRA चेकपॉइंट है. इसका इस्तेमाल मॉडल कन्वर्ज़न के दौरान किया जाता है.
मॉडल कन्वर्ज़न
मॉडल के वज़न को Flatbuffer फ़ॉर्मैट में बदलने के लिए, MediaPipe Python पैकेज का इस्तेमाल करें. ConversionConfig, बेस मॉडल के विकल्पों के साथ-साथ LoRA के अतिरिक्त विकल्पों के बारे में बताता है.
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)
कन्वर्टर, दो Flatbuffer फ़ाइलें बनाएगा. इनमें से एक फ़ाइल, बुनियादी मॉडल के लिए होगी और दूसरी फ़ाइल, LoRA मॉडल के लिए होगी.
LoRA मॉडल का अनुमान
iOS पर, मॉडल को शुरू करते समय स्टैटिक LoRA का इस्तेमाल किया जा सकता है. LoRA मॉडल लोड करने के लिए, LoRA मॉडल का पाथ और बेस एलएलएम तय करें.
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() तरीकों का इस्तेमाल करें.