LLM Inference API ช่วยให้คุณเรียกใช้โมเดลภาษาขนาดใหญ่ (LLM) บนอุปกรณ์ได้ทั้งหมด ซึ่งคุณใช้เพื่อทำงานได้หลากหลาย เช่น การสร้างข้อความ การดึงข้อมูลในรูปแบบภาษาธรรมชาติ และการสรุปเอกสาร งานนี้รองรับโมเดลภาษาขนาดใหญ่แบบข้อความเป็นข้อความหลายรายการในตัว คุณจึงใช้โมเดล Generative AI บนอุปกรณ์ล่าสุดกับแอปและผลิตภัณฑ์ได้
งานนี้รองรับ LLM หลายรายการในตัว โมเดลที่โฮสต์ในหน้าชุมชน LiteRT มีให้บริการในรูปแบบที่ MediaPipe รองรับและไม่จําเป็นต้องแปลงหรือคอมไพล์เพิ่มเติม
คุณสามารถใช้ AI Edge Torch เพื่อส่งออกโมเดล PyTorch เป็นโมเดล LiteRT (tflite
) แบบหลายลายเซ็น ซึ่งจะรวมอยู่กับพารามิเตอร์ตัวแยกวิเคราะห์เพื่อสร้างกลุ่มงาน โมเดลที่แปลงด้วย AI Edge Torch เข้ากันได้กับ LLM Inference API และสามารถทํางานบนแบ็กเอนด์ CPU ซึ่งเหมาะสําหรับแอปพลิเคชัน Android และ iOS
เริ่มต้นใช้งาน
เริ่มใช้แท็บงานนี้โดยทําตามคําแนะนําการใช้งานแพลตฟอร์มเป้าหมายข้อใดข้อหนึ่งต่อไปนี้ คำแนะนำเฉพาะแพลตฟอร์มเหล่านี้จะแนะนำการใช้งานพื้นฐานของงานนี้พร้อมตัวอย่างโค้ดที่ใช้โมเดลที่มีอยู่และตัวเลือกการกำหนดค่าที่แนะนำ
เว็บ
Android
iOS
รายละเอียดงาน
ส่วนนี้จะอธิบายความสามารถ อินพุต เอาต์พุต และตัวเลือกการกำหนดค่าของงานนี้
ฟีเจอร์
LLM Inference API มีฟีเจอร์หลักๆ ดังนี้
- การสร้างข้อความจากข้อความ - สร้างข้อความตามพรอมต์ข้อความอินพุต
- การเลือก LLM - ใช้หลายรูปแบบเพื่อปรับแต่งแอปให้เหมาะกับกรณีการใช้งานที่เฉพาะเจาะจง นอกจากนี้ คุณยังฝึกและนำน้ำหนักที่กำหนดเองไปใช้กับโมเดลได้ด้วย
- การรองรับ LoRA - ขยายและปรับแต่งความสามารถของ LLM ด้วยโมเดล LoRA โดยการฝึกกับชุดข้อมูลทั้งหมด หรือใช้โมเดล LoRA ที่เตรียมไว้ล่วงหน้าจากชุมชนโอเพนซอร์ส (ใช้ร่วมกับโมเดลที่แปลงด้วย AI Edge Torch Generative API ไม่ได้)
อินพุตงาน | เอาต์พุตของงาน |
---|---|
LLM Inference API ยอมรับอินพุตต่อไปนี้
|
LLM Inference API จะแสดงผลลัพธ์ต่อไปนี้
|
ตัวเลือกการกําหนดค่า
งานนี้มีตัวเลือกการกำหนดค่าต่อไปนี้
ชื่อตัวเลือก | คำอธิบาย | ช่วงของค่า | ค่าเริ่มต้น |
---|---|---|---|
modelPath |
เส้นทางไปยังตำแหน่งที่จัดเก็บโมเดลภายในไดเรกทอรีโปรเจ็กต์ | PATH | ไม่มี |
maxTokens |
จํานวนโทเค็นสูงสุด (โทเค็นอินพุต + โทเค็นเอาต์พุต) ที่โมเดลจัดการได้ | จำนวนเต็ม | 512 |
topK |
จำนวนโทเค็นที่โมเดลพิจารณาในแต่ละขั้นตอนของการสร้าง จำกัดการคาดการณ์ไว้ที่โทเค็นที่เป็นไปได้มากที่สุด k รายการแรก | จำนวนเต็ม | 40 |
temperature |
ระดับความสุ่มที่เกิดขึ้นระหว่างการสร้าง อุณหภูมิที่สูงขึ้นจะทำให้ข้อความที่สร้างขึ้นมีความสร้างสรรค์มากขึ้น ขณะที่อุณหภูมิที่ต่ำลงจะทำให้ระบบสร้างข้อความที่คาดเดาได้มากขึ้น | ทศนิยม | 0.8 |
randomSeed |
เมล็ดพันธุ์แบบสุ่มที่ใช้ระหว่างการสร้างข้อความ | จำนวนเต็ม | 0 |
loraPath |
เส้นทางแบบสัมบูรณ์ไปยังโมเดล LoRA ในอุปกรณ์ หมายเหตุ: ใช้ได้กับ GPU บางรุ่นเท่านั้น | PATH | ไม่มี |
resultListener |
ตั้งค่าโปรแกรมรับฟังผลลัพธ์ให้รับผลลัพธ์แบบไม่พร้อมกัน ใช้ได้เฉพาะเมื่อใช้วิธีการสร้างแบบแอสซิงค์เท่านั้น | ไม่มี | ไม่มี |
errorListener |
ตั้งค่าโปรแกรมรับฟังข้อผิดพลาด (ไม่บังคับ) | ไม่มี | ไม่มี |
โมเดล
LLM Inference API รองรับโมเดลภาษาขนาดใหญ่แบบข้อความต่อข้อความหลายโมเดล รวมถึงการรองรับโมเดลหลายรายการในตัวซึ่งได้รับการเพิ่มประสิทธิภาพให้ทำงานในเบราว์เซอร์และอุปกรณ์เคลื่อนที่ โมเดลขนาดเบาเหล่านี้สามารถใช้เพื่อเรียกใช้การอนุมานในอุปกรณ์ได้ทั้งหมด
ก่อนเริ่มต้น LLM Inference API ให้ดาวน์โหลดโมเดลและจัดเก็บไฟล์ภายในไดเรกทอรีโปรเจ็กต์ คุณสามารถใช้โมเดลที่แปลงไว้ล่วงหน้าจากที่เก็บข้อมูล HuggingFace ของชุมชน LiteRT หรือแปลงโมเดลเป็นรูปแบบที่เข้ากันได้กับ MediaPipe ด้วย AI Converter ของ Edge Torch Generative
หากยังไม่มี LLM ที่จะใช้กับ LLM Inference API ให้เริ่มต้นใช้งานด้วยโมเดลใดโมเดลหนึ่งต่อไปนี้
Gemma-3 1B
Gemma-3 1B เป็นโมเดลล่าสุดในตระกูล Gemma ซึ่งเป็นโมเดลแบบเปิดที่ทันสมัยและน้ำหนักเบาซึ่งสร้างขึ้นจากงานวิจัยและเทคโนโลยีเดียวกับที่ใช้สร้างโมเดล Gemini โมเดลมีพารามิเตอร์ 1,000 ล้านรายการและน้ำหนักแบบเปิด ตัวแปร 1B เป็นรุ่นที่เบาที่สุดในตระกูล Gemma ซึ่งเหมาะสําหรับ Use Case ต่างๆ ในอุปกรณ์
โมเดล Gemma-3 1B จาก HuggingFace มีให้บริการในรูปแบบ .task
และพร้อมใช้งานกับ LLM Inference API สําหรับ Android และเว็บแอปพลิเคชัน
เมื่อเรียกใช้ Gemma-3 1B กับ LLM Inference API ให้กําหนดค่าตัวเลือกต่อไปนี้
preferredBackend
: ใช้ตัวเลือกนี้เพื่อเลือกระหว่างแบ็กเอนด์CPU
หรือGPU
ตัวเลือกนี้ใช้ได้กับ Android เท่านั้นsupportedLoraRanks
: ไม่สามารถกําหนดค่า LLM Inference API ให้รองรับการปรับเปลี่ยนอันดับต่ำ (LoRA) กับโมเดล Gemma-3 1B อย่าใช้ตัวเลือกsupportedLoraRanks
หรือloraRanks
maxTokens
: ค่าของmaxTokens
ต้องตรงกับขนาดบริบทที่สร้างไว้ในโมเดล ซึ่งเรียกอีกอย่างว่าแคชคีย์-ค่า (KV) หรือความยาวของบริบทnumResponses
: ต้องเท่ากับ 1 เสมอ ตัวเลือกนี้ใช้ได้กับเว็บเท่านั้น
เมื่อเรียกใช้ Gemma-3 1B ในเว็บแอปพลิเคชัน การจัดเตรียมอาจทำให้เกิดการบล็อกเป็นเวลานานในเธรดปัจจุบัน หากเป็นไปได้ ให้เรียกใช้โมเดลจากเธรดผู้ทํางานเสมอ
Gemma-2 2B
Gemma-2 2B เป็นตัวแปร 2B ของ Gemma-2 และใช้งานได้บนทุกแพลตฟอร์ม
โดยโมเดลมีพารามิเตอร์ 2B และการถ่วงน้ำหนักแบบเปิด 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
) จากไฟล์ tflite และตัวแยกวิเคราะห์โมเดล
ตัวแปลง Torch Generative จะแปลงสำหรับ CPU เท่านั้น และต้องเป็นเครื่อง Linux ที่มี RAM อย่างน้อย 64 GB
หากต้องการสร้างกลุ่มงาน ให้ใช้สคริปต์การรวมเพื่อสร้างกลุ่มงาน กระบวนการจัดกลุ่มจะรวมโมเดลที่แมปไว้กับข้อมูลเมตาเพิ่มเติม (เช่น พารามิเตอร์ตัวแยกวิเคราะห์) ที่จําเป็นต่อการดำเนินการอนุมานจากต้นทางถึงปลายทาง
กระบวนการรวมโมเดลต้องใช้แพ็กเกจ MediaPipe PyPI สคริปต์การเปลี่ยนรูปแบบจะอยู่ในแพ็กเกจ 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 | PATH |
tokenizer_model |
เส้นทางไปยังโมเดลตัวแยกวิเคราะห์ SentencePiece | PATH |
start_token |
โทเค็นเริ่มต้นเฉพาะโมเดล โทเค็นเริ่มต้นต้องอยู่ในรูปแบบตัวแยกวิเคราะห์ที่ระบุ | STRING |
stop_tokens |
โทเค็นหยุดเฉพาะรุ่น โทเค็นสิ้นสุดต้องอยู่ในโมเดลตัวแยกวิเคราะห์ที่ระบุ | LIST[STRING] |
output_filename |
ชื่อไฟล์กลุ่มงานเอาต์พุต | PATH |
การปรับแต่ง 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
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()
เดียวกันกับโมเดลพื้นฐาน