LLM Inference API ช่วยให้คุณเรียกใช้โมเดลภาษาขนาดใหญ่ (LLM) บนอุปกรณ์ได้อย่างสมบูรณ์ ซึ่งคุณสามารถใช้เพื่อทำงานได้หลากหลาย เช่น สร้างข้อความ ดึงข้อมูลในรูปแบบภาษาธรรมชาติ และ สรุปเอกสาร โดยงานนี้รองรับโมเดลภาษาขนาดใหญ่แบบข้อความต่อข้อความหลายรายการในตัว คุณจึงใช้โมเดล Generative AI ล่าสุดในอุปกรณ์กับแอปและผลิตภัณฑ์ได้
งานนี้รองรับ LLM ที่หลากหลายในตัว โมเดลที่โฮสต์ในหน้าชุมชน LiteRT พร้อมใช้งานในรูปแบบที่เหมาะกับ MediaPipe และไม่จำเป็นต้องมีขั้นตอนการแปลงหรือการคอมไพล์เพิ่มเติม
คุณสามารถใช้ AI Edge Torch เพื่อ
ส่งออกโมเดล PyTorch เป็นโมเดล LiteRT (tflite
) แบบหลายลายเซ็น ซึ่ง
มาพร้อมกับพารามิเตอร์ของโทเค็นไนเซอร์เพื่อสร้าง Task Bundle โมเดลที่แปลงด้วย AI Edge Torch ใช้ได้กับ LLM Inference API และสามารถทำงานในแบ็กเอนด์ของ CPU ได้ จึงเหมาะสำหรับแอปพลิเคชัน Android และ iOS
เริ่มต้นใช้งาน
เริ่มใช้ฟีเจอร์นี้โดยทำตามคำแนะนำในการติดตั้งใช้งานรายการใดรายการหนึ่งต่อไปนี้สำหรับแพลตฟอร์มเป้าหมาย คำแนะนำเฉพาะแพลตฟอร์มเหล่านี้จะแนะนำการใช้งานพื้นฐานของงานนี้ พร้อมตัวอย่างโค้ดที่ใช้โมเดลที่มีอยู่และตัวเลือกการกำหนดค่าที่แนะนำ
เว็บ
Android
iOS
รายละเอียดงาน
ส่วนนี้จะอธิบายความสามารถ อินพุต เอาต์พุต และตัวเลือกการกำหนดค่า ของงานนี้
ฟีเจอร์
API การอนุมาน LLM มีฟีเจอร์หลักต่อไปนี้
- การสร้างข้อความจากข้อความ - สร้างข้อความตามพรอมต์ข้อความอินพุต
- การเลือก LLM - ใช้โมเดลหลายรายการเพื่อปรับแต่งแอปให้เหมาะกับ กรณีการใช้งานที่เฉพาะเจาะจง นอกจากนี้ คุณยังฝึกโมเดลอีกครั้งและใช้ค่าถ่วงน้ำหนักที่ปรับแต่งแล้วกับโมเดลได้ด้วย
- การรองรับ LoRA - ขยายและปรับแต่งความสามารถของ LLM ด้วยโมเดล LoRA โดยการฝึกในชุดข้อมูลทั้งหมดของคุณ หรือใช้โมเดล LoRA ที่สร้างไว้ล่วงหน้าจากชุมชนโอเพนซอร์ส (ไม่รองรับโมเดลที่แปลงด้วย AI Edge Torch Generative API)
อินพุตของงาน | เอาต์พุตของงาน |
---|---|
LLM Inference API รับข้อมูลต่อไปนี้
|
LLM Inference API จะแสดงผลลัพธ์ต่อไปนี้
|
ตัวเลือกการกำหนดค่า
งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้
ชื่อตัวเลือก | คำอธิบาย | ช่วงค่า | ค่าเริ่มต้น |
---|---|---|---|
modelPath |
เส้นทางไปยังตำแหน่งที่จัดเก็บโมเดลภายในไดเรกทอรีโปรเจ็กต์ | เส้นทาง | ไม่มี |
maxTokens |
จำนวนโทเค็นสูงสุด (โทเค็นอินพุต + โทเค็นเอาต์พุต) ที่โมเดลจัดการ | จำนวนเต็ม | 512 |
topK |
จำนวนโทเค็นที่โมเดลพิจารณาในแต่ละขั้นตอนของการสร้าง จำกัดการคาดการณ์ไว้ที่โทเค็นที่มีแนวโน้มมากที่สุด k อันดับแรก | จำนวนเต็ม | 40 |
temperature |
ระดับความสุ่มที่ใช้ระหว่างการสร้าง อุณหภูมิที่สูงขึ้นจะทำให้ข้อความที่สร้างขึ้นมีความคิดสร้างสรรค์มากขึ้น ขณะที่อุณหภูมิที่ต่ำลงจะทำให้การสร้างข้อความคาดการณ์ได้มากขึ้น | ทศนิยม | 0.8 |
randomSeed |
ค่าเริ่มต้นแบบสุ่มที่ใช้ระหว่างการสร้างข้อความ | จำนวนเต็ม | 0 |
loraPath |
เส้นทางแบบสัมบูรณ์ไปยังโมเดล LoRA ในอุปกรณ์ หมายเหตุ: ใช้ได้กับรุ่น GPU เท่านั้น | เส้นทาง | ไม่มี |
resultListener |
ตั้งค่าเครื่องมือฟังผลลัพธ์เพื่อรับผลลัพธ์แบบไม่พร้อมกัน ใช้ได้เมื่อใช้วิธีการสร้างแบบไม่พร้อมกันเท่านั้น | ไม่มี | ไม่มี |
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
หรือloraRanks
maxTokens
: ค่าสำหรับmaxTokens
ต้องตรงกับขนาดบริบทที่สร้างขึ้น ในโมเดล ซึ่งอาจเรียกว่าแคชคีย์-ค่า (KV) หรือความยาวบริบทnumResponses
: ต้องเป็น 1 เสมอ ตัวเลือกนี้ใช้ได้กับเว็บเท่านั้น
เมื่อเรียกใช้ Gemma-3 1B ในเว็บแอปพลิเคชัน การเริ่มต้นอาจทำให้เกิดการบล็อกที่ยาวนานในเธรดปัจจุบัน หากเป็นไปได้ ให้เรียกใช้โมเดลจาก Worker Thread เสมอ
Gemma-2 2B
Gemma-2 2B เป็นรุ่น 2B ของ Gemma-2 และใช้งานได้ในทุกแพลตฟอร์ม
โมเดลนี้มีพารามิเตอร์ 2 พันล้านรายการและน้ำหนักแบบเปิด Gemma-2 2B ขึ้นชื่อเรื่อง ทักษะการให้เหตุผลที่ล้ำสมัยสำหรับโมเดลในคลาสของตน
การแปลงโมเดล PyTorch
คุณสามารถแปลงโมเดล Generative ของ PyTorch เป็นรูปแบบที่เข้ากันได้กับ MediaPipe ได้โดยใช้ AI Edge Torch Generative API คุณสามารถใช้ API เพื่อแปลงโมเดล PyTorch เป็นโมเดล LiteRT (TensorFlow Lite) แบบหลายลายเซ็นได้ ดูรายละเอียดเพิ่มเติมเกี่ยวกับการแมปและการส่งออกโมเดลได้ที่หน้า GitHub ของ AI Edge Torch
การแปลงโมเดล PyTorch ด้วย AI Edge Torch Generative API มีขั้นตอนดังนี้
- ดาวน์โหลดจุดตรวจสอบโมเดล PyTorch
- ใช้ AI Edge Torch Generative API เพื่อเขียน แปลง และควอนไทซ์
โมเดลเป็นรูปแบบไฟล์ที่เข้ากันได้กับ MediaPipe (
.tflite
) - สร้าง Task Bundle (
.task
/.litertlm
) จากไฟล์ tflite และ ตัวแยกโทเค็นของโมเดล
ตัวแปลง Generative ของ Torch จะแปลงสำหรับ CPU เท่านั้น และต้องใช้เครื่อง Linux ที่มี RAM อย่างน้อย 64 GB
หากต้องการสร้าง Task Bundle ให้ใช้สคริปต์ การจัดกลุ่ม เพื่อสร้าง Task Bundle กระบวนการจัดกลุ่มจะแพ็กโมเดลที่แมปไว้พร้อมกับ ข้อมูลเมตาเพิ่มเติม (เช่น พารามิเตอร์ Tokenizer) ที่จำเป็นต่อการเรียกใช้การอนุมานแบบครบวงจร
กระบวนการรวมโมเดลต้องใช้แพ็กเกจ MediaPipe PyPI สคริปต์ Conversion
จะพร้อมใช้งานในแพ็กเกจ MediaPipe ทั้งหมดหลังจาก 0.10.14
ติดตั้งและนำเข้าการอ้างอิงด้วยคำสั่งต่อไปนี้
$ 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()
เดียวกันกับโมเดลพื้นฐาน