LLM Inference API ช่วยให้คุณเรียกใช้โมเดลภาษาขนาดใหญ่ (LLM) บนอุปกรณ์ได้ทั้งหมดสําหรับเว็บแอปพลิเคชัน ซึ่งคุณใช้ทํางานได้หลากหลาย เช่น การสร้างข้อความ ดึงข้อมูลในรูปแบบภาษาธรรมชาติ และสรุปเอกสาร งานนี้รองรับโมเดลภาษาขนาดใหญ่แบบข้อความเป็นข้อความหลายรายการในตัว คุณจึงใช้โมเดล Generative AI เวอร์ชันล่าสุดในอุปกรณ์กับเว็บแอปได้
หากต้องการเพิ่ม LLM Inference API ลงในเว็บแอปอย่างรวดเร็ว ให้ทําตามการเริ่มต้นใช้งานอย่างรวดเร็ว ดูตัวอย่างพื้นฐานของเว็บแอปพลิเคชันที่เรียกใช้ LLM Inference API ได้ที่ตัวอย่างแอปพลิเคชัน หากต้องการทําความเข้าใจวิธีการทํางานของ LLM Inference API อย่างละเอียดยิ่งขึ้น โปรดดูส่วนตัวเลือกการกําหนดค่า การเปลี่ยนรูปแบบ และการปรับ LoRA
คุณดูการทำงานของงานนี้ได้จากการสาธิต MediaPipe Studio ดูข้อมูลเพิ่มเติมเกี่ยวกับความสามารถ รูปแบบ และตัวเลือกการกําหนดค่าของงานนี้ได้ที่ภาพรวม
คู่มือเริ่มใช้งานฉบับย่อ
ทําตามขั้นตอนต่อไปนี้เพื่อเพิ่ม LLM Inference API ลงในเว็บแอปพลิเคชัน LLM Inference API ต้องใช้เว็บเบราว์เซอร์ที่เข้ากันได้กับ WebGPU ดูรายการเบราว์เซอร์ทั้งหมดที่เข้ากันได้ได้ที่ความเข้ากันได้ของเบราว์เซอร์กับ GPU
เพิ่มการพึ่งพา
LLM Inference API ใช้แพ็กเกจ @mediapipe/tasks-genai
ติดตั้งแพ็กเกจที่จําเป็นสําหรับการจัดเตรียมเวอร์ชันที่ใช้งานจริงในเครื่อง
npm install @mediapipe/tasks-genai
หากต้องการติดตั้งใช้งานในเซิร์ฟเวอร์ ให้ใช้บริการเครือข่ายนำส่งข้อมูล (CDN) เช่น jsDelivr เพื่อเพิ่มโค้ดลงในหน้า HTML โดยตรง ดังนี้
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/genai_bundle.cjs"
crossorigin="anonymous"></script>
</head>
ดาวน์โหลดโมเดล
ดาวน์โหลด Gemma-2 2B ในรูปแบบ 8 บิตจาก Kaggle Models ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบที่ใช้ได้ได้ที่เอกสารประกอบเกี่ยวกับรูปแบบ
จัดเก็บโมเดลภายในไดเรกทอรีโปรเจ็กต์
<dev-project-root>/assets/gemma-2b-it-gpu-int8.bin
ระบุเส้นทางของโมเดลด้วยพารามิเตอร์baseOptions
ออบเจ็กต์ modelAssetPath
ดังนี้
baseOptions: { modelAssetPath: `/assets/gemma-2b-it-gpu-int8.bin`}
เริ่มต้นใช้งาน Tasks
เริ่มต้นใช้งานงานด้วยตัวเลือกการกําหนดค่าพื้นฐาน
const genai = await FilesetResolver.forGenAiTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm"
);
llmInference = await LlmInference.createFromOptions(genai, {
baseOptions: {
modelAssetPath: '/assets/gemma-2b-it-gpu-int8.bin'
},
maxTokens: 1000,
topK: 40,
temperature: 0.8,
randomSeed: 101
});
เรียกใช้งาน
ใช้ฟังก์ชัน generateResponse()
เพื่อทริกเกอร์การอนุมาน
const response = await llmInference.generateResponse(inputPrompt);
document.getElementById('output').textContent = response;
หากต้องการสตรีมคำตอบ ให้ใช้สิ่งต่อไปนี้
llmInference.generateResponse(
inputPrompt,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});
แอปพลิเคชันตัวอย่าง
แอปพลิเคชันตัวอย่างนี้เป็นตัวอย่างแอปการสร้างข้อความพื้นฐานสําหรับเว็บที่ใช้ LLM Inference API คุณสามารถใช้แอปนี้เป็นจุดเริ่มต้นสําหรับเว็บแอปของคุณเอง หรือใช้อ้างอิงเมื่อแก้ไขแอปที่มีอยู่ โค้ดตัวอย่างจะโฮสต์อยู่ใน GitHub
โคลนที่เก็บ Git โดยใช้คําสั่งต่อไปนี้
git clone https://github.com/google-ai-edge/mediapipe-samples
โปรดดูข้อมูลเพิ่มเติมที่คู่มือการตั้งค่าสําหรับเว็บ
ตัวเลือกการกำหนดค่า
ใช้ตัวเลือกการกําหนดค่าต่อไปนี้เพื่อตั้งค่าเว็บแอป
ชื่อตัวเลือก | คำอธิบาย | ช่วงของค่า | ค่าเริ่มต้น |
---|---|---|---|
modelPath |
เส้นทางไปยังตำแหน่งที่จัดเก็บโมเดลภายในไดเรกทอรีโปรเจ็กต์ | PATH | ไม่มี |
maxTokens |
จํานวนโทเค็นสูงสุด (โทเค็นอินพุต + โทเค็นเอาต์พุต) ที่โมเดลจัดการได้ | จำนวนเต็ม | 512 |
topK |
จำนวนโทเค็นที่โมเดลพิจารณาในแต่ละขั้นตอนของการสร้าง จำกัดการคาดการณ์ไว้ที่โทเค็นที่เป็นไปได้มากที่สุด k รายการแรก | จำนวนเต็ม | 40 |
temperature |
ระดับความสุ่มที่เกิดขึ้นระหว่างการสร้าง อุณหภูมิที่สูงขึ้นจะทำให้ข้อความที่สร้างขึ้นมีความสร้างสรรค์มากขึ้น ขณะที่อุณหภูมิที่ต่ำลงจะทำให้ระบบสร้างข้อความที่คาดการณ์ได้มากขึ้น | ทศนิยม | 0.8 |
randomSeed |
เมล็ดพันธุ์แบบสุ่มที่ใช้ระหว่างการสร้างข้อความ | จำนวนเต็ม | 0 |
loraRanks |
อันดับ LoRA ที่โมเดล LoRA จะใช้ระหว่างรันไทม์ หมายเหตุ: ใช้ได้กับ GPU บางรุ่นเท่านั้น | อาร์เรย์จำนวนเต็ม | ไม่มี |
การแปลงโมเดล
LLM Inference API ใช้ได้กับโมเดลประเภทต่อไปนี้ ซึ่งบางประเภทต้องแปลงโมเดล ใช้ตารางเพื่อระบุขั้นตอนและวิธีการที่จำเป็นสำหรับโมเดลของคุณ
โมเดล | วิธีการแปลง | แพลตฟอร์มที่เข้ากันได้ | ประเภทไฟล์ |
---|---|---|---|
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 ทั้งหมด | คลัง Generative ของ AI Edge Torch | Android, iOS | .task |
ดูวิธีแปลงรูปแบบอื่นๆ ได้ที่ส่วน รูปแบบ Conversion
การปรับแต่ง LoRA
LLM Inference API รองรับการปรับ LoRA (Low-Rank Adaptation) โดยใช้ไลบรารี PEFT (Parameter-Efficient Fine-Tuning) การปรับ LoRA จะปรับแต่งลักษณะการทํางานของ LLM ผ่านกระบวนการฝึกที่ประหยัดค่าใช้จ่าย โดยสร้างชุดน้ำหนักที่ฝึกได้จำนวนน้อยๆ โดยอิงตามข้อมูลการฝึกใหม่แทนที่จะฝึกโมเดลทั้งชุดใหม่
LLM Inference API รองรับการเพิ่มน้ำหนัก LoRA ไปยังเลเยอร์ Attention ของโมเดล Gemma-2 2B, Gemma 2B และ Phi-2 ดาวน์โหลดโมเดลในรูปแบบ safetensors
โมเดลพื้นฐานต้องอยู่ในรูปแบบ safetensors
จึงจะสร้างน้ำหนัก LoRA ได้ หลังจากการฝึก LoRA แล้ว คุณสามารถแปลงโมเดลเป็นรูปแบบ FlatBuffers เพื่อใช้งานใน MediaPipe
เตรียมน้ำหนัก LoRA
ใช้คำแนะนำวิธีการ LoRA จาก PEFT เพื่อฝึกโมเดล LoRA ที่ปรับแต่งอย่างละเอียดในชุดข้อมูลของคุณเอง
LLM Inference API รองรับ LoRA ในเลเยอร์ Attention เท่านั้น ดังนั้นโปรดระบุเฉพาะเลเยอร์ Attention ใน 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 ที่ใช้ในการแปลงโมเดล
การแปลงโมเดล
ใช้แพ็กเกจ MediaPipe Python เพื่อแปลงน้ำหนักโมเดลเป็นรูปแบบ 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)
ตัวแปลงจะสร้างไฟล์ที่เข้ากันได้กับ MediaPipe 2 ไฟล์ ไฟล์หนึ่งสำหรับโมเดลฐานและอีกไฟล์สำหรับโมเดล LoRA
การอนุมานโมเดล LoRA
เว็บรองรับ LoRA แบบไดนามิกระหว่างรันไทม์ ซึ่งหมายความว่าผู้ใช้จะประกาศลําดับ LoRA ในระหว่างการเริ่มต้น ซึ่งหมายความว่าคุณสามารถเปลี่ยน LoRA รุ่นต่างๆ ในระหว่างรันไทม์ได้
const genai = await FilesetResolver.forGenAiTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@latest/wasm"
);
const llmInference = await LlmInference.createFromOptions(genai, {
// options for the base model
...
// LoRA ranks to be used by the LoRA models during runtime
loraRanks: [4, 8, 16]
});
โหลดโมเดล LoRA ในระหว่างรันไทม์หลังจากเริ่มต้นโมเดลพื้นฐาน ทริกเกอร์รูปแบบ LoRA ด้วยการส่งการอ้างอิงรูปแบบเมื่อสร้างคำตอบ LLM
// Load several LoRA models. The returned LoRA model reference is used to specify
// which LoRA model to be used for inference.
loraModelRank4 = await llmInference.loadLoraModel(loraModelRank4Url);
loraModelRank8 = await llmInference.loadLoraModel(loraModelRank8Url);
// Specify LoRA model to be used during inference
llmInference.generateResponse(
inputPrompt,
loraModelRank4,
(partialResult, done) => {
document.getElementById('output').textContent += partialResult;
});