LLM Inference API به شما امکان میدهد مدلهای زبان بزرگ (LLM) را کاملاً روی دستگاه برای برنامههای iOS اجرا کنید، که میتوانید از آنها برای انجام طیف وسیعی از وظایف، مانند تولید متن، بازیابی اطلاعات به شکل زبان طبیعی و خلاصه کردن اسناد استفاده کنید. این وظیفه پشتیبانی داخلی از چندین مدل زبان بزرگ متن به متن را ارائه میکند، بنابراین میتوانید آخرین مدلهای هوش مصنوعی تولیدی روی دستگاه را در برنامههای iOS خود اعمال کنید.
برای افزودن سریع API LLM Inference به برنامه iOS خود، Quickstart را دنبال کنید. برای مثالی اساسی از یک برنامه iOS که LLM Inference API را اجرا می کند، به برنامه نمونه مراجعه کنید. برای درک عمیقتر نحوه عملکرد API استنتاج LLM، به بخشهای تنظیمات ، تبدیل مدل و تنظیم LoRA مراجعه کنید.
شما می توانید این کار را با نسخه ی نمایشی MediaPipe Studio مشاهده کنید. برای اطلاعات بیشتر در مورد قابلیتها، مدلها و گزینههای پیکربندی این کار، به نمای کلی مراجعه کنید.
شروع سریع
برای افزودن API LLM Inference به برنامه iOS خود از مراحل زیر استفاده کنید. LLM Inference API از کتابخانه MediaPipeTasksGenai
استفاده می کند که باید با استفاده از CocoaPods نصب شود. این کتابخانه با هر دو برنامه Swift و Objective-C سازگار است و نیازی به تنظیمات زبان خاصی ندارد.
برای دستورالعملهای نصب CocoaPods در macOS، به راهنمای نصب CocoaPods مراجعه کنید. برای دستورالعملهای نحوه ایجاد یک Podfile
با پادهای لازم برای برنامه خود، به استفاده از CocoaPods مراجعه کنید.
وابستگی ها را اضافه کنید
با استفاده از کد زیر، MediaPipeTasksGenai
pod را در Podfile
اضافه کنید:
target 'MyLlmInferenceApp' do
use_frameworks!
pod 'MediaPipeTasksGenAI'
pod 'MediaPipeTasksGenAIC'
end
اگر برنامه شما شامل اهداف تست واحد است، برای اطلاعات بیشتر در مورد راهاندازی Podfile
، به راهنمای تنظیم برای iOS مراجعه کنید.
دانلود یک مدل
Gemma-2 2B را با فرمت کوانتیزه ۸ بیتی از Kaggle Models دانلود کنید. برای اطلاعات بیشتر در مورد مدلهای موجود، به مستندات مدلها مراجعه کنید.
مدل را با استفاده از Xcode به فهرست پروژه خود اضافه کنید. برای دستورالعملهایی درباره نحوه افزودن فایلها به پروژه Xcode، به مدیریت فایلها و پوشهها در پروژه Xcode خود مراجعه کنید.
Task را راه اندازی کنید
کار را با گزینه های پیکربندی اولیه راه اندازی کنید:
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)
Task را اجرا کنید
برای ایجاد پاسخ متنی از متد 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 است که از API LLM Inference استفاده می کند. میتوانید از برنامه بهعنوان نقطه شروع برای برنامه iOS خودتان استفاده کنید، یا هنگام تغییر یک برنامه موجود به آن مراجعه کنید. کد نمونه در GitHub میزبانی می شود.
با استفاده از دستور زیر مخزن git را کلون کنید:
git clone https://github.com/google-ai-edge/mediapipe-samples
پس از ایجاد یک نسخه محلی از کد نمونه، می توانید پروژه را به iOS Studio وارد کرده و برنامه را اجرا کنید. برای اطلاعات بیشتر، به راهنمای راه اندازی برای iOS مراجعه کنید.
گزینه های پیکربندی
برای راه اندازی یک برنامه iOS از گزینه های پیکربندی زیر استفاده کنید:
نام گزینه | توضیحات | محدوده ارزش | مقدار پیش فرض |
---|---|---|---|
modelPath | مسیری که مدل در دایرکتوری پروژه ذخیره می شود. | PATH | N/A |
maxTokens | حداکثر تعداد نشانهها (توکنهای ورودی + نشانههای خروجی) که مدل کنترل میکند. | عدد صحیح | 512 |
topk | تعداد نشانه هایی که مدل در هر مرحله از تولید در نظر می گیرد. پیشبینیها را به k توکنهای محتملتر محدود میکند. | عدد صحیح | 40 |
temperature | مقدار تصادفی معرفی شده در طول تولید. دمای بالاتر منجر به خلاقیت بیشتر در متن تولید شده می شود، در حالی که دمای پایین تر تولید قابل پیش بینی بیشتری را تولید می کند. | شناور | 0.8 |
randomSeed | دانه تصادفی مورد استفاده در تولید متن. | عدد صحیح | 0 |
loraPath | مسیر مطلق به مدل LoRA به صورت محلی در دستگاه. توجه: این فقط با مدل های GPU سازگار است. | PATH | N/A |
تبدیل مدل
LLM Inference API با انواع مدل های زیر سازگار است که برخی از آنها نیاز به تبدیل مدل دارند. از جدول برای شناسایی روش مراحل مورد نیاز برای مدل خود استفاده کنید.
مدل ها | روش تبدیل | پلتفرم های سازگار | نوع فایل |
---|---|---|---|
Gemma-3 1B | بدون نیاز به تبدیل | اندروید، وب | وظیفه |
Gemma 2B، Gemma 7B، Gemma-2 2B | بدون نیاز به تبدیل | اندروید، iOS، وب | .bin |
Phi-2، StableLM، Falcon | اسکریپت تبدیل MediaPipe | اندروید، iOS، وب | .bin |
همه مدل های PyTorch LLM | کتابخانه AI Edge Torch Generative | اندروید، iOS | وظیفه |
برای آشنایی با نحوه تبدیل مدل های دیگر، به بخش تبدیل مدل مراجعه کنید.
سفارشی سازی LoRA
API استنتاج LLM از تنظیم LoRA (انطباق با رتبه پایین) با استفاده از کتابخانه PEFT (Parameter-Efficient Fine-Tuning) پشتیبانی می کند. تنظیم LoRA رفتار LLM ها را از طریق یک فرآیند آموزشی مقرون به صرفه سفارشی می کند و مجموعه کوچکی از وزنه های قابل آموزش را بر اساس داده های آموزشی جدید به جای آموزش مجدد کل مدل ایجاد می کند.
LLM Inference API از افزودن وزنهای LoRA به لایههای توجه مدلهای Gemma-2 2B ، Gemma 2B و Phi-2 پشتیبانی میکند. مدل را با فرمت safetensors
دانلود کنید.
برای ایجاد وزنه های LoRA، مدل پایه باید در قالب safetensors
باشد. بعد از آموزش LoRA می توانید مدل ها را به فرمت FlatBuffers تبدیل کنید تا روی MediaPipe اجرا شوند.
وزنه های LoRA را آماده کنید
از راهنمای روشهای LoRA از PEFT برای آموزش یک مدل LoRA با تنظیم دقیق در مجموعه دادههای خود استفاده کنید.
API استنتاج LLM فقط از 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 است که در هنگام تبدیل مدل استفاده می شود.
تبدیل مدل
از بسته MediaPipe Python برای تبدیل وزن مدل به فرمت Flatbuffer استفاده کنید. 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 و همچنین پایه 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)
برای اجرای استنتاج LLM با LoRA، از همان متدهای generateResponse()
یا generateResponseAsync()
به عنوان مدل پایه استفاده کنید.