LiteRT Hızlandırıcı Test Paketi (ATS), LiteRT çerçevesiyle entegre edilmiş özel hızlandırıcı uygulamalarının işlevsel doğruluğunu doğrulamak ve performansını ölçmek için kullanılan kapsamlı bir araçtır.
Genel Bakış ve Temel İşlevler
ATS'nin temel işlevi, önceden tanımlanmış makine öğrenimi modellerini hedef hızlandırıcıya göre yürütmek ve sonuçları LiteRT standart CPU arka ucuyla karşılaştırmaktır.
- Doğrulama: Paket, hızlandırıcı tarafından üretilen çıkış tensörlerini (etkinleştirmeler) bilinen iyi CPU arka ucu tarafından üretilenlerle karşılaştırarak sayısal doğrulama gerçekleştirir. Bu, hızlandırıcı uygulamasının gerekli hassasiyeti ve doğruluğu korumasını sağlar.
- Performans Metrikleri: Gecikme ve diğer alakalı metrikler dahil olmak üzere kritik performans ayrıntılarını otomatik olarak yakalayıp kaydeder ve kullanıcıya sunar.
- Yürütme: Testler genellikle hedef cihazda (ör. Android telefon) yürütülür ve
adb(Android Debug Bridge) aracı kullanılarak dosya aktarımlarını ve kurulumu yöneten bir kabuk komut dosyası sarmalayıcı tarafından yönetilir.
Test Verileri (Modeller)
ATS paketi, test verileri olarak yaygın şekilde kullanılan bir dizi .tflite model kullanır. Giriş verileri, veri türüne göre rastgele oluşturulur ve gerektiğinde başlatılabilir.
Dahil Edilen Modeller
Aşağıdaki modeller, test için otomatik olarak dahil edilir ve indirilir (değişikliğe tabidir):
hf_all_minilm_l6_v2hf_mobilevit_smallqai_hub_midasqai_hub_real_esrgan_x4plustorchvision_mobilenet_v2torchvision_resnet18torchvision_squeezenet1_1u2net_litewhisper_tiny_decoderwhisper_tiny_encoderyamnetyolo11n
Manuel Model Alma
Modeller bazel run sırasında otomatik olarak indirilir ancak wget kullanarak model setinin tamamını manuel olarak alabilirsiniz:
wget -p -O <target_file> https://storage.googleapis.com/litert/ats_models.tar.gz
Bazel ile ATS paketi tanımlama
litert_define_ats Bazel makrosunu kullanarak hızlandırıcılarına özel bir ATS testi hedefi yapılandırıp tanımlayabilirler.
Makro, otomatik olarak iki çalıştırılabilir hedef oluşturur:
- Standart cihaz üzerinde JIT testi (yürütme ve doğrulama için).
- Özel bir AOT "yalnızca derleme" modu testi (ana makine derlemesi için).
Örnek litert_define_ats Kullanım
Örnekte, arka uç adı example olan bir hızlandırıcı için example_ats adlı bir ATS paketi tanımlanmaktadır:
# Emits aot-mode and jit-mode test targets, one for running compilation test on host
# and another for running JIT and inference on device
# These targets are named with their respective suffix attribute.
litert_define_ats(
name = "example_ats",
backend = "example",
compile_only_suffix = "_aot",
do_register = [
"*mobilenet*",
],
extra_flags = ["--limit=1"],
jit_suffix = "",
)
Yürütme
Android'i hedefleyen standart testi yürütmek için (tüm adb işlemlerini gerçekleştirir):
# Handles environment setup, and build + push of library and data dependencies to the device,
# executes the suite on the target.
bazel run -c opt --config=android_arm64 :example_ats
AOT derleme testini yürütmek için:
# Handle environment setup, and builds library dependencies for host platform.
# Executes the ats compile only flow. The "--compile_mode" flag is already
# bound to the program arguments.
bazel run :example_ats_aot
Linux'ta yürütme (ana makine)
ATS'nin derlemenin yapıldığı makineyle aynı makinede çalıştırıldığı Linux yürütme için kullanıcıların doğrudan :ats ikili dosyasını kullanması gerekir:
bazel run -c opt :ats
IoT Uygulaması
IoT yürütme için kullanıcıların ikili dosyayı ana makinede oluşturması ve manuel olarak cihazına göndermesi gerekir.
Komut satırı işaretleri
ats yürütülebilir dosyası, test ve raporlama üzerinde ayrıntılı kontrol için çeşitli işaretler kabul eder.
| İşaret | Tür | Açıklama |
|---|---|---|
--backend |
std::string |
Zorunludur. Test edilen hızlandırıcı olarak kullanılacak LiteRT arka ucu ("gerçek"). Seçenekler cpu, npu veya gpu'dir. |
--compile_mode |
bool |
Doğruysa cihaz üzerinde yürütme yerine iş istasyonunda AOT derleme adımını çalıştırır. NOT: Bu seçenek, "aot" derleme hedefiyle otomatik olarak bağlanır ve açıkça ayarlanması gerekmez. |
--models_out |
std::string |
Yan etkiyle serileştirilmiş (derlenmiş) modellerin kaydedildiği dizin yolu. Yalnızca AOT veya JIT derleme için geçerlidir. |
--dispatch_dir |
std::string |
Hızlandırıcının gönderme kitaplığını içeren dizinin yolu (NPU için geçerlidir). |
--plugin_dir |
std::string |
Hızlandırıcının derleyici eklenti kitaplığını içeren dizinin yolu (NPU için geçerlidir). |
--soc_manufacturer |
std::string |
AOT derlemesi için hedeflenecek SOC üreticisi (NPU derlemesi için geçerlidir). |
--soc_model |
std::string |
AOT derlemesi için hedeflenecek SOC modeli (NPU derlemesi için geçerlidir). |
--iters_per_test |
size_t |
Her biri farklı rastgeleleştirilmiş tensör verileriyle test başına çalıştırılacak yineleme sayısı. |
--max_ms_per_test |
int64_t |
Zaman aşımından önce her testin çalıştırılacağı maksimum süre (milisaniye cinsinden). |
--fail_on_timeout |
bool |
Yürütme zaman aşımına uğrarsa testin başarısız olup olmayacağı. |
--csv |
std::string |
Ayrıntılı raporu CSV biçiminde kaydetmek için dosya yolu. |
--dump_report |
bool |
Raporun tüm ayrıntılarının doğrudan kullanıcının konsol çıkışına dökülüp dökülmeyeceği. |
--data_seed |
std::optional<int> | Küresel veri oluşturma için tek bir başlangıç. |
--do_register |
std::vector<std::string> | Belirli testleri açıkça dahil etmek için normal ifadeler (ör. *mobilenet*). |
--dont_register |
std::vector<std::string> | Belirli testleri hariç tutmak için kullanılan normal ifadeler. |
--extra_models |
std::vector<std::string> | Test paketine eklenecek dizinlerin veya model dosyalarının isteğe bağlı listesi. |
--limit |
int32_t |
Kaydedilen ve çalıştırılan toplam test sayısını sınırlayın. |
--quiet |
bool |
Test çalıştırma sırasında günlük kaydı çıkışını en aza indirin. |
ATS için litert_device_script derleme yardımcı programlarını kullanma
ATS hedefli kullanıcılar, tüm ortam kurulumunu ve hedef cihazın derlemenin tamamlandığı ana makineden farklı olduğu durumlarda gerekli kitaplıkların gönderilmesini (ör. adb push) otomatik olarak işleyen bir kabuk giriş noktası içerir.
Bu işlev, ATS derlemelerinin arka planda kullandığı litert_device_script yardımcı programları aracılığıyla genel olarak sağlanır. Bu derleme işlevine erişmek için hızlandırıcıların kayıt sürecini tamamlaması gerekir. ats'yı desteklemenin yanı sıra bu yardımcı programlar, cc_binary ve cc_test'yi simüle etmek için bağımsız olarak da kullanılabilir. Bu simülasyonlar, gönderilen bağımlılıklar gerektiren derleme ana makinesinden farklı bir cihazda yürütülmek üzere tasarlanmıştır.
Arka uç kaydı
litert_device_script (ve dolayısıyla ATS) ile kullanılacak yeni bir hızlandırıcıyı etkinleştirmek için gerekli kitaplıklarının litert_device_common.bzl Bazel dosyasında kaydedilmesi gerekir. Kaydolma işlemi, LiteRT'nin bu hızlandırıcıyla çalışması için gereken, derlenebilir veya önceden derlenmiş bir kitaplıklar grubuna eşlenen benzersiz bir "arka uç" adına dayanır.
Kayıt Adımları
BackendSpecişlevi tanımlayın: Yeni hızlandırıcınızın spesifikasyonunu içeren bir sözlük döndüren bir işlev oluşturun.Kitaplıkları belirtin (
libs): Bu, paylaşılan kitaplığın Bazel hedef yolunu ve cihaz bağlayıcısının kitaplığı bulması için gereken ortam değişkenini (LD_LIBRARY_PATH) ayrıntılı olarak açıklayan bir demet listesidir.- Dispatch Library: Çalışma zamanı yürütmesi için gereklidir.
- Derleyici Eklenti Kitaplığı: AOT derleme modu için gereklidir.
Kitaplık Adlarını Belirtin (
plugin,dispatch): Eklenti ve dağıtım kitaplıklarının dosya adlarını girin.Spec'i Kaydetme: Yeni spec işlevinizi, benzersiz arka uç kimliğiyle kullanılabilir hale getirmek için ana
_Specsişleviyle birleştirin.
Örnek Kayıt (_ExampleSpec)
litert_device_common.bzl kaynağındaki aşağıdaki kodda "example" hızlandırıcısının nasıl kaydedildiği gösterilmektedir:
def _ExampleSpec():
return {
# The unique backend ID
"example": BackendSpec(
id = "example",
libs = [
# Dispatch Library and how to find it on device
("//third_party/odml/litert/litert/vendors/examples:libLiteRtDispatch_Example.so", "LD_LIBRARY_PATH"),
# Compiler Plugin Library
("//third_party/odml/litert/litert/vendors/examples:libLiteRtCompilerPlugin_Example.so", "LD_LIBRARY_PATH"),
],
plugin = "libLiteRtCompilerPlugin_Example.so",
dispatch = "libLiteRtDispatch_Example.so",
),
}
# ... (Other specs are defined here)
def _Specs(name):
# Your new spec function must be included here
return (_QualcommSpec() | _GoogleTensorSpec() | _MediatekSpec() | _CpuSpec() | _GpuSpec() | _ExampleSpec())[name]
litert_device_exec ile kayıt özelliğinden yararlanma
Kaydolduktan sonra, litert_device_exec ve ilgili makroları yeni backend_id ile kullanın. Bu makro, gerekli kitaplıkları ve belirtilen tüm veri dosyalarını hedef ikiliyle otomatik olarak paketler.
cc_binary(
name = "example_bin",
srcs = ["example_bin.cc"],
)
litert_device_exec(
name = "example_bin_device",
backend_id = "example", # Uses the libraries registered under "example"
data = [
"//third_party/odml/litert/litert/test:testdata/constant_output_tensor.tflite",
],
target = ":example_bin",
)
Bu hedefi (bazel run ... :example_bin_device) çalıştırmak için:
example_binC++ ikilisini oluşturun.- İkili dosya,
libLiteRtDispatch_Example.so,libLiteRtCompilerPlugin_Example.sove.tflitedosyasını cihaza aktarın. adb shellkullanarak ikili dosyayı yürütün.
Cihaz Yollarıyla İlgili Not: Cihazdaki dosyaların standart konumu, Bazel'in runfile ağacını yansıtır. Özellikle
/data/local/tmp/runfiles/runfiles_relative_path. Cihaz komut dosyası, dinamik bağlayıcı için uygun yolların ayarlanmasını otomatik olarak gerçekleştirir.
Derleme Modu (AOT)
Önceden derleme (AOT) adımını destekleyen hızlandırıcılar için ATS, özel bir "derleme modunda" yürütülebilir.
- Amaç: Bu mod, hedef cihazda değil, iş istasyonunda (ana makine) çalışacak şekilde tasarlanmıştır. Belirtilen hedef donanım için modelleri yürütmeden derler.
- Çıkış: Derlenen tüm modeller, iş istasyonundaki belirlenmiş bir dizine çıkış olarak verilir.
- Etkinleştirme: ATS derleme makroları, kitaplıkların ana makine platformu için oluşturulduğu aot için belirli bir hedef yayar. Bu akış,
--compile_modeişareti olan tüm ikili programlarda etkinleştirilebilir ancak aot derlemesinin bağımsız değişkenlerine otomatik olarak bağlanır.
Gelecekteki genişleme
Paketin, tam modellerin yanı sıra tek işlemler (ops) için özel testleri de içerecek şekilde genişletilmesi planlanmaktadır.