LLM Inference API ช่วยให้คุณเรียกใช้โมเดลภาษาขนาดใหญ่ (LLM) บนอุปกรณ์ได้อย่างสมบูรณ์ ซึ่งคุณสามารถใช้เพื่อทำงานได้หลากหลาย เช่น สร้างข้อความ ดึงข้อมูลในรูปแบบภาษาธรรมชาติ และ สรุปเอกสาร งานนี้รองรับโมเดลภาษาขนาดใหญ่แบบข้อความต่อข้อความหลายรายการในตัว คุณจึงใช้โมเดล Generative AI ล่าสุดในอุปกรณ์กับแอปและผลิตภัณฑ์ได้
งานนี้รองรับ LLM ที่หลากหลายในตัว โมเดลที่โฮสต์ในหน้าชุมชน LiteRT พร้อมใช้งานในรูปแบบที่เหมาะกับ MediaPipe และไม่จำเป็นต้องมีขั้นตอนการแปลงหรือการคอมไพล์เพิ่มเติม
คุณสามารถใช้ LiteRT Torch เพื่อ
ส่งออกโมเดล PyTorch เป็นโมเดล LiteRT แบบหลายลายเซ็น (tflite) ซึ่ง
รวมอยู่กับพารามิเตอร์โทเค็นไนเซอร์เพื่อสร้าง Task Bundle โมเดลที่แปลงด้วย LiteRT Torch ใช้ได้กับ LLM Inference API และสามารถทำงานในแบ็กเอนด์ CPU ได้ จึงเหมาะสำหรับแอปพลิเคชัน Android และ iOS
เริ่มต้นใช้งาน
เริ่มใช้ฟีเจอร์นี้โดยทำตามคำแนะนำในการติดตั้งใช้งานสำหรับแพลตฟอร์มเป้าหมาย คำแนะนำเฉพาะแพลตฟอร์มเหล่านี้จะแนะนำการใช้งานพื้นฐานของงานนี้ พร้อมตัวอย่างโค้ดที่ใช้โมเดลที่มีอยู่และตัวเลือกการกำหนดค่าที่แนะนำ
เว็บ:
Android
iOS
รายละเอียดงาน
ส่วนนี้จะอธิบายความสามารถ อินพุต เอาต์พุต และตัวเลือกการกำหนดค่า ของงานนี้
ฟีเจอร์
LLM Inference API มีฟีเจอร์หลักต่อไปนี้
- การสร้างข้อความจากข้อความ - สร้างข้อความตามพรอมต์ข้อความอินพุต
- การเลือก LLM - ใช้โมเดลหลายรายการเพื่อปรับแต่งแอปให้เหมาะกับ กรณีการใช้งานที่เฉพาะเจาะจง นอกจากนี้ คุณยังฝึกโมเดลซ้ำและใช้ค่าถ่วงน้ำหนักที่ปรับแต่งแล้วกับโมเดลได้ด้วย
- การรองรับ LoRA - ขยายและปรับแต่งความสามารถของ LLM ด้วยโมเดล LoRA โดยการฝึกโมเดลในชุดข้อมูลทั้งหมดของคุณ หรือใช้โมเดล LoRA ที่สร้างไว้ล่วงหน้า จากชุมชนโอเพนซอร์ส (ใช้ร่วมกับโมเดลที่แปลงด้วย Generative API ของ LiteRT Torch ไม่ได้)
| อินพุตของงาน | เอาต์พุตของงาน |
|---|---|
LLM Inference API รับอินพุตต่อไปนี้
|
LLM Inference API จะแสดงผลลัพธ์ต่อไปนี้
|
ตัวเลือกการกำหนดค่า
งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้
| ชื่อตัวเลือก | คำอธิบาย | ช่วงค่า | ค่าเริ่มต้น |
|---|---|---|---|
modelPath |
เส้นทางไปยังตำแหน่งที่จัดเก็บโมเดลภายในไดเรกทอรีโปรเจ็กต์ | เส้นทาง | ไม่มี |
maxTokens |
จำนวนโทเค็นสูงสุด (โทเค็นอินพุต + โทเค็นเอาต์พุต) ที่โมเดลจัดการ | จำนวนเต็ม | 512 |
topK |
จำนวนโทเค็นที่โมเดลพิจารณาในแต่ละขั้นตอนของการสร้าง จำกัดการคาดการณ์ไว้ที่โทเค็นที่มีความน่าจะเป็นสูงสุด k รายการ | จำนวนเต็ม | 40 |
temperature |
ระดับความสุ่มที่ใช้ระหว่างการสร้าง อุณหภูมิที่สูงขึ้น จะทำให้ข้อความที่สร้างขึ้นมีความคิดสร้างสรรค์มากขึ้น ขณะที่อุณหภูมิที่ต่ำลง จะทำให้การสร้างข้อความคาดการณ์ได้มากขึ้น | ทศนิยม | 0.8 |
randomSeed |
ค่าเริ่มต้นแบบสุ่มที่ใช้ระหว่างการสร้างข้อความ | จำนวนเต็ม | 0 |
loraPath |
เส้นทางแบบสัมบูรณ์ไปยังโมเดล LoRA ในอุปกรณ์ หมายเหตุ: ใช้ได้กับโมเดล GPU เท่านั้น | เส้นทาง | ไม่มี |
resultListener |
ตั้งค่า Listener ผลลัพธ์เพื่อรับผลลัพธ์แบบไม่พร้อมกัน ใช้ได้เมื่อใช้วิธีการสร้างแบบไม่พร้อมกันเท่านั้น | ไม่มี | ไม่มี |
errorListener |
ตั้งค่าเครื่องมือฟังข้อผิดพลาดที่ไม่บังคับ | ไม่มี | ไม่มี |
โมเดล
LLM Inference API รองรับโมเดลภาษาขนาดใหญ่แบบข้อความต่อข้อความหลายโมเดล รวมถึง การรองรับในตัวสำหรับโมเดลหลายโมเดลที่ได้รับการเพิ่มประสิทธิภาพให้ทำงานบนเบราว์เซอร์และ อุปกรณ์เคลื่อนที่ โมเดลน้ำหนักเบาเหล่านี้สามารถใช้เพื่อเรียกใช้การอนุมาน ในอุปกรณ์ได้อย่างสมบูรณ์
ก่อนเริ่มต้นใช้ LLM Inference API ให้ดาวน์โหลดโมเดลและจัดเก็บไฟล์ ไว้ในไดเรกทอรีโปรเจ็กต์ คุณสามารถใช้โมเดลที่แปลงไว้ล่วงหน้าจากที่เก็บ LiteRT Community ของ HuggingFace หรือแปลงโมเดลเป็นรูปแบบที่เข้ากันได้กับ MediaPipe ด้วย AI Edge Torch Generative Converter
หากยังไม่มี LLM ที่จะใช้กับ LLM Inference API ให้เริ่มต้นใช้งานด้วยโมเดลต่อไปนี้
Gemma-3n
Gemma-3n E2B และ E4B เป็นโมเดลล่าสุดในกลุ่มผลิตภัณฑ์ Gemma ซึ่งเป็นโมเดลแบบเปิดที่มีน้ำหนักเบา ล้ำสมัย สร้างขึ้นจากการวิจัยและเทคโนโลยีเดียวกันกับที่ใช้สร้างโมเดล Gemini โมเดล Gemma 3n ได้รับการออกแบบมาให้ทำงานได้อย่างมีประสิทธิภาพในอุปกรณ์ที่มีทรัพยากรต่ำ โดยสามารถ รับอินพุตหลายรูปแบบ ประมวลผลอินพุตข้อความ รูปภาพ และเสียง รวมถึงสร้างเอาต์พุตข้อความ ได้
โมเดล Gemma 3n ใช้เทคโนโลยีการเปิดใช้งานพารามิเตอร์แบบเลือกเพื่อลดข้อกำหนดด้านทรัพยากร เทคนิคนี้ช่วยให้โมเดลทำงานได้โดยมีขนาดที่มีประสิทธิภาพเป็นพารามิเตอร์ 2 พันล้านและ 4 พันล้าน ซึ่งต่ำกว่าจำนวนพารามิเตอร์ทั้งหมดที่โมเดลมี
โมเดล Gemma-3n E2B และ E4B จาก HuggingFace พร้อมใช้งานในรูปแบบ
.litertlm และพร้อมใช้งานกับ LLM Inference API สำหรับ Android
และเว็บ
Gemma-3 1B
Gemma-3 1B เป็นโมเดลที่เบาที่สุดในกลุ่มโมเดลแบบเปิดที่เบาและล้ำสมัยของ Gemma สร้างขึ้นจากการวิจัยและเทคโนโลยีเดียวกันกับที่ใช้สร้างโมเดล Gemini โมเดลมีพารามิเตอร์ 1 พันล้านรายการ และน้ำหนักแบบเปิด
โมเดล Gemma-3 1B จาก HuggingFace พร้อมใช้งานในรูปแบบ .task/.litertlm และพร้อมใช้งานกับ LLM Inference API สำหรับแอปพลิเคชัน Android และเว็บ
เมื่อเรียกใช้ Gemma-3 1B ด้วย LLM Inference API ให้กำหนดค่าตัวเลือกต่อไปนี้ตามนั้น
preferredBackend: ใช้ตัวเลือกนี้เพื่อเลือกระหว่างแบ็กเอนด์CPUหรือGPUตัวเลือกนี้ใช้ได้กับ Android เท่านั้นsupportedLoraRanks: ไม่สามารถกำหนดค่า LLM Inference API ให้รองรับ Low-Rank Adaptation (LoRA) ด้วยโมเดล Gemma-3 1B อย่าใช้ตัวเลือกsupportedLoraRanksหรือloraRanksmaxTokens: ค่าสำหรับmaxTokensต้องตรงกับขนาดบริบทที่สร้าง ไว้ในโมเดล ซึ่งอาจเรียกว่าแคชคีย์-ค่า (KV) หรือความยาวบริบทnumResponses: ต้องเป็น 1 เสมอ ตัวเลือกนี้ใช้ได้กับเว็บเท่านั้น
เมื่อเรียกใช้ Gemma-3 1B ในเว็บแอปพลิเคชัน การเริ่มต้นอาจทำให้เกิดการบล็อกที่ยาวนานในเธรดปัจจุบัน หากเป็นไปได้ ให้เรียกใช้โมเดลจากเธรดของ Worker เสมอ
Gemma-2 2B
Gemma-2 2B เป็นรุ่น 2B ของ Gemma-2 และใช้งานได้ในทุกแพลตฟอร์ม
โมเดลนี้มีพารามิเตอร์ 2 พันล้านรายการและน้ำหนักแบบเปิด Gemma-2 2B ขึ้นชื่อเรื่อง ทักษะการให้เหตุผลที่ล้ำสมัยสำหรับโมเดลในคลาสของตัวเอง
การแปลงโมเดล PyTorch
โมเดล Generative ของ PyTorch สามารถแปลงเป็นรูปแบบที่เข้ากันได้กับ MediaPipe ได้โดยใช้ LiteRT Torch Generative API คุณสามารถใช้ API เพื่อแปลงโมเดล PyTorch เป็นโมเดล LiteRT (TensorFlow Lite) แบบหลายลายเซ็นได้ ดูรายละเอียดเพิ่มเติมเกี่ยวกับการแมปและการส่งออกโมเดลได้ที่หน้า GitHub ของ LiteRT Torch
การแปลงโมเดล PyTorch ด้วย LiteRT Torch Generative API มีขั้นตอนดังนี้
- ดาวน์โหลดจุดตรวจสอบโมเดล PyTorch
- ใช้ LiteRT Torch Generative API เพื่อเขียน แปลง และควอนไทซ์โมเดล
เป็นรูปแบบไฟล์ที่เข้ากันได้กับ MediaPipe (
.tflite) - สร้าง Task Bundle (
.task/.litertlm) จากไฟล์ tflite และ ตัวแยกโทเค็นของโมเดล
ตัวแปลง Generative ของ Torch จะแปลงสำหรับ CPU เท่านั้น และต้องใช้เครื่อง Linux ที่มี RAM อย่างน้อย 64 GB
หากต้องการสร้าง Task Bundle ให้ใช้สคริปต์ การจัดกลุ่ม เพื่อสร้าง Task Bundle กระบวนการจัดกลุ่มจะแพ็กโมเดลที่แมปไว้พร้อมกับ ข้อมูลเมตาเพิ่มเติม (เช่น พารามิเตอร์ของโทเค็น) ที่จำเป็นต่อการเรียกใช้การอนุมานแบบครบวงจร
กระบวนการรวมโมเดลต้องใช้แพ็กเกจ MediaPipe PyPI สคริปต์ Conversion
พร้อมใช้งานในแพ็กเกจ MediaPipe ทั้งหมดหลังจาก 0.10.14
ติดตั้งและนำเข้าทรัพยากร Dependency ด้วยคำสั่งต่อไปนี้
$ python3 -m pip install mediapipe
ใช้ไลบรารี genai.bundler เพื่อรวมโมเดล
import mediapipe as mp
from mediapipe.tasks.python.genai import bundler
config = bundler.BundleConfig(
tflite_model=TFLITE_MODEL,
tokenizer_model=TOKENIZER_MODEL,
start_token=START_TOKEN,
stop_tokens=STOP_TOKENS,
output_filename=OUTPUT_FILENAME,
enable_bytes_to_unicode_mapping=ENABLE_BYTES_TO_UNICODE_MAPPING,
)
bundler.create_bundle(config)
| พารามิเตอร์ | คำอธิบาย | ค่าที่ยอมรับ |
|---|---|---|
tflite_model |
เส้นทางไปยังโมเดล TFLite ที่ส่งออกจาก AI Edge | เส้นทาง |
tokenizer_model |
เส้นทางไปยังโมเดลโทเค็นไนเซอร์ SentencePiece | เส้นทาง |
start_token |
โทเค็นเริ่มต้นเฉพาะของโมเดล โทเค็นเริ่มต้นต้องอยู่ในโมเดลโทเค็นไนเซอร์ที่ระบุ | STRING |
stop_tokens |
โทเค็นหยุดเฉพาะโมเดล โทเค็นหยุดต้องอยู่ใน โมเดลโทเค็นไนเซอร์ที่ระบุ | LIST[STRING] |
output_filename |
ชื่อของไฟล์บันเดิลงานเอาต์พุต | เส้นทาง |
การปรับแต่ง LoRA
คุณกำหนดค่า API การอนุมาน LLM ของ MediaPipe ให้รองรับการปรับ Low-Rank Adaptation (LoRA) สำหรับโมเดลภาษาขนาดใหญ่ได้ นักพัฒนาซอฟต์แวร์สามารถปรับแต่งลักษณะการทำงานของ LLM ผ่านกระบวนการฝึกที่มีประสิทธิภาพด้านต้นทุนได้โดยใช้โมเดล LoRA ที่ได้รับการปรับแต่งการรองรับ LoRA ของ LLM Inference API ใช้ได้กับ Gemma ทุกรุ่นและโมเดล Phi-2 สำหรับแบ็กเอนด์ GPU โดยน้ำหนัก LoRA จะใช้ได้กับเลเยอร์ความสนใจเท่านั้น การใช้งานครั้งแรกนี้เป็น API เวอร์ชันทดลองสำหรับการพัฒนาในอนาคต โดยมีแผนที่จะรองรับโมเดลและเลเยอร์ประเภทต่างๆ เพิ่มเติมในการอัปเดตที่จะมาถึง
เตรียมโมเดล LoRA
ทำตามวิธีการใน
HuggingFace
เพื่อฝึกโมเดล LoRA ที่ปรับแต่งแล้วในชุดข้อมูลของคุณเองด้วยประเภทโมเดลที่รองรับ ได้แก่
Gemma หรือ Phi-2 โมเดล Gemma-2 2B, Gemma
2B และ
Phi-2 พร้อมให้บริการใน HuggingFace ในรูปแบบ safetensors เนื่องจาก 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 โดยใช้แพ็กเกจ Python ของ MediaPipe 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
เราได้อัปเดต Web, Android และ iOS LLM Inference API ให้รองรับการอนุมานโมเดล LoRA
Android รองรับ LoRA แบบคงที่ในระหว่างการเริ่มต้น หากต้องการโหลดโมเดล LoRA ผู้ใช้จะต้อง ระบุเส้นทางโมเดล LoRA รวมถึง LLM พื้นฐาน// Set the configuration options for the LLM Inference task
val options = LlmInferenceOptions.builder()
.setModelPath('<path to base model>')
.setMaxTokens(1000)
.setTopK(40)
.setTemperature(0.8)
.setRandomSeed(101)
.setLoraPath('<path to LoRA model>')
.build()
// Create an instance of the LLM Inference task
llmInference = LlmInference.createFromOptions(context, options)
หากต้องการเรียกใช้การอนุมาน LLM ด้วย LoRA ให้ใช้วิธีการ generateResponse() หรือ
generateResponseAsync() เดียวกันกับโมเดลพื้นฐาน