LLM Inference API ช่วยให้คุณเรียกใช้โมเดลภาษาขนาดใหญ่ (LLM) ได้ทั้งหมดในอุปกรณ์ สำหรับแอปพลิเคชัน iOS ซึ่งใช้เพื่อทำงานต่างๆ ได้มากมาย เช่น การสร้างข้อความ การดึงข้อมูลในรูปแบบภาษาธรรมชาติ สรุปเอกสาร งานนี้มอบการสนับสนุนในตัวสำหรับ โมเดลภาษาขนาดใหญ่สำหรับการแปลงข้อความเป็นข้อความ เพื่อให้คุณใช้เวอร์ชันล่าสุดในอุปกรณ์ได้ โมเดล Generative AI ไปยังแอป iOS
คุณสามารถดูการทำงานนี้ได้ด้วย MediaPipe Studio การสาธิต สำหรับข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่า ของงานนี้ โปรดดูภาพรวม
ตัวอย่างโค้ด
โค้ดตัวอย่าง MediaPipe Tasks คือการใช้งาน LLM Inference API แบบพื้นฐาน สำหรับ iOS คุณจะใช้แอปนี้เป็นจุดเริ่มต้นสำหรับแอป iOS ของคุณเอง หรือ อ้างอิงถึงข้อมูลนี้เมื่อแก้ไขแอปที่มีอยู่ โค้ดตัวอย่าง LLM Inference API คือ โฮสต์เมื่อ GitHub
ดาวน์โหลดโค้ด
วิธีการต่อไปนี้แสดงวิธีสร้างสำเนาตัวอย่างในเครื่อง โดยใช้เครื่องมือบรรทัดคำสั่ง git
วิธีดาวน์โหลดโค้ดตัวอย่าง
โคลนที่เก็บ Git โดยใช้คำสั่งต่อไปนี้
git clone https://github.com/google-ai-edge/mediapipe-samples
นอกจากนี้ คุณสามารถกำหนดค่าอินสแตนซ์ Git ให้ใช้การชำระเงินแบบกระจัดกระจายเพื่อให้คุณมี เฉพาะไฟล์สำหรับแอปตัวอย่าง LLM Inference API เท่านั้น
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/llm_inference/ios/
หลังจากสร้างโค้ดตัวอย่างในเวอร์ชันในเครื่องแล้ว คุณสามารถติดตั้ง ไลบรารีงาน MediaPipe เปิดโปรเจ็กต์โดยใช้ Xcode และเรียกใช้แอป สำหรับ โปรดดูวิธีการในคู่มือการการตั้งค่าสำหรับ iOS
ตั้งค่า
ส่วนนี้จะอธิบายขั้นตอนสำคัญในการตั้งค่าสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ และ โปรเจ็กต์โค้ดเพื่อใช้ LLM Inference API สำหรับข้อมูลทั่วไปเกี่ยวกับการตั้งค่า สภาพแวดล้อมในการพัฒนาซอฟต์แวร์สำหรับการใช้งาน MediaPipe ซึ่งรวมถึงเวอร์ชันแพลตฟอร์ม โปรดดูคู่มือการตั้งค่าสำหรับ iOS
การอ้างอิง
LLM Inference API ใช้ไลบรารี MediaPipeTasksGenai
ซึ่งต้องติดตั้ง
ด้วยการใช้ CocoaPods ไลบรารีใช้งานได้ทั้งกับแอป Swift และ Objective-C
และไม่จำเป็นต้องมีการตั้งค่าเฉพาะภาษาใดๆ เพิ่มเติม
ดูวิธีการติดตั้ง CocoaPods ใน macOS ได้ที่ CocoaPods
คู่มือการติดตั้ง
หากต้องการทราบวิธีการสร้าง Podfile
ด้วยพ็อดที่จำเป็นสำหรับ
โปรดดูที่การใช้
CocoaPods
เพิ่มพ็อด MediaPipeTasksGenai
ใน Podfile
โดยใช้โค้ดต่อไปนี้
target 'MyLlmInferenceApp' do
use_frameworks!
pod 'MediaPipeTasksGenAI'
pod 'MediaPipeTasksGenAIC'
end
หากแอปของคุณมีเป้าหมายการทดสอบ 1 หน่วย โปรดดูคู่มือการตั้งค่าสำหรับ
iOS หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า
Podfile
ของคุณ
รุ่น
งาน MediaPipe LLM Inference API ต้องใช้โมเดลที่ผ่านการฝึกและเข้ากันได้ กับงานนี้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ผ่านการฝึกที่ใช้ได้สำหรับ LLM Inference API โปรดดูภาพรวมงานส่วนโมเดล
ดาวน์โหลดโมเดล
ดาวน์โหลดโมเดลและเพิ่มลงในไดเรกทอรีโปรเจ็กต์โดยใช้ Xcode สำหรับ ดูวิธีการเพิ่มไฟล์ลงในโปรเจ็กต์ Xcode ได้ที่การจัดการไฟล์ และโฟลเดอร์ใน Xcode โปรเจ็กต์
เมื่อสร้างแอป iOS ให้ใช้ตัวแปรอย่างใดอย่างหนึ่งต่อไปนี้
- gemma-2b-it-cpu-int4: รุ่น 4 บิตของ Gemma ที่มีความเข้ากันได้ของ CPU
- gemma-2b-it-gpu-int4: โมเดล 4 บิตของ Gemma ที่เข้ากันได้กับ GPU
- โมเดลที่แมปของ AI Edge Torch ซึ่งตรงกับความต้องการหน่วยความจำของ iOS
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับโมเดลอื่นๆ โปรดดูภาพรวมงานโมเดล
สร้างงาน
คุณสร้างงาน LLM Inference API ได้โดยเรียกใช้ตัวเริ่มต้นรายการใดรายการหนึ่ง
ตัวเริ่มต้น LlmInference(options:)
จะกำหนดค่าสำหรับตัวเลือกการกำหนดค่า
หากไม่ต้องการให้ LLM Inference API เริ่มต้นด้วยการกำหนดค่าที่กำหนดเอง
คุณสามารถใช้เครื่องมือเริ่มต้น LlmInference(modelPath:)
เพื่อสร้าง
LLM Inference API พร้อมตัวเลือกเริ่มต้น ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่า
โปรดดูที่ภาพรวมการกำหนดค่า
โค้ดต่อไปนี้แสดงวิธีสร้างและกำหนดค่างานนี้
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 |
เส้นทางไปยังที่เก็บโมเดลภายในไดเรกทอรีโปรเจ็กต์ | เส้นทาง | ไม่มี |
maxTokens |
จำนวนโทเค็นสูงสุด (โทเค็นอินพุต + โทเค็นเอาต์พุต) ที่โมเดลจัดการได้ | จำนวนเต็ม | 512 |
topk |
จำนวนโทเค็นที่โมเดลจะพิจารณาในแต่ละขั้นตอนของการสร้าง จำกัดการคาดการณ์ให้กับโทเค็นที่น่าจะเป็นมากที่สุด K สูงสุด | จำนวนเต็ม | 40 |
temperature |
ปริมาณการสุ่มที่เกิดขึ้นระหว่างการสร้าง สูงกว่า อุณหภูมิช่วยเพิ่มความสร้างสรรค์ ในข้อความที่สร้างขึ้น ขณะที่ อุณหภูมิที่ต่ำลงทำให้รุ่นที่คาดการณ์ได้มากขึ้น | ทศนิยม | 0.8 |
randomSeed |
Seed แบบสุ่มที่ใช้ระหว่างการสร้างข้อความ | จำนวนเต็ม | 0 |
loraPath |
Absolute Path ไปยังโมเดล LoRA ภายในอุปกรณ์ หมายเหตุ: วิธีนี้ใช้ได้เฉพาะกับรุ่น GPU | เส้นทาง | ไม่มี |
เตรียมข้อมูล
LLM Inference API ใช้งานได้กับข้อมูลแบบข้อความ งานจะจัดการอินพุตข้อมูล การประมวลผลล่วงหน้า ซึ่งรวมถึงการแปลงเป็นโทเค็นและการประมวลผลล่วงหน้า Tensor
การประมวลผลล่วงหน้าทั้งหมดจะจัดการภายในฟังก์ชัน generateResponse(inputText:)
ไม่จำเป็นต้องประมวลผลข้อความที่ป้อนไว้ล่วงหน้าเพิ่มเติม
let inputPrompt = "Compose an email to remind Brett of lunch plans at noon on Saturday."
เรียกใช้งาน
หากต้องการเรียกใช้ LLM Inference API ให้ใช้เมธอด generateResponse(inputText:)
LLM Inference 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 Inference API จะแสดง LlmInferenceResult
ซึ่งรวม URL ที่สร้าง
ข้อความตอบกลับ
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
กำหนดค่า Mediapipe LLM Inference API ให้รองรับการปรับอันดับต่ำ (LoRA) ได้ สำหรับโมเดลภาษาขนาดใหญ่ นักพัฒนาซอฟต์แวร์สามารถใช้ประโยชน์จากโมเดล LoRA ที่ปรับแต่งแล้ว ปรับแต่งลักษณะการทำงานของ LLM ผ่านกระบวนการฝึกอบรมที่คุ้มค่า
การรองรับ LoRA ของ LLM Inference API ใช้งานได้กับโมเดล Gemma-2B และ Phi-2 สำหรับ แบ็กเอนด์ของ GPU ที่มีน้ำหนัก LoRA ที่ใช้กับเลเยอร์ความสนใจเท่านั้น ช่วงเวลานี้ การใช้งานเริ่มต้นทำหน้าที่เป็น API ทดลองสำหรับการพัฒนาในอนาคต โดยมีแผนที่จะรองรับโมเดลเพิ่มเติมและเลเยอร์ประเภทต่างๆ ในอนาคต อัปเดต
เตรียมโมเดล LoRA
ทำตามวิธีการใน HuggingFace เพื่อฝึกโมเดล LoRA ที่ปรับแต่งโดยละเอียดในชุดข้อมูลของคุณเองด้วยประเภทโมเดลที่รองรับ ได้แก่ Gemma-2B หรือ Phi-2 ทั้งรุ่น Gemma-2B และ Phi-2 มีให้บริการใน HuggingFace ในรูปแบบ Safetensors เนื่องจาก LLM Inference 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 ที่ปรับแต่งอย่างละเอียดและเข้าถึงได้แบบสาธารณะซึ่งเหมาะกับ LLM Inference API ซึ่งพร้อมใช้งานใน HuggingFace เช่น monsterapi/gemma-2b-lora-maths-orca-200k สำหรับ Gemma-2B และ lole25/phi-2-sft-ultrachat-lora สำหรับ Phi-2
หลังจากฝึกในชุดข้อมูลที่เตรียมไว้และบันทึกโมเดล คุณได้รับไฟล์ adapter_model.safetensors
ที่มีน้ำหนักโมเดล LoRA ที่ปรับแต่งอย่างละเอียด ไฟล์ Safetensor คือจุดตรวจ LoRA ที่ใช้ในการแปลงโมเดล
ในขั้นตอนถัดไป คุณต้องแปลงน้ำหนักโมเดลเป็น Flatbuffer ของ TensorFlow Lite โดยใช้แพ็กเกจ MediaPipe Python ConversionConfig
ควรระบุตัวเลือกรุ่นพื้นฐานรวมถึงตัวเลือก LoRA เพิ่มเติม โปรดสังเกตว่าเนื่องจาก API รองรับการอนุมาน LoRA กับ GPU เท่านั้น จึงต้องตั้งค่าแบ็กเอนด์เป็น '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 Flatbuffer 2 ไฟล์ โดยไฟล์หนึ่งสำหรับโมเดลฐาน และอีกอย่างสำหรับโมเดล LoRA
การอนุมานโมเดล LoRA
LLM Inference API บนเว็บ, Android และ iOS ได้รับการอัปเดตให้รองรับการอนุมานโมเดล LoRA เว็บรองรับ LoRA แบบไดนามิก ซึ่งเปลี่ยน LoRA รุ่นต่างๆ ในระหว่างรันไทม์ได้ Android และ iOS รองรับ 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()
เดียวกันกับโมเดลฐาน