LLM Inference API ช่วยให้คุณเรียกใช้โมเดลภาษาขนาดใหญ่ (LLM) บนอุปกรณ์ได้ทั้งหมดสําหรับแอปพลิเคชัน iOS ซึ่งคุณใช้ทํางานได้หลากหลาย เช่น การสร้างข้อความ ดึงข้อมูลในรูปแบบภาษาธรรมชาติ และสรุปเอกสาร งานนี้รองรับโมเดลภาษาขนาดใหญ่แบบข้อความเป็นข้อความหลายรายการในตัว คุณจึงใช้โมเดล Generative AI เวอร์ชันล่าสุดในอุปกรณ์กับแอป iOS ได้
แท็บนี้จะรองรับตัวแปรต่อไปนี้ของ Gemma ได้แก่ Gemma-2 2B, Gemma 2B และ Gemma 7B Gemma เป็นกลุ่มผลิตภัณฑ์โมเดลแบบเปิดที่ทันสมัยและน้ำหนักเบา ซึ่งสร้างขึ้นจากงานวิจัยและเทคโนโลยีเดียวกับที่ใช้สร้างโมเดล Gemini และยังรองรับรุ่นภายนอกต่อไปนี้ด้วย Phi-2, Falcon-RW-1B และ StableLM-3B
นอกจากโมเดลที่รองรับแล้ว ผู้ใช้ยังสามารถใช้ AI Edge
Torch ของ Google เพื่อส่งออกโมเดล PyTorch ไปยังโมเดล LiteRT (tflite
) ที่มีลายเซ็นหลายรายการ ซึ่งจะรวมอยู่กับพารามิเตอร์ตัวแยกวิเคราะห์เพื่อสร้างกลุ่มงานที่เข้ากันได้กับ LLM Inference API
คุณดูการทำงานของงานนี้ได้จากการสาธิต MediaPipe Studio ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ รูปแบบ และตัวเลือกการกําหนดค่าของงานนี้ได้ที่ภาพรวม
ตัวอย่างโค้ด
โค้ดตัวอย่างของ MediaPipe Tasks คือการใช้งานพื้นฐานของ LLM Inference API app สําหรับ 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
ที่มี Pod ที่จําเป็นสําหรับแอปได้ที่การใช้ CocoaPods
เพิ่มพ็อด MediaPipeTasksGenai
ใน Podfile
โดยใช้โค้ดต่อไปนี้
target 'MyLlmInferenceApp' do
use_frameworks!
pod 'MediaPipeTasksGenAI'
pod 'MediaPipeTasksGenAIC'
end
หากแอปมีเป้าหมายการทดสอบหน่วย ให้ดูข้อมูลเพิ่มเติมเกี่ยวกับการตั้งค่า Podfile
ในคู่มือการตั้งค่าสําหรับ iOS
รุ่น
งาน MediaPipe LLM Inference API ต้องใช้โมเดลที่ผ่านการฝึกอบรมซึ่งเข้ากันได้กับงานนี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลที่ผ่านการฝึกอบรมแล้วสำหรับ LLM Inference API ได้ที่ภาพรวมของงานส่วนโมเดล
ดาวน์โหลดโมเดล
ดาวน์โหลดโมเดลและเพิ่มลงในไดเรกทอรีโปรเจ็กต์โดยใช้ Xcode ดูวิธีการเพิ่มไฟล์ลงในโปรเจ็กต์ Xcode ได้ที่การจัดการไฟล์และโฟลเดอร์ในโปรเจ็กต์ Xcode
ก่อนเริ่มต้น LLM Inference API ให้ดาวน์โหลดโมเดลที่รองรับรายการใดรายการหนึ่งต่อไปนี้และจัดเก็บไฟล์ไว้ในไดเรกทอรีโปรเจ็กต์
- Gemma-2 2B: รุ่นล่าสุดของตระกูล Gemma เป็นส่วนหนึ่งของกลุ่มโมเดลแบบเปิดที่ทันสมัยและน้ำหนักเบาซึ่งสร้างขึ้นจากงานวิจัยและเทคโนโลยีเดียวกันกับที่ใช้สร้างโมเดล Gemini
- Gemma 2B:เป็นส่วนหนึ่งของกลุ่มโมเดลแบบเปิดที่ทันสมัยและน้ำหนักเบาซึ่งสร้างขึ้นจากงานวิจัยและเทคโนโลยีเดียวกันกับที่ใช้สร้างโมเดล Gemini เหมาะสําหรับงานการสร้างข้อความที่หลากหลาย ซึ่งรวมถึงการตอบคําถาม การสรุป และการหาเหตุผล
- Phi-2: โมเดล Transformer ที่มีพารามิเตอร์ 2.7 พันล้านรายการ ซึ่งเหมาะสําหรับรูปแบบคําถามและคําตอบ แชท และโค้ด
- Falcon-RW-1B: โมเดลเฉพาะตัวถอดรหัสเชิงสาเหตุที่มีพารามิเตอร์ 1,000 ล้านรายการซึ่งได้รับการฝึกด้วยโทเค็น 350,000 ล้านรายการจาก RefinedWeb
- StableLM-3B: โมเดลภาษาแบบตัวถอดรหัสพารามิเตอร์เท่านั้นที่มี 3 พันล้านพารามิเตอร์ ซึ่งได้รับการฝึกล่วงหน้าด้วยโทเค็น 1 ล้านล้านรายการจากชุดข้อมูลภาษาอังกฤษและโค้ดที่หลากหลาย
นอกจากโมเดลที่รองรับแล้ว คุณยังใช้ AI Edge
Torch ของ Google เพื่อส่งออกโมเดล PyTorch ไปยังโมเดล LiteRT (tflite
) ที่มีลายเซ็นหลายรายการได้ ดูข้อมูลเพิ่มเติมได้ที่เครื่องมือแปลง Torch Generative สําหรับโมเดล PyTorch
เราขอแนะนําให้ใช้ Gemma-2 2B ซึ่งมีอยู่ใน Kaggle Models ดูข้อมูลเพิ่มเติมเกี่ยวกับโมเดลอื่นๆ ที่มีได้ที่ภาพรวมของงานในส่วนโมเดล
แปลงโมเดลเป็นรูปแบบ MediaPipe
LLM Inference API ใช้ได้กับโมเดล 2 ประเภท ซึ่งบางประเภทต้องมีการแปลงโมเดล ใช้ตารางเพื่อระบุขั้นตอนและวิธีการที่จำเป็นสำหรับโมเดลของคุณ
โมเดล | วิธีการแปลง | แพลตฟอร์มที่เข้ากันได้ | ประเภทไฟล์ | |
---|---|---|---|---|
รุ่นที่รองรับ | Gemma 2B, Gemma 7B, Gemma-2 2B, Phi-2, StableLM, Falcon | MediaPipe | Android, iOS, เว็บ | .bin |
โมเดล PyTorch อื่นๆ | โมเดล LLM ของ PyTorch ทั้งหมด | ไลบรารี Generative ของ AI Edge Torch | Android, iOS | .task |
เราโฮสต์ไฟล์ .bin
ที่แปลงแล้วสำหรับ Gemma 2B, Gemma 7B และ Gemma-2 2B บน Kaggle คุณทำให้โมเดลเหล่านี้ใช้งานได้โดยตรงโดยใช้ LLM Inference API หากต้องการดูวิธีแปลงรูปแบบอื่นๆ โปรดดูส่วนการแปลงรูปแบบ
สร้างงาน
คุณสร้างงาน 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 |
เส้นทางไปยังตำแหน่งที่จัดเก็บโมเดลภายในไดเรกทอรีโปรเจ็กต์ | PATH | ไม่มี |
maxTokens |
จํานวนโทเค็นสูงสุด (โทเค็นอินพุต + โทเค็นเอาต์พุต) ที่โมเดลจัดการได้ | จำนวนเต็ม | 512 |
topk |
จำนวนโทเค็นที่โมเดลพิจารณาในแต่ละขั้นตอนของการสร้าง จำกัดการคาดการณ์ไว้ที่โทเค็นที่เป็นไปได้มากที่สุด k รายการแรก | จำนวนเต็ม | 40 |
temperature |
ระดับความสุ่มที่เกิดขึ้นระหว่างการสร้าง อุณหภูมิที่สูงขึ้นจะทำให้ข้อความที่สร้างขึ้นมีความสร้างสรรค์มากขึ้น ขณะที่อุณหภูมิที่ต่ำลงจะทำให้การสร้างขึ้นมีความคาดเดาได้มากขึ้น | ทศนิยม | 0.8 |
randomSeed |
เมล็ดพันธุ์แบบสุ่มที่ใช้ระหว่างการสร้างข้อความ | จำนวนเต็ม | 0 |
loraPath |
เส้นทางแบบสัมบูรณ์ไปยังโมเดล LoRA ในอุปกรณ์ หมายเหตุ: ใช้ได้กับ GPU บางรุ่นเท่านั้น | PATH | ไม่มี |
เตรียมข้อมูล
LLM Inference API ใช้งานได้กับข้อมูลข้อความ งานจะจัดการการประมวลผลข้อมูลก่อนป้อน ซึ่งรวมถึงการแยกคำและการประมวลผลเทนเซอร์ก่อนป้อน
ระบบจะจัดการการประมวลผลข้อมูลล่วงหน้าทั้งหมดภายในฟังก์ชัน 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 จะแสดงข้อความตอบกลับที่สร้างขึ้น
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
คุณสามารถกําหนดค่า API การอนุมาน LLM ของ Mediapipe ให้รองรับการปรับรูปแบบตามลําดับชั้นต่ำ (LoRA) สําหรับโมเดลภาษาขนาดใหญ่ได้ การใช้โมเดล LoRA ที่ปรับแต่งมาอย่างดีช่วยให้นักพัฒนาแอปปรับแต่งลักษณะการทํางานของ LLM ผ่านกระบวนการฝึกที่ประหยัดค่าใช้จ่ายได้
การรองรับ LoRA ของ LLM Inference API ใช้ได้กับตัวแปร Gemma และโมเดล Phi-2 ทั้งหมดสําหรับแบ็กเอนด์ GPU โดยน้ำหนัก LoRA ใช้ได้กับเลเยอร์การใส่ใจเท่านั้น การใช้งานครั้งแรกนี้ถือเป็น API เวอร์ชันทดลองสําหรับการพัฒนาในอนาคต โดยมีแผนที่จะรองรับโมเดลและเลเยอร์ประเภทต่างๆ เพิ่มเติมในการอัปเดตที่กําลังจะมาถึง
เตรียมโมเดล LoRA
ทําตามวิธีการใน HuggingFace เพื่อฝึกโมเดล LoRA ที่ปรับแต่งอย่างละเอียดในชุดข้อมูลของคุณเองด้วยประเภทโมเดลที่รองรับ ซึ่งได้แก่ Gemma หรือ Phi-2 โมเดล Gemma-2 2B, Gemma
2B และ Phi-2 พร้อมใช้งานใน HuggingFace ในรูปแบบ SafeTensor เนื่องจาก 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 ที่ปรับแต่งอย่างละเอียดซึ่งเข้ากันได้กับ 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 ที่ปรับแต่งอย่างละเอียด
ไฟล์ safetensors คือจุดตรวจสอบ LoRA ที่ใช้ในการแปลงโมเดล
ขั้นตอนถัดไปคือคุณต้องแปลงน้ำหนักโมเดลเป็น TensorFlow Lite Flatbuffer โดยใช้แพ็กเกจ 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)
ตัวแปลงจะแสดงผลไฟล์ Flatbuffer ของ TFLite 2 ไฟล์ ไฟล์หนึ่งสำหรับโมเดลฐานและอีกไฟล์สำหรับโมเดล LoRA
การอนุมานโมเดล LoRA
อัปเดต LLM Inference API ของเว็บ, Android และ iOS เพื่อรองรับการอนุมานโมเดล 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()
เดียวกันกับโมเดลพื้นฐาน