คู่มือการสรุป LLM

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

เริ่มต้นใช้งาน

เริ่มใช้ฟีเจอร์นี้โดยทำตามคำแนะนำในการติดตั้งใช้งานรายการใดรายการหนึ่งต่อไปนี้สำหรับแพลตฟอร์มเป้าหมาย คำแนะนำเฉพาะแพลตฟอร์มเหล่านี้จะแนะนำการใช้งานพื้นฐานของงานนี้ พร้อมตัวอย่างโค้ดที่ใช้โมเดลที่มีอยู่และตัวเลือกการกำหนดค่าที่แนะนำ

รายละเอียดงาน

ส่วนนี้จะอธิบายความสามารถ อินพุต เอาต์พุต และตัวเลือกการกำหนดค่า ของงานนี้

ฟีเจอร์

API การอนุมาน LLM มีฟีเจอร์หลักต่อไปนี้

  1. การสร้างข้อความจากข้อความ - สร้างข้อความตามพรอมต์ข้อความอินพุต
  2. การเลือก LLM - ใช้โมเดลหลายรายการเพื่อปรับแต่งแอปให้เหมาะกับ กรณีการใช้งานที่เฉพาะเจาะจง นอกจากนี้ คุณยังฝึกโมเดลอีกครั้งและใช้ค่าถ่วงน้ำหนักที่ปรับแต่งแล้วกับโมเดลได้ด้วย
  3. การรองรับ 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

ดาวน์โหลด Gemma-3n E4B

โมเดล Gemma-3n E2B และ E4B จาก HuggingFace พร้อมใช้งานในรูปแบบ .litertlm และพร้อมใช้งานกับ LLM Inference API สำหรับ Android

Gemma-3 1B

Gemma-3 1B เป็นโมเดลที่เบาที่สุดในกลุ่มโมเดลแบบเปิดที่เบาและล้ำสมัยของ Gemma ซึ่งสร้างขึ้นจากการวิจัยและเทคโนโลยีเดียวกันกับที่ใช้สร้างโมเดล Gemini โมเดลมีพารามิเตอร์ 1 พันล้านรายการ และน้ำหนักแบบเปิด

ดาวน์โหลด Gemma-3 1B

โมเดล 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 และใช้งานได้ในทุกแพลตฟอร์ม

ดาวน์โหลด Gemma-2 2B

โมเดลนี้มีพารามิเตอร์ 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 มีขั้นตอนดังนี้

  1. ดาวน์โหลดจุดตรวจสอบโมเดล PyTorch
  2. ใช้ AI Edge Torch Generative API เพื่อเขียน แปลง และควอนไทซ์ โมเดลเป็นรูปแบบไฟล์ที่เข้ากันได้กับ MediaPipe (.tflite)
  3. สร้าง 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() เดียวกันกับโมเดลพื้นฐาน