LiteRT-LM là một thư viện đa nền tảng được thiết kế để chạy hiệu quả các quy trình mô hình ngôn ngữ trên nhiều loại thiết bị, từ điện thoại di động đến các hệ thống nhúng. Nền tảng này cung cấp cho nhà phát triển các công cụ để tạo và triển khai quy trình mô hình ngôn ngữ phức tạp, hiện có khả năng tích hợp NPU liền mạch.
Chạy LLM trên CPU và GPU
Hãy xem kho lưu trữ LiteRT-LM trên GitHub để biết hướng dẫn chi tiết về hoạt động phát triển trên nhiều nền tảng và tính năng tăng tốc phần cứng CPU/GPU.
Chạy LLM trên NPU
Đơn vị xử lý thần kinh (NPU) cung cấp các khối phần cứng chuyên dụng được tối ưu hoá cho khối lượng công việc học sâu. Chúng ngày càng có nhiều trong các hệ thống hiện đại trên một hệ thống trên vi mạch (SoC), đặc biệt là trên thiết bị di động. Bản chất hiệu suất cao của chúng khiến chúng rất phù hợp để chạy suy luận LLM.
Nhà cung cấp NPU
LiteRT-LM hỗ trợ chạy LLM bằng cách sử dụng tính năng tăng tốc NPU với các nhà cung cấp sau. Chọn hướng dẫn tuỳ thuộc vào nhà cung cấp mà bạn muốn dùng thử:
Bắt đầu nhanh
Để bắt đầu, trước tiên hãy làm theo hướng dẫn trong phần Điều kiện tiên quyết để thiết lập môi trường và kho lưu trữ.
Ngoài ra, để có thể tương tác với thiết bị Android, hãy đảm bảo bạn đã cài đặt đúng cách Cầu gỡ lỗi Android và có một thiết bị đã kết nối mà bạn có thể truy cập bằng adb.
Để biết thêm hướng dẫn chi tiết, hãy xem phần Bắt đầu nhanh trong kho lưu trữ LiteRT-LM và tìm thêm thông tin về litert_lm_main
bản minh hoạ dòng lệnh.
Qualcomm AI Engine Direct
Sau đây là các bước chạy LLM trên NPU của Qualcomm:
Bước 1: Tải mô hình .litertlm xuống
Thời gian chạy LiteRT-LM được thiết kế để hoạt động với các mô hình ở định dạng .litertlm.
Bạn có thể tìm và tải các mẫu tương thích xuống trong bảng sau.
| Mô hình | SoC | Lượng tử hoá | Kích thước ngữ cảnh | Kích thước mô hình (Mb) | Đường liên kết để tải xuống |
|---|---|---|---|---|---|
| Gemma3-1B | SM8750 | 4 bit cho mỗi kênh | 1280 | 658 | download |
| Gemma3-1B | SM8650 | 4 bit cho mỗi kênh | 1280 | 658 | download |
| Gemma3-1B | SM8550 | 4 bit cho mỗi kênh | 1280 | 657 | download |
Bạn sẽ phải tải mô hình tương ứng với SoC của mình xuống.
Sau đây là một lệnh ví dụ có thể giúp bạn lấy đường liên kết đến Hugging Face. Đường liên kết này có thể tải mô hình phù hợp xuống cho SoC của điện thoại (lưu ý rằng bạn sẽ phải đăng nhập và xác nhận biểu mẫu để có quyền tải tệp xuống). Bạn nên đảm bảo có một thiết bị đã kết nối mà bạn có thể truy cập bằng 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"
Xác minh rằng $SOC_MODEL có trong bảng hỗ trợ. Đường liên kết được tạo sẽ không hoạt động đối với các mô hình không được hỗ trợ. Chúng tôi thường xuyên bổ sung tính năng hỗ trợ cho NPU, vì vậy, hãy quay lại sau để xem thiết bị của bạn có được hỗ trợ hay không.
Bước 2: Tải xuống và trích xuất các thư viện QAIRT
Để chạy mô hình bằng NPU Qualcomm, bạn cần có các thư viện thời gian chạy liên kết trên thiết bị. Bạn có thể tải QAIRT SDK xuống từ đường liên kết rồi giải nén tệp. Đặt biếnQAIRT_ROOT (sẽ dùng biến này ở các bước sau) để trỏ đến thư mục chưa giải nén chứa số phiên bản, ví dụ:
unzip <your_file.zip> -d ~/
QAIRT_ROOT=~/qairt/2.42.0.251225
Bước 3: Tạo thời gian chạy / thư viện LiteRT-LM
Phát triển trong Linux
Để có thể tạo tệp nhị phân cho Android, bạn cần cài đặt NDK r28b trở lên từ https://developer.android.com/ndk/downloads#stable-downloads. Các bước cụ thể là:
- Tải tệp
zipxuống từ https://developer.android.com/ndk/downloads#stable-downloads. - Giải nén tệp
zipvào vị trí bạn muốn (ví dụ:/path/to/AndroidNDK/) - Thiết lập
ANDROID_NDK_HOMEđể trỏ đến thư mục NDK. Nội dung sẽ có dạng như sau:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/
Lưu ý: hãy đảm bảo ANDROID_NDK_HOME trỏ đến thư mục có chứa README.md.
Sau khi thiết lập, hãy thử tạo tệp nhị phân litert_lm_main:
bazel build --config=android_arm64 //runtime/engine:litert_lm_main
Ngoài ra, chúng ta nên tạo thư viện API điều phối để thời gian chạy LiteRT-LM tương tác với NPU:
bazel build --config=android_arm64 \
@litert//litert/vendors/qualcomm/dispatch:dispatch_api_so
Phát triển trong macOS
Công cụ dòng lệnh Xcode bao gồm clang. Chạy xcode-select --install nếu bạn chưa cài đặt trước đó.
Để có thể tạo tệp nhị phân cho Android, bạn cần cài đặt NDK r28b trở lên từ https://developer.android.com/ndk/downloads#stable-downloads. Các bước cụ thể là:
- Tải tệp
.dmgxuống từ https://developer.android.com/ndk/downloads#stable-downloads. - Mở tệp
.dmgrồi di chuyển tệpAndroidNDK*đến vị trí bạn muốn (ví dụ:/path/to/AndroidNDK/) - Thiết lập
ANDROID_NDK_HOMEđể trỏ đến thư mục NDK. Nội dung sẽ có dạng như sau:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/
Lưu ý: hãy đảm bảo ANDROID_NDK_HOME trỏ đến thư mục có chứa README.md.
Sau khi thiết lập, hãy thử tạo tệp nhị phân litert_lm_main:
bazel build --config=android_arm64 //runtime/engine:litert_lm_main
Ngoài ra, chúng ta nên tạo thư viện API điều phối để thời gian chạy LiteRT-LM tương tác với NPU:
bazel build --config=android_arm64 \
@litert//litert/vendors/qualcomm/dispatch:dispatch_api_so
Bước 4: Chạy mô hình trên thiết bị
Sau khi tạo thành công tệp nhị phân, giờ đây, chúng ta có thể thử chạy mô hình trên thiết bị. Đảm bảo bạn có quyền ghi vàoDEVICE_FOLDER:
Để chạy tệp nhị phân trên thiết bị Android, chúng ta phải đẩy một số tài sản/tệp nhị phân. Trước tiên, hãy đặt DEVICE_FOLDER, đảm bảo bạn có quyền ghi vào đó (thường thì bạn có thể đặt mọi thứ trong /data/local/tmp/):
export DEVICE_FOLDER=/data/local/tmp/
adb shell mkdir -p $DEVICE_FOLDER
export MODEL_PATH=<path to your downloaded .litertlm >
Đẩy tệp .litertlm. Lưu ý: bạn chỉ cần đẩy những thành phần đó một lần.
adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm
Đẩy các thư viện QAIRT. Bạn có thể tìm thấy các tệp này trong thư mục chưa giải nén ở Bước 2 $QAIRT_ROOT/lib/aarch64-android/. Xin lưu ý rằng QAIRT_ROOT phải chứa số phiên bản, ví dụ: 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
Đẩy API điều phối và tệp nhị phân chính được biên dịch ở Bước 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
Giờ đây, bạn có thể thực thi tệp nhị phân.
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
Các bước chạy LLM trên NPU của MediaTek như sau:
Bước 1: Tải mô hình .litertlm xuống
Thời gian chạy LiteRT-LM được thiết kế để hoạt động với các mô hình ở định dạng .litertlm.
Bạn có thể tìm và tải các mẫu tương thích xuống trong bảng sau.
| Mô hình | SoC | Lượng tử hoá | Kích thước ngữ cảnh | Kích thước mô hình (Mb) | Đường liên kết để tải xuống |
|---|---|---|---|---|---|
| Gemma3-1B | MT6989 | 4 bit cho mỗi kênh | 1280 | 985 | download |
| Gemma3-1B | MT6991 | 4 bit cho mỗi kênh | 1280 | 986 | download |
Bạn sẽ phải tải mô hình tương ứng với SoC của mình xuống.
Sau đây là một lệnh ví dụ có thể giúp bạn lấy đường liên kết đến Hugging Face. Đường liên kết này có thể tải mô hình phù hợp xuống cho SoC của điện thoại (lưu ý rằng bạn sẽ phải đăng nhập và xác nhận biểu mẫu để có quyền tải tệp xuống). Bạn nên đảm bảo có một thiết bị đã kết nối mà bạn có thể truy cập bằng 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"
Xác minh rằng $SOC_MODEL có trong bảng hỗ trợ. Đường liên kết được tạo sẽ không hoạt động đối với các mô hình không được hỗ trợ. Chúng tôi thường xuyên bổ sung tính năng hỗ trợ cho NPU, vì vậy, hãy quay lại sau để xem thiết bị của bạn có được hỗ trợ hay không.
Bước 2:Tạo thời gian chạy / thư viện LiteRT-LM
Phát triển trong Linux
Để có thể tạo tệp nhị phân cho Android, bạn cần cài đặt NDK r28b trở lên từ https://developer.android.com/ndk/downloads#stable-downloads. Các bước cụ thể là:
- Tải tệp
zipxuống từ https://developer.android.com/ndk/downloads#stable-downloads. - Giải nén tệp
zipvào vị trí bạn muốn (ví dụ:/path/to/AndroidNDK/) - Thiết lập
ANDROID_NDK_HOMEđể trỏ đến thư mục NDK. Nội dung sẽ có dạng như sau:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/
Lưu ý: hãy đảm bảo ANDROID_NDK_HOME trỏ đến thư mục có chứa README.md.
Sau khi thiết lập, hãy thử tạo tệp nhị phân litert_lm_main:
bazel build --config=android_arm64 //runtime/engine:litert_lm_main
Ngoài ra, chúng ta nên tạo thư viện API điều phối để thời gian chạy LiteRT-LM tương tác với NPU:
bazel build --config=android_arm64 \
@litert//litert/vendors/mediatek/dispatch:dispatch_api_so
Phát triển trong macOS
Công cụ dòng lệnh Xcode bao gồm clang. Chạy xcode-select --install nếu bạn chưa cài đặt trước đó.
Để có thể tạo tệp nhị phân cho Android, bạn cần cài đặt NDK r28b trở lên từ https://developer.android.com/ndk/downloads#stable-downloads. Các bước cụ thể là:
- Tải tệp
.dmgxuống từ https://developer.android.com/ndk/downloads#stable-downloads. - Mở tệp
.dmgrồi di chuyển tệpAndroidNDK*đến vị trí bạn muốn (ví dụ:/path/to/AndroidNDK/) - Thiết lập
ANDROID_NDK_HOMEđể trỏ đến thư mục NDK. Nội dung sẽ có dạng như sau:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/
Lưu ý: hãy đảm bảo ANDROID_NDK_HOME trỏ đến thư mục có chứa README.md.
Sau khi thiết lập, hãy thử tạo tệp nhị phân litert_lm_main:
bazel build --config=android_arm64 //runtime/engine:litert_lm_main
Ngoài ra, chúng ta nên tạo thư viện API điều phối để thời gian chạy LiteRT-LM tương tác với NPU:
bazel build --config=android_arm64 \
@litert//litert/vendors/mediatek/dispatch:dispatch_api_so
Bước 3: Chạy mô hình trên thiết bị
Sau khi tạo thành công tệp nhị phân, giờ đây, chúng ta có thể thử chạy mô hình trên thiết bị. Đảm bảo bạn có quyền ghi vàoDEVICE_FOLDER:
Để chạy tệp nhị phân trên thiết bị Android, chúng ta phải đẩy một số tài sản/tệp nhị phân. Trước tiên, hãy đặt DEVICE_FOLDER, đảm bảo bạn có quyền ghi vào đó (thường thì bạn có thể đặt mọi thứ trong /data/local/tmp/):
export DEVICE_FOLDER=/data/local/tmp/
adb shell mkdir -p $DEVICE_FOLDER
export MODEL_PATH=<path to your downloaded .litertlm >
Đẩy tệp .litertlm. Lưu ý: bạn chỉ cần đẩy những thành phần đó một lần.
adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm
Đẩy API điều phối và tệp nhị phân chính được biên dịch ở Bước 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
Giờ đây, bạn có thể thực thi tệp nhị phân.
adb shell LD_LIBRARY_PATH=$DEVICE_FOLDER \
$DEVICE_FOLDER/litert_lm_main \
--backend=npu \
--model_path=$DEVICE_FOLDER/model.litertlm