LLM Inference API ช่วยให้คุณเรียกใช้โมเดลภาษาขนาดใหญ่ (LLM) บนอุปกรณ์ได้อย่างสมบูรณ์ สำหรับแอปพลิเคชัน iOS ซึ่งคุณสามารถใช้เพื่อทำงานได้หลากหลาย เช่น การสร้างข้อความ การดึงข้อมูลในรูปแบบภาษาธรรมชาติ และ การสรุปเอกสาร งานนี้รองรับโมเดลภาษาขนาดใหญ่แบบข้อความต่อข้อความหลายรายการในตัว คุณจึงใช้โมเดล Generative AI ล่าสุดในอุปกรณ์กับแอป iOS ได้
หากต้องการเพิ่ม LLM Inference API ลงในแอปพลิเคชัน iOS อย่างรวดเร็ว ให้ทำตามการเริ่มต้นใช้งานอย่างรวดเร็ว ดูตัวอย่างพื้นฐานของแอปพลิเคชัน iOS ที่เรียกใช้ LLM Inference API ได้ที่แอปพลิเคชันตัวอย่าง หากต้องการทําความเข้าใจวิธีการทํางานของ LLM Inference API อย่างละเอียด โปรดดูส่วนตัวเลือกการกําหนดค่า การแปลงโมเดล และการปรับแต่ง LoRA
คุณดูการทำงานของงานนี้ได้ในการสาธิต MediaPipe Studio ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ โมเดล และตัวเลือกการกำหนดค่า ของงานนี้ได้ที่ภาพรวม
คู่มือเริ่มใช้งานฉบับย่อ
ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่ม LLM Inference API ลงในแอปพลิเคชัน iOS
LLM Inference API ใช้ไลบรารี MediaPipeTasksGenai ซึ่งต้องติดตั้งโดยใช้ CocoaPods ไลบรารีนี้ใช้ได้กับทั้งแอป Swift และ Objective-C
และไม่จำเป็นต้องมีการตั้งค่าเพิ่มเติมเฉพาะภาษา
ดูวิธีการติดตั้ง CocoaPods ใน macOS ได้ที่คู่มือการติดตั้ง CocoaPods
ดูวิธีการสร้าง Podfile ที่มีพ็อดที่จำเป็นสำหรับแอปได้ที่การใช้
CocoaPods
เพิ่มทรัพยากร Dependency
เพิ่มพ็อด MediaPipeTasksGenai ใน Podfile โดยใช้โค้ดต่อไปนี้
target 'MyLlmInferenceApp' do
use_frameworks!
pod 'MediaPipeTasksGenAI'
pod 'MediaPipeTasksGenAIC'
end
หากแอปมีเป้าหมายการทดสอบหน่วย โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า Podfile ในคู่มือการตั้งค่าสำหรับ
iOS
ดาวน์โหลดโมเดล
ดาวน์โหลด Gemma-2 2B ในรูปแบบที่หาค่าปริมาณ 8 บิตจาก 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)
เรียกใช้งาน
ใช้เมธอด 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 ใช้ได้กับโมเดลประเภทต่อไปนี้ ซึ่งบางโมเดลต้องมีการแปลง ใช้ตารางเพื่อระบุขั้นตอนที่จำเป็น วิธีสำหรับโมเดลของคุณ
| โมเดล | วิธีการ Conversion | แพลตฟอร์มที่รองรับ | ประเภทไฟล์ |
|---|---|---|---|
| Gemma-3 1B | ไม่จำเป็นต้องแปลง | Android, เว็บ | .task |
| Gemma 2B, Gemma 7B, Gemma-2 2B | ไม่จำเป็นต้องแปลง | Android, iOS, เว็บ | .bin |
| Phi-2, StableLM, Falcon | สคริปต์การแปลง MediaPipe | Android, iOS, เว็บ | .bin |
| โมเดล LLM ทั้งหมดของ PyTorch | ไลบรารีการสร้าง LiteRT Torch | Android, iOS | .task |
ดูวิธีแปลงโมเดลอื่นๆ ได้ที่ส่วนการแปลงโมเดล
การปรับแต่ง LoRA
LLM Inference API รองรับการปรับแต่ง LoRA (Low-Rank Adaptation) โดยใช้ไลบรารี PEFT (Parameter-Efficient Fine-Tuning) การปรับแต่ง LoRA จะปรับแต่งลักษณะการทำงานของ LLM ผ่านกระบวนการฝึกที่มีต้นทุนต่ำ โดยสร้างชุดน้ำหนักที่ฝึกได้ขนาดเล็กตามข้อมูลการฝึกใหม่แทนที่จะฝึกโมเดลทั้งหมดอีกครั้ง
LLM Inference API รองรับการเพิ่มน้ำหนัก LoRA ลงในเลเยอร์ความสนใจของโมเดล Gemma-2 2B, Gemma 2B และ Phi-2 ดาวน์โหลดโมเดลในรูปแบบ safetensors
โมเดลพื้นฐานต้องอยู่ในรูปแบบ safetensors จึงจะสร้างน้ำหนัก LoRA ได้
หลังจากการฝึก LoRA คุณจะแปลงโมเดลเป็นรูปแบบ FlatBuffers
เพื่อเรียกใช้ใน MediaPipe ได้
เตรียมน้ำหนัก LoRA
ใช้คำแนะนำวิธีการ LoRA จาก PEFT เพื่อฝึกโมเดล LoRA ที่ปรับแต่งแล้วในชุดข้อมูลของคุณเอง
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 ที่ใช้ในระหว่างการแปลงโมเดล
การแปลงโมเดล
ใช้แพ็กเกจ Python ของ MediaPipe เพื่อแปลงน้ำหนักของโมเดลเป็นรูปแบบ 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 2 ไฟล์ ไฟล์หนึ่งสำหรับโมเดลพื้นฐานและ อีกไฟล์หนึ่งสำหรับโมเดล 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() เดียวกันกับโมเดลพื้นฐาน