เรียกใช้ LLM โดยใช้ LiteRT-LM

LiteRT-LM เป็นไลบรารีข้ามแพลตฟอร์มที่ออกแบบมาเพื่อเรียกใช้ไปป์ไลน์โมเดลภาษาอย่างมีประสิทธิภาพในอุปกรณ์หลากหลายประเภท ตั้งแต่โทรศัพท์มือถือไปจนถึงระบบแบบฝัง โดยจะมอบเครื่องมือให้นักพัฒนาซอฟต์แวร์สร้างและติดตั้งใช้งาน เวิร์กโฟลว์โมเดลภาษาที่ซับซ้อน ซึ่งตอนนี้ผสานรวม NPU ได้อย่างราบรื่นแล้ว

เรียกใช้ LLM บน CPU และ GPU

ดูวิธีการโดยละเอียดเกี่ยวกับการพัฒนาข้ามแพลตฟอร์มและการเร่งความเร็วฮาร์ดแวร์ CPU/GPU ได้ที่ที่เก็บ LiteRT-LM ใน GitHub

เรียกใช้ LLM บน NPU

Neural Processing Unit (NPU) มีบล็อกฮาร์ดแวร์เฉพาะที่ได้รับการเพิ่มประสิทธิภาพสำหรับ ภาระงานการเรียนรู้เชิงลึก ปัจจุบันระบบที่ทันสมัยมีชิป (SoC) ที่มีหน่วยประมวลผลกราฟิกมากขึ้น โดยเฉพาะในอุปกรณ์เคลื่อนที่ ประสิทธิภาพสูงทำให้ เหมาะอย่างยิ่งสำหรับการอนุมาน LLM

ผู้ให้บริการ NPU

LiteRT-LM รองรับการเรียกใช้ LLM โดยใช้การเร่งความเร็ว NPU กับผู้ให้บริการต่อไปนี้ เลือกวิธีการตามผู้ให้บริการที่คุณต้องการ ลองใช้

คู่มือเริ่มต้นฉบับย่อ

หากต้องการเริ่มต้นใช้งาน ให้ทำตามวิธีการในข้อกำหนดเบื้องต้น ก่อนเพื่อตั้งค่าสภาพแวดล้อมและที่เก็บ

นอกจากนี้ หากต้องการโต้ตอบกับอุปกรณ์ Android ให้ตรวจสอบว่าคุณได้ติดตั้ง Android Debug Bridge อย่างถูกต้องแล้ว และมีอุปกรณ์ที่เชื่อมต่อซึ่งเข้าถึงได้โดยใช้ adb

ดูวิธีการโดยละเอียดเพิ่มเติมได้ที่ส่วนเริ่มต้นใช้งานฉบับย่อในที่เก็บ LiteRT-LM และดูข้อมูลเพิ่มเติมเกี่ยวกับlitert_lm_main การสาธิตบรรทัดคำสั่ง

Qualcomm AI Engine Direct

ขั้นตอนการเรียกใช้ LLM บน NPU ของ Qualcomm มีดังนี้

ขั้นตอนที่ 1: ดาวน์โหลดโมเดล .litertlm รันไทม์ LiteRT-LM ออกแบบมาให้ทำงานกับโมเดลในรูปแบบ .litertlm คุณค้นหาและดาวน์โหลดโมเดลที่เข้ากันได้ในตารางต่อไปนี้

รุ่น SoC การทำให้เล็กลง ขนาดบริบท ขนาดโมเดล (Mb) ลิงก์ดาวน์โหลด
Gemma3-1B SM8750 4 บิตต่อช่อง 1280 658 download
Gemma3-1B SM8650 4 บิตต่อช่อง 1280 658 download
Gemma3-1B SM8550 4 บิตต่อช่อง 1280 657 download

คุณจะต้องดาวน์โหลดโมเดลที่สอดคล้องกับ SoC ต่อไปนี้คือตัวอย่างคำสั่งที่จะช่วยให้คุณได้รับลิงก์ Hugging Face ซึ่ง สามารถดาวน์โหลดโมเดลที่ถูกต้องสำหรับ SoC ของโทรศัพท์ (โปรดทราบว่าคุณจะต้อง เข้าสู่ระบบและรับทราบแบบฟอร์มเพื่อให้มีสิทธิ์ดาวน์โหลด ไฟล์) คุณควรตรวจสอบว่ามีอุปกรณ์ที่เชื่อมต่ออยู่ซึ่งเข้าถึงได้โดยใช้ adb

SOC_MODEL=$(adb shell getprop ro.soc.model | tr '[:upper:]' '[:lower:]')
echo "https://huggingface.co/litert-community/Gemma3-1B-IT/blob/main/Gemma3-1B-IT_q4_ekv1280_${SOC_MODEL}.litertlm"

ตรวจสอบว่า $SOC_MODEL แสดงอยู่ในตารางการสนับสนุน ลิงก์ที่สร้างขึ้นจะใช้ไม่ได้กับรุ่นที่ไม่รองรับ เรากำลังเพิ่มการรองรับ NPU ใหม่ๆ อย่างสม่ำเสมอ โปรดกลับมาตรวจสอบอีกครั้งในภายหลังเพื่อดูว่าอุปกรณ์ของคุณรองรับหรือไม่

ขั้นตอนที่ 2: ดาวน์โหลดและแตกไฟล์ไลบรารี QAIRT หากต้องการเรียกใช้โมเดลโดยใช้ NPU ของ Qualcomm คุณจะต้องมีไลบรารีรันไทม์ที่เกี่ยวข้อง ในอุปกรณ์ คุณสามารถดาวน์โหลด QAIRT SDK ได้จากลิงก์และแตกไฟล์ ตั้งค่าตัวแปร QAIRT_ROOT (จะใช้ในขั้นตอนต่อๆ ไป) เพื่อชี้ไปยังโฟลเดอร์ที่คลายซิปแล้วซึ่งมีหมายเลขเวอร์ชัน เช่น

unzip <your_file.zip> -d ~/

QAIRT_ROOT=~/qairt/2.42.0.251225

ขั้นตอนที่ 3: สร้างรันไทม์ / ไลบรารี LiteRT-LM

พัฒนาใน Linux

หากต้องการสร้างไบนารีสำหรับ Android คุณต้องติดตั้ง NDK r28b หรือ ใหม่กว่าจาก https://developer.android.com/ndk/downloads#stable-downloads ขั้นตอนที่เฉพาะเจาะจงมีดังนี้

  • ดาวน์โหลดไฟล์ zip จาก https://developer.android.com/ndk/downloads#stable-downloads
  • แตกไฟล์ zip ไปยังตำแหน่งที่ต้องการ (เช่น /path/to/AndroidNDK/)
  • สร้าง ANDROID_NDK_HOME เพื่อชี้ไปยังไดเรกทอรี NDK โดยควรมีลักษณะดังนี้
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

เคล็ดลับ: ตรวจสอบว่า ANDROID_NDK_HOME ชี้ไปยังไดเรกทอรีที่มี README.md อยู่

เมื่อตั้งค่าแล้ว ให้ลองสร้างไบนารี litert_lm_main ดังนี้

bazel build --config=android_arm64 //runtime/engine:litert_lm_main

นอกจากนี้ เราควรสร้างไลบรารี Dispatch API เพื่อให้รันไทม์ LiteRT-LM โต้ตอบกับ NPU ได้ ดังนี้

bazel build --config=android_arm64 \
    @litert//litert/vendors/qualcomm/dispatch:dispatch_api_so

พัฒนาใน macOS

เครื่องมือบรรทัดคำสั่ง Xcode มี clang เรียกใช้ xcode-select --install หากยังไม่ได้ติดตั้ง

หากต้องการสร้างไบนารีสำหรับ Android คุณต้องติดตั้ง NDK r28b หรือ ใหม่กว่าจาก https://developer.android.com/ndk/downloads#stable-downloads ขั้นตอนที่เฉพาะเจาะจงมีดังนี้

  • ดาวน์โหลดไฟล์ .dmg จาก https://developer.android.com/ndk/downloads#stable-downloads
  • เปิดไฟล์ .dmg แล้วย้ายไฟล์ AndroidNDK* ไปยังตำแหน่งที่ต้องการ (เช่น /path/to/AndroidNDK/)
  • สร้าง ANDROID_NDK_HOME เพื่อชี้ไปยังไดเรกทอรี NDK โดยควรมีลักษณะดังนี้
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

เคล็ดลับ: ตรวจสอบว่า ANDROID_NDK_HOME ชี้ไปยังไดเรกทอรีที่มี README.md อยู่

เมื่อตั้งค่าแล้ว ให้ลองสร้างไบนารี litert_lm_main ดังนี้

bazel build --config=android_arm64 //runtime/engine:litert_lm_main

นอกจากนี้ เราควรสร้างไลบรารี Dispatch API เพื่อให้รันไทม์ LiteRT-LM โต้ตอบกับ NPU ได้ ดังนี้

bazel build --config=android_arm64 \
    @litert//litert/vendors/qualcomm/dispatch:dispatch_api_so

ขั้นตอนที่ 4: เรียกใช้โมเดลในอุปกรณ์ หลังจากสร้างไบนารีเรียบร้อยแล้ว ตอนนี้เราสามารถลองเรียกใช้โมเดลใน อุปกรณ์ได้ ตรวจสอบว่าคุณมีสิทธิ์เขียนใน DEVICE_FOLDER

หากต้องการเรียกใช้ไบนารีในอุปกรณ์ Android เราต้องพุชชิ้นงาน /ไบนารีบางรายการ ก่อนอื่น ให้ตั้งค่า DEVICE_FOLDER และตรวจสอบว่าคุณมีสิทธิ์การเขียน ในนั้น (โดยปกติคุณจะวางสิ่งต่างๆ ไว้ใน /data/local/tmp/ ได้)

export DEVICE_FOLDER=/data/local/tmp/
adb shell mkdir -p $DEVICE_FOLDER

export MODEL_PATH=<path to your downloaded .litertlm >

ส่งไฟล์ .litertlm เคล็ดลับ: คุณต้องพุชชิ้นงานเหล่านั้นเพียงครั้งเดียว

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

เผยแพร่ไลบรารี QAIRT โดยคุณจะเห็นไฟล์เหล่านี้ในโฟลเดอร์ที่ไม่ได้ซิปในขั้นตอนที่ 2 $QAIRT_ROOT/lib/aarch64-android/ โปรดทราบว่า QAIRT_ROOT ควร มีหมายเลขเวอร์ชัน เช่น 2.42.0.251225

adb push $QAIRT_ROOT/lib/aarch64-android/libQnnHtp*Stub.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnHtp.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnSystem.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/aarch64-android/libQnnHtpPrepare.so $DEVICE_FOLDER
adb push $QAIRT_ROOT/lib/hexagon-*/unsigned/libQnnHtp*Skel.so $DEVICE_FOLDER

พุช API การเรียกใช้และไบนารีหลักที่คอมไพล์ในขั้นตอนที่ 3

adb push bazel-bin/external/litert/litert/vendors/qualcomm/*/*.so \
    $DEVICE_FOLDER
adb push prebuilt/android_arm64/*.so $DEVICE_FOLDER
adb push bazel-bin/runtime/engine/litert_lm_main $DEVICE_FOLDER

ตอนนี้คุณสามารถเรียกใช้ไบนารีได้แล้ว

adb shell LD_LIBRARY_PATH=$DEVICE_FOLDER ADSP_LIBRARY_PATH=$DEVICE_FOLDER \
    $DEVICE_FOLDER/litert_lm_main \
    --backend=npu \
    --model_path=$DEVICE_FOLDER/model.litertlm

MediaTek NeuroPilot

ขั้นตอนการเรียกใช้ LLM ใน NPU ของ MediaTek มีดังนี้

ขั้นตอนที่ 1: ดาวน์โหลดโมเดล .litertlm รันไทม์ LiteRT-LM ออกแบบมาให้ทำงานกับโมเดลในรูปแบบ .litertlm คุณค้นหาและดาวน์โหลดโมเดลที่เข้ากันได้ในตารางต่อไปนี้

รุ่น SoC การทำให้เล็กลง ขนาดบริบท ขนาดโมเดล (Mb) ลิงก์ดาวน์โหลด
Gemma3-1B MT6989 4 บิตต่อช่อง 1280 985 download
Gemma3-1B MT6991 4 บิตต่อช่อง 1280 986 download

คุณจะต้องดาวน์โหลดโมเดลที่สอดคล้องกับ SoC ต่อไปนี้คือตัวอย่างคำสั่งที่จะช่วยให้คุณได้รับลิงก์ Hugging Face ซึ่ง สามารถดาวน์โหลดโมเดลที่ถูกต้องสำหรับ SoC ของโทรศัพท์ (โปรดทราบว่าคุณจะต้อง เข้าสู่ระบบและรับทราบแบบฟอร์มเพื่อให้มีสิทธิ์ดาวน์โหลด ไฟล์) คุณควรตรวจสอบว่ามีอุปกรณ์ที่เชื่อมต่ออยู่ซึ่งเข้าถึงได้โดยใช้ adb

SOC_MODEL=$(adb shell getprop ro.soc.model | tr '[:upper:]' '[:lower:]')
echo "https://huggingface.co/litert-community/Gemma3-1B-IT/blob/main/Gemma3-1B-IT_q4_ekv1280_${SOC_MODEL}.litertlm"

ตรวจสอบว่า $SOC_MODEL แสดงอยู่ในตารางการสนับสนุน ลิงก์ที่สร้างขึ้นจะใช้ไม่ได้กับรุ่นที่ไม่รองรับ เรากำลังเพิ่มการรองรับ NPU ใหม่ๆ อย่างสม่ำเสมอ โปรดกลับมาตรวจสอบอีกครั้งในภายหลังเพื่อดูว่าอุปกรณ์ของคุณรองรับหรือไม่

ขั้นตอนที่ 2: สร้างรันไทม์ / ไลบรารี LiteRT-LM

พัฒนาใน Linux

หากต้องการสร้างไบนารีสำหรับ Android คุณต้องติดตั้ง NDK r28b หรือ ใหม่กว่าจาก https://developer.android.com/ndk/downloads#stable-downloads ขั้นตอนที่เฉพาะเจาะจงมีดังนี้

  • ดาวน์โหลดไฟล์ zip จาก https://developer.android.com/ndk/downloads#stable-downloads
  • แตกไฟล์ zip ไปยังตำแหน่งที่ต้องการ (เช่น /path/to/AndroidNDK/)
  • สร้าง ANDROID_NDK_HOME เพื่อชี้ไปยังไดเรกทอรี NDK โดยควรมีลักษณะดังนี้
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

เคล็ดลับ: ตรวจสอบว่า ANDROID_NDK_HOME ชี้ไปยังไดเรกทอรีที่มี README.md อยู่

เมื่อตั้งค่าแล้ว ให้ลองสร้างไบนารี litert_lm_main ดังนี้

bazel build --config=android_arm64 //runtime/engine:litert_lm_main

นอกจากนี้ เราควรสร้างไลบรารี Dispatch API เพื่อให้รันไทม์ LiteRT-LM โต้ตอบกับ NPU ได้ ดังนี้

bazel build --config=android_arm64 \
    @litert//litert/vendors/mediatek/dispatch:dispatch_api_so

พัฒนาใน macOS

เครื่องมือบรรทัดคำสั่ง Xcode มี clang เรียกใช้ xcode-select --install หากยังไม่ได้ติดตั้ง

หากต้องการสร้างไบนารีสำหรับ Android คุณต้องติดตั้ง NDK r28b หรือ ใหม่กว่าจาก https://developer.android.com/ndk/downloads#stable-downloads ขั้นตอนที่เฉพาะเจาะจงมีดังนี้

  • ดาวน์โหลดไฟล์ .dmg จาก https://developer.android.com/ndk/downloads#stable-downloads
  • เปิดไฟล์ .dmg แล้วย้ายไฟล์ AndroidNDK* ไปยังตำแหน่งที่ต้องการ (เช่น /path/to/AndroidNDK/)
  • สร้าง ANDROID_NDK_HOME เพื่อชี้ไปยังไดเรกทอรี NDK โดยควรมีลักษณะดังนี้
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

เคล็ดลับ: ตรวจสอบว่า ANDROID_NDK_HOME ชี้ไปยังไดเรกทอรีที่มี README.md อยู่

เมื่อตั้งค่าแล้ว ให้ลองสร้างไบนารี litert_lm_main ดังนี้

bazel build --config=android_arm64 //runtime/engine:litert_lm_main

นอกจากนี้ เราควรสร้างไลบรารี Dispatch API เพื่อให้รันไทม์ LiteRT-LM โต้ตอบกับ NPU ได้ ดังนี้

bazel build --config=android_arm64 \
    @litert//litert/vendors/mediatek/dispatch:dispatch_api_so

ขั้นตอนที่ 3: เรียกใช้โมเดลในอุปกรณ์ หลังจากสร้างไบนารีเรียบร้อยแล้ว ตอนนี้เราสามารถลองเรียกใช้โมเดลใน อุปกรณ์ได้ ตรวจสอบว่าคุณมีสิทธิ์เขียนใน DEVICE_FOLDER

หากต้องการเรียกใช้ไบนารีในอุปกรณ์ Android เราต้องพุชชิ้นงาน /ไบนารีบางรายการ ก่อนอื่น ให้ตั้งค่า DEVICE_FOLDER และตรวจสอบว่าคุณมีสิทธิ์การเขียน ในนั้น (โดยปกติคุณจะวางสิ่งต่างๆ ไว้ใน /data/local/tmp/ ได้)

export DEVICE_FOLDER=/data/local/tmp/
adb shell mkdir -p $DEVICE_FOLDER

export MODEL_PATH=<path to your downloaded .litertlm >

ส่งไฟล์ .litertlm เคล็ดลับ: คุณต้องพุชชิ้นงานเหล่านั้นเพียงครั้งเดียว

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

พุช API การเรียกใช้และไบนารีหลักที่คอมไพล์ในขั้นตอนที่ 2

adb push bazel-bin/external/litert/litert/vendors/mediatek/*/*.so \
    $DEVICE_FOLDER
adb push prebuilt/android_arm64/*.so $DEVICE_FOLDER
adb push bazel-bin/runtime/engine/litert_lm_main $DEVICE_FOLDER

ตอนนี้คุณสามารถเรียกใช้ไบนารีได้แล้ว

adb shell LD_LIBRARY_PATH=$DEVICE_FOLDER \
    $DEVICE_FOLDER/litert_lm_main \
    --backend=npu \
    --model_path=$DEVICE_FOLDER/model.litertlm