Android 17 ve sonraki sürümlerde, sistem hizmetleri ve uygulama iş yükleri genelinde NPU kaynaklarının tahsisini ve planlanmasını koordine eden Neural Processing Unit (NPU) Yöneticisi (com.android.npumanager) desteklenir. Kaynak arabuluculuğunu özel satıcı daemon'larından Android platformuna taşıyan NPU Yöneticisi; tahmin edilebilirliği artırır, kaynak yetersizliğini önler, termal sınırları yönetir ve genel cihaz performansını iyileştirir.
Arka plan ve motivasyon
NPU Yöneticisi'nden önce uygulamalar ve sistem modülleri, iş yüklerini doğrudan satıcı sürücülerine veya özel hizmetlere gönderiyordu. Bu yaklaşımın bazı dezavantajları vardı:
- Kaynaklar arasında verimsiz rekabet: Büyük dil modeli (LLM) çıkarım motorları veya cihaz üzerinde görüntü sistemleri gibi yoğun makine öğrenimi iş yükleri, sınırlı NPU kaynakları (ör. SRAM, ağırlıklar belleği ve yürütme kanalları) için diğer yüksek öncelikli sistemlerle doğrudan rekabet ediyordu.
- Sistem kararsızlığı: İş yüklerinin koordine edilmemesi, talepler donanım kapasitesini aşarsa termal kısıtlamaya, bellek sayfası hatalarına veya düşük bellekli sonlandırıcı arka plan programına (LMKD) neden olabilir.
- Verimsiz önceliklendirme: Sistem sunucusu, bağlamdaki değişikliklere (ör. arka planda büyük bir model yüklenirken ön planda gecikmeye duyarlı bir kamera işlem hattı veya kullanıcı asistanı etkin olduğunda) yanıt olarak NPU önceliğini ayarlayamaz.
NPU Manager, model yüklemeyi kontrol eden ve mevcut cihaz sağlığına ve uygulama durumlarına göre yürütme önceliklerini dinamik olarak ayarlayan sistem düzeyinde bir hakem görevi görerek bu zorlukları ele alır.
Sistem mimarisi
NPU Yöneticisi, Android çerçevesinde çalışan npu adlı bir sisteme ait hizmet olarak uygulanır. NPU Yöneticisi, planlama politikalarının üst düzey koordinasyonunu düşük düzeydeki satıcı sürücüsü uygulamasından ayırır.
Aşağıdaki diyagramda NPU Yöneticisi ortam katmanları gösterilmektedir:

Şekil 1. NPU Manager ortam katmanları.
Temel bileşenler
- Framework API Client (
android.npumanager.NpuManager): İstemcilerin model yükleme rezervasyonu istemek için kullandığı giriş noktası - Sisteme ait hizmet (
npu): Model yükleme onaylarını kontrol eden ve planlama önceliği kurallarına göre öncelik alma komutlarını yöneten bir sisteme ait hizmet - NPU Scheduling HAL (
android.hardware.npu): Android uygulama önceliklerini çerçeve ile sürücü arasında ileten AIDL tabanlı bir arayüz - Tedarikçi sürücüsü: Donanım yürütme bloklarını kontrol eden ve düşük düzeyli önceliklendirme mekanizmalarını uygulayan düşük düzeyli bir sürücü
SDK ve çerçeve API'si
Düşük seviyeli sinir ağı kitaplıklarını çağırmadan veya model dosyalarını yüklemeden önce, çerçeve istemcileri NpuManager hizmetiyle etkileşimde bulunmalıdır. Bunu yapmak için istemciler önce bir model yükleme isteği tanımlar, ardından isteği ve onay akışını yürütür.
Model yükleme isteği
Model yükleme isteği ModelLoadRequest ile gösterilir. Bu nesne şunları içerir:
- Benzersiz istek kimliği
- Tahmini model boyutu sınıfı (ör.
NPU_MODEL_SIZE_LESS_THAN_1GBveyaNPU_MODEL_SIZE_GREATER_THAN_2G) - Amaçlanan öncelik (ör.
NPU_MODEL_PRIORITY_BACKGROUND,NPU_MODEL_PRIORITY_NORMALveyaNPU_MODEL_PRIORITY_OPPORTUNISTIC)
Aşağıdaki kod örneğinde, 2 GB'tan büyük bir boyut sınırına ve normal yürütme önceliğine sahip bir ModelLoadRequest oluşturulmaktadır:
ModelLoadRequest request = new ModelLoadRequest.Builder(requestId)
.setSize(NPU_MODEL_SIZE_GREATER_THAN_2G)
.setPriority(NPU_MODEL_PRIORITY_NORMAL)
.build();
İstek ve onay akışı
İstemciler requestCanLoadModel işlevini eşzamansız olarak çağırır:
npuManager.requestCanLoadModel(request, callback, executor);
NPU kaynakları kullanılabilir olduğunda çerçeve, aşağıdaki etkinliklerle ModelLoadRequestCallback kullanarak yanıt verir:
onCanLoadModel(request, status, listener): İstek onaylandığında tetiklenir. İstemci,NpuManager.ModelLoadStatusListenerjetonu alır. İstemci, modeli sürücü belleğine tamamen yükledikten sonralistener.notifyModelLoaded(request)işlevini çağırmalıdır.onRequestUnloadModel(request)veyaonRequestUnloadModel(request, reason): Sistem kaynak baskısı (ör. gelen bir ön plan isteği veya termal artış) yaşadığında ve istemcinin modelini serbest bırakması gerektiğinde tetiklenir. NPU kaynakları geri alındıktan sonra istemci aramalarılistener.notifyModelUnloaded(request).onModelLoadRequestComplete(request, status): İstemciyi, iptal gibi son istek yaşam döngüsü değişiklikleri hakkında bilgilendirir.
Müşteriler, cancelModelLoad(request) simgesini kullanarak bekleyen davetiyeleri iptal edebilir.
HAL ve satıcı entegrasyonu
NPU Manager'ı desteklemek için cihaza özel tedarikçi uygulamalarının android.hardware.npu AIDL hizmet arayüzlerine uygun olması gerekir.
Planlama yapılandırması
Sistem, SchedulingConfig AIDL'yi kullanarak uygulama önceliğini iletir.
SchedulingConfig AIDL yapısı, IScheduling.aidl içinde tanımlanır:
package android.hardware.npu;
@VintfStability
parcelable SchedulingConfig {
int minPriority;
int maxPriority;
int uid;
int appPriority;
boolean hasDirectAccess;
boolean canAttributeOtherUid;
}
Bu yapıyı kullanarak NPU yöneticisi, öncelik uyumlarını koordine eder. Örneğin, arka plandaki bir uygulama yüksek öncelikli bir iş gönderirse ön plan grafiklerine müdahale etmemek için öncelik düşürülür.
Görev durumu ve profilleme
Tedarikçi sürücüleri, NPU yürütme gruplarının yaşam döngüsü durumunu yöneticisine bildirmelidir. WorkInfo, görevleri (WorkInfo.aidl içinde tanımlanır) izler:
package android.hardware.npu;
import android.hardware.npu.NpuUuid;
@VintfStability
parcelable WorkInfo {
int id;
@nullable NpuUuid groupId;
int uid;
int debugPid;
int originalUid;
@nullable String debugFeatureId;
int jobPriority;
int effectivePriority;
long timestampMs;
int deviceNumber;
}
Etkinlik ardışık tekrarı
Planlama çerçevesi, planlama geri çağırma kaydında debounce_duration_ms parametresini kullanarak etkinlik sıçratmasını destekler.
Bu sayede, günlüklerin aşırı yüklenmesi önlenir ve hızlı bildirimler (ör. tekrarlayan modeller için art arda başlangıç ve bitiş etkinlikleri) engellenir.
Geri çağırma yaşam döngüsü durumları aşağıdaki gibi bildirilir:
onWorkRequested: İş yükü, satıcı hizmeti tarafından sıraya alınır.onWorkStarted: İş yükü yürütülmeye başlar.NPU_START_REASON_INITIAL: İlk çalıştırma.NPU_START_REASON_RESUMED: Öncelik verilmesinin ardından yürütme devam ettirildi.
onWorkEnded: İş yükü yürütmesi sona erdi.NPU_END_REASON_COMPLETED: Çalıştırma başarıyla tamamlandı.NPU_END_REASON_CANCELLED_USER: İstemci tarafından iptal edildi.NPU_END_REASON_CANCELLED_SYSTEM: Sistem politikası tarafından önceliklendirildi.NPU_END_REASON_FAILED: Yürütme hatası veya sürücü arızası.NPU_END_REASON_PAUSED: Daha yüksek öncelikli görevler için geçici olarak askıya alındı.
Cihaz hazırlığı ve testi
Cihaz sağlığını doğrulamadan önce bu yapılandırmaların yapıldığından emin olun.
Uygulama beyanları
NPU planlamasında önceliklendirme isteyen müşteriler, NPU donanım özelliğini AndroidManifest.xml bildirmelidir:
<uses-feature android:name="android.hardware.npu" android:required="false" />
İş ortağı donanımının daha yeni nesillerinde dağıtılan modeller için bu beyan, motorun optimum şekilde oluşturulması için gerekli olabilir.
VTS entegrasyon testi
NPU HAL uygulamaları, VTS işlevsel testleriyle doğrulanabilir. Örneğin, VtsHalNpuSchedulingTargetTest.