LiteRT-LM kullanarak LLM'leri çalıştırma

LiteRT-LM, dil modeli işlem hatlarını mobil telefonlardan yerleşik sistemlere kadar çeşitli cihazlarda verimli bir şekilde çalıştırmak için tasarlanmış platformlar arası bir kitaplıktır. Geliştiricilere, gelişmiş dil modeli iş akışları oluşturup dağıtmak için araçlar sunar. Artık sorunsuz NPU entegrasyonu da mevcuttur.

CPU ve GPU'da LLM'leri çalıştırma

Platformlar arası geliştirme ve CPU/GPU donanım hızlandırmasıyla ilgili ayrıntılı talimatlar için LiteRT-LM GitHub deposuna bakın.

LLM'leri NPU'da çalıştırma

Sinirsel İşleme Birimleri (NPU'lar), derin öğrenme iş yükleri için optimize edilmiş özel donanım blokları sunar. Bu türler, özellikle mobil cihazlarda olmak üzere, modern çip üzerinde sistemlerde (SoC'ler) giderek daha fazla kullanılmaktadır. Yüksek performanslı yapıları nedeniyle LLM çıkarımı çalıştırmak için idealdirler.

NPU Tedarikçileri

LiteRT-LM, aşağıdaki satıcıların NPU hızlandırmasıyla LLM'lerin çalıştırılmasını destekler. Denemek istediğiniz tedarikçiye bağlı olarak aşağıdaki talimatları uygulayın:

Hızlı Başlangıç

Başlamak için önce Ön koşullar bölümündeki talimatları uygulayarak ortamı ve depoyu ayarlayın.

Ayrıca Android cihazınızla etkileşimde bulunabilmek için Android Debug Bridge'i doğru şekilde yüklediğinizden ve adb kullanılarak erişilebilen bağlı bir cihazınız olduğundan emin olun.

Daha ayrıntılı talimatlar için LiteRT-LM deposundaki Hızlı Başlangıç bölümüne göz atın ve litert_lm_main komut satırı demosu hakkında daha fazla bilgi edinin.

Qualcomm AI Engine Direct

Qualcomm NPU'da LLM'leri çalıştırma adımları şunlardır:

1. adım: .litertlm modelini indirin LiteRT-LM çalışma zamanı, .litertlm biçimindeki modellerle çalışmak üzere tasarlanmıştır. Uyumlu modelleri aşağıdaki tabloda bulup indirebilirsiniz.

Model Çip üzerinde sistem (SoC) Kuantalama Bağlam boyutu Model Boyutu (Mb) İndirme bağlantısı
Gemma3-1B SM8750 Kanal başına 4 bit 1.280 658 download
Gemma3-1B SM8650 Kanal başına 4 bit 1.280 658 download
Gemma3-1B SM8550 Kanal başına 4 bit 1.280 657 download

Çip üzerinde sisteminize karşılık gelen modeli indirmeniz gerekir. Aşağıda, telefonunuzun çip üzerinde sistemi için doğru modeli indirmenize yardımcı olabilecek Hugging Face bağlantısını almanıza yardımcı olabilecek bir örnek komut verilmiştir (Dosyayı indirme iznine sahip olmak için giriş yapmanız ve formu onaylamanız gerektiğini unutmayın). adb kullanılarak erişilebilen bağlı bir cihaz olduğundan emin olmanız gerekir.

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'in destek tablosunda listelendiğini doğrulayın. Oluşturulan bağlantı, desteklenmeyen modellerde çalışmaz. NPÜ'ler için düzenli olarak yeni destekler eklenmektedir. Cihazınızın desteklenip desteklenmediğini öğrenmek için daha sonra tekrar kontrol edin.

2. adım: QAIRT kitaplıklarını indirip ayıklayın Qualcomm NPU'yu kullanarak modeli çalıştırmak için cihazda ilişkili çalışma zamanı kitaplıklarının olması gerekir. QAIRT SDK'sını bağlantıdan indirip dosyayı çıkarabilirsiniz. Sürüm numarasını içeren, açılmış klasöre işaret edecek şekilde QAIRT_ROOT değişkenini ayarlayın (sonraki adımlarda kullanılacaktır). Örneğin:

unzip <your_file.zip> -d ~/

QAIRT_ROOT=~/qairt/2.42.0.251225

3. adım: LiteRT-LM çalışma zamanını / kitaplıklarını oluşturun

Linux'ta geliştirme

Android için ikili dosya oluşturabilmek üzere https://developer.android.com/ndk/downloads#stable-downloads adresinden NDK r28b veya daha yeni bir sürümün yüklenmesi gerekir. Belirli adımlar şunlardır:

  • https://developer.android.com/ndk/downloads#stable-downloads adresinden zip dosyasını indirin.
  • zip dosyasını tercih ettiğiniz konuma (örneğin, /path/to/AndroidNDK/) çıkarın.
  • ANDROID_NDK_HOME öğesini NDK dizinine yönlendirin. Şuna benzer bir şey olmalıdır:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

İpuçları: ANDROID_NDK_HOME işaretinin, README.md içeren dizini gösterdiğinden emin olun.

Kurulum tamamlandıktan sonra litert_lm_main ikili dosyasını oluşturmayı deneyin:

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

Ayrıca, LiteRT-LM çalışma zamanının NPU ile etkileşim kurabilmesi için dispatch API kitaplığını oluşturmamız gerekir:

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

macOS'te geliştirme

Xcode komut satırı araçları clang'i içerir. Daha önce yüklenmediyse xcode-select --install'ı çalıştırın.

Android için ikili dosya oluşturabilmek üzere https://developer.android.com/ndk/downloads#stable-downloads adresinden NDK r28b veya daha yeni bir sürümün yüklenmesi gerekir. Belirli adımlar şunlardır:

  • https://developer.android.com/ndk/downloads#stable-downloads adresinden .dmg dosyasını indirin.
  • .dmg dosyasını açın ve AndroidNDK* dosyasını tercih ettiğiniz konuma (örneğin /path/to/AndroidNDK/) taşıyın.
  • ANDROID_NDK_HOME öğesini NDK dizinine yönlendirin. Şuna benzer bir şey olmalıdır:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

İpuçları: ANDROID_NDK_HOME işaretinin, README.md içeren dizini gösterdiğinden emin olun.

Kurulum tamamlandıktan sonra litert_lm_main ikili dosyasını oluşturmayı deneyin:

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

Ayrıca, LiteRT-LM çalışma zamanının NPU ile etkileşim kurabilmesi için dispatch API kitaplığını oluşturmamız gerekir:

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

4. adım: Modeli cihazda çalıştırma İkili dosya başarıyla oluşturulduktan sonra modeli cihazda çalıştırmayı deneyebiliriz. DEVICE_FOLDER için yazma erişiminiz olduğundan emin olun:

İkili dosyayı Android cihazınızda çalıştırmak için birkaç öğe/ikili dosya göndermemiz gerekiyor. Öncelikle DEVICE_FOLDER cihazınızı ayarlayın ve cihaza yazma erişiminiz olduğundan emin olun (genellikle /data/local/tmp/ altına öğe yerleştirebilirsiniz):

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

export MODEL_PATH=<path to your downloaded .litertlm >

.litertlm dosyasını gönderin. İpucu: Bu öğeleri yalnızca bir kez göndermeniz gerekir.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

QAIRT kitaplıklarını gönderin. Bunları, 2. adım $QAIRT_ROOT/lib/aarch64-android/ bölümündeki açılmış klasörde bulabilirsiniz. QAIRT_ROOT öğesinin sürüm numarasını içermesi gerektiğini unutmayın (ör. 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

3. adımda derlenen dağıtım API'sini ve ana ikili dosyayı gönderin.

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

Artık ikili dosyayı çalıştırabilirsiniz.

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

MediaTek NPU'da LLM'leri çalıştırma adımları şunlardır:

1. adım: .litertlm modelini indirin LiteRT-LM çalışma zamanı, .litertlm biçimindeki modellerle çalışmak üzere tasarlanmıştır. Uyumlu modelleri aşağıdaki tabloda bulup indirebilirsiniz.

Model Çip üzerinde sistem (SoC) Kuantalama Bağlam boyutu Model Boyutu (Mb) İndirme bağlantısı
Gemma3-1B MT6989 Kanal başına 4 bit 1.280 985 download
Gemma3-1B MT6991 Kanal başına 4 bit 1.280 986 download

Çip üzerinde sisteminize karşılık gelen modeli indirmeniz gerekir. Aşağıda, telefonunuzun çip üzerinde sistemi için doğru modeli indirmenize yardımcı olabilecek Hugging Face bağlantısını almanıza yardımcı olabilecek örnek bir komut verilmiştir (Dosyayı indirme iznine sahip olmak için giriş yapmanız ve formu onaylamanız gerektiğini unutmayın). adb kullanılarak erişilebilen bağlı bir cihaz olduğundan emin olmanız gerekir.

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'in destek tablosunda listelendiğini doğrulayın. Oluşturulan bağlantı, desteklenmeyen modellerde çalışmaz. NPÜ'ler için düzenli olarak yeni destekler eklenmektedir. Cihazınızın desteklenip desteklenmediğini öğrenmek için daha sonra tekrar kontrol edin.

2. adım: LiteRT-LM çalışma zamanını / kitaplıklarını oluşturun

Linux'ta geliştirme

Android için ikili dosya oluşturabilmek üzere https://developer.android.com/ndk/downloads#stable-downloads adresinden NDK r28b veya daha yeni bir sürümün yüklenmesi gerekir. Belirli adımlar şunlardır:

  • https://developer.android.com/ndk/downloads#stable-downloads adresinden zip dosyasını indirin.
  • zip dosyasını tercih ettiğiniz konuma (örneğin, /path/to/AndroidNDK/) çıkarın.
  • ANDROID_NDK_HOME öğesini NDK dizinine yönlendirin. Şuna benzer bir şey olmalıdır:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/

İpuçları: ANDROID_NDK_HOME işaretinin, README.md içeren dizini gösterdiğinden emin olun.

Kurulum tamamlandıktan sonra litert_lm_main ikili dosyasını oluşturmayı deneyin:

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

Ayrıca, LiteRT-LM çalışma zamanının NPU ile etkileşim kurabilmesi için dispatch API kitaplığını oluşturmamız gerekir:

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

macOS'te geliştirme

Xcode komut satırı araçları clang'i içerir. Daha önce yüklenmediyse xcode-select --install'ı çalıştırın.

Android için ikili dosya oluşturabilmek üzere https://developer.android.com/ndk/downloads#stable-downloads adresinden NDK r28b veya daha yeni bir sürümün yüklenmesi gerekir. Belirli adımlar şunlardır:

  • https://developer.android.com/ndk/downloads#stable-downloads adresinden .dmg dosyasını indirin.
  • .dmg dosyasını açın ve AndroidNDK* dosyasını tercih ettiğiniz konuma (örneğin /path/to/AndroidNDK/) taşıyın.
  • ANDROID_NDK_HOME öğesini NDK dizinine yönlendirin. Şuna benzer bir şey olmalıdır:
export ANDROID_NDK_HOME=/path/to/AndroidNDK/AndroidNDK*.app/Contents/NDK/

İpuçları: ANDROID_NDK_HOME işaretinin, README.md içeren dizini gösterdiğinden emin olun.

Kurulum tamamlandıktan sonra litert_lm_main ikili dosyasını oluşturmayı deneyin:

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

Ayrıca, LiteRT-LM çalışma zamanının NPU ile etkileşim kurabilmesi için dispatch API kitaplığını oluşturmamız gerekir:

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

3. adım: Modeli cihazda çalıştırma İkili dosya başarıyla oluşturulduktan sonra modeli cihazda çalıştırmayı deneyebiliriz. DEVICE_FOLDER için yazma erişiminiz olduğundan emin olun:

İkili dosyayı Android cihazınızda çalıştırmak için birkaç öğe/ikili dosya göndermemiz gerekiyor. Öncelikle DEVICE_FOLDER cihazınızı ayarlayın ve cihaza yazma erişiminiz olduğundan emin olun (genellikle /data/local/tmp/ altına öğe yerleştirebilirsiniz):

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

export MODEL_PATH=<path to your downloaded .litertlm >

.litertlm dosyasını gönderin. İpucu: Bu öğeleri yalnızca bir kez göndermeniz gerekir.

adb push $MODEL_PATH $DEVICE_FOLDER/model.litertlm

2. adımda derlenen gönderme API'sini ve ana ikili dosyayı gönderin.

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

Artık ikili dosyayı çalıştırabilirsiniz.

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