Skip to main content
Bu bölümde, DX-M1 hızlandırıcı modülünün komut satırı araçları ile yönetilmesi, performansının ölçülmesi ve Python arayüzü kullanılarak çıkarım yapılması anlatılmaktadır.
Bu bölümdeki komutların çalıştırılabilmesi için sürücü ve çalışma zamanı kurulumunun tamamlanmış olması gerekmektedir. Kurulum adımları için Kurulum bölümünü inceleyebilirsiniz.

Komut Satırı Araçları

DX-RT çalışma zamanı ile birlikte aşağıdaki yardımcı araçlar kurulmaktadır.

Cihaz Durumunun Sorgulanması

Modülün anlık sıcaklık, gerilim ve saat frekansı değerlerini görüntülemek için --status seçeneği kullanılmaktadır.
Modüle ait donanım ve sürüm bilgilerini görüntülemek için --info seçeneği kullanılmaktadır.
dxrt-cli aracının sık kullanılan seçenekleri aşağıdaki tabloda listelenmiştir. Örneğin cihaz durumunu 1 saniyelik aralıklarla izlemek için aşağıdaki komutu kullanabilirsiniz.
Modülün sıcaklığının uzun süre yüksek seviyelerde kalması, donanımın kendini korumak amacıyla saat frekansını düşürmesine ve performansın azalmasına neden olmaktadır. Yoğun iş yükü altında çalıştırdığınız uygulamalarda sıcaklık değerlerini dxrt-cli --monitor ile takip etmeniz önerilmektedir.

NPU Kullanımının İzlenmesi

Uygulamanız çalışırken NPU çekirdeklerinin ne kadar meşgul olduğunu gözlemlemek için dxtop aracını kullanabilirsiniz.
Araç, her bir NPU çekirdeği için kullanım oranını, sıcaklığı ve bellek tüketimini gerçek zamanlı olarak göstermektedir. Uygulamadan çıkmak için q tuşuna basmanız yeterlidir.

Hazır Modellerin İndirilmesi

NPU yalnızca .dxnn biçimine derlenmiş modelleri çalıştırabilmektedir. Bu bölümdeki örnekleri denemek için kendi modelinizi derlemenize gerek bulunmamaktadır; DEEPX model deposunda (Model Zoo) önceden derlenmiş üç yüzden fazla model hazır olarak sunulmaktadır.

Modellerin İndirilmesi

Model deposunun tamamına erişmek ve modelleri kategori bazında indirmek için DX-APP deposundaki setup.sh betiği kullanılmaktadır. Betik, indirilen dosyaları assets/models klasörüne yerleştirmektedir. Sık kullanılan bazı modellerin dosya adları aşağıdaki tabloda listelenmiştir.
İndirdiğiniz modelin geçerli olduğunu ve kart üzerinde çalıştığını run_model -m ./assets/models/yolov5-s_640x640.dxnn -b komutu ile doğrulayabilirsiniz.
Betiğin model indirme ile ilgili seçenekleri aşağıdaki tabloda listelenmiştir.
Betik hiçbir seçenek verilmeden çalıştırıldığında kategori ve model seçimi menü üzerinden yapılmaktadır. Kullanılabilir modellerin listesi scripts/modelzoo_manifest.json dosyasında tutulmaktadır.
--all seçeneği depodaki tüm modelleri indirdiğinden onlarca gigabaytlık disk alanı gerektirmektedir. Yalnızca ihtiyaç duyduğunuz modelleri --models veya --category seçenekleri ile indirmeniz önerilmektedir.

Model Performansının Ölçülmesi

Derlenmiş bir modelin kart üzerindeki gerçek performansını ölçmek için run_model aracı kullanılmaktadır.
gerekli
Ölçüm yapılacak .dxnn model dosyasının yolu.
Maksimum verim modunda ölçüm yapar. Varsayılan çalışma modudur.
Tek çekirdek üzerinde, sıralı olarak tek girdi ile ölçüm yapar.
varsayılan:"30"
Gerçekleştirilecek çıkarım döngüsü sayısı.
Ölçümün saniye cinsinden süresi. Belirtildiğinde --loops değerini geçersiz kılar.
varsayılan:"0"
Ölçüme başlamadan önce yapılacak ısınma turu sayısı.
NPU işlem süresi ve gecikme (latency) değerlerini ayrıntılı olarak gösterir.
Komut sonucunda NPU işlem süresi, gecikme ve saniyedeki kare sayısı (FPS) değerleri raporlanmaktadır.
Bir modelin katman yapısını, bellek kullanımını ve NPU üzerindeki görev dağılımını incelemek için parse_model -m yolov5-s_640x640.dxnn -v komutunu kullanabilirsiniz.

Python ile Çıkarım Yapılması

Python uygulamalarında NPU’yu kullanmak için dx_engine paketi içerisindeki InferenceEngine sınıfı kullanılmaktadır. Temel akış; modelin yüklenmesi, girdi bufferının hazırlanması, çıkarımın çalıştırılması ve sonuçların işlenmesi adımlarından oluşmaktadır.
Girdi bufferını oluştururken np.zeros() kullanılması önerilmemektedir. np.zeros() ile ayrılan sanal bellek adreslerinin tümü aynı fiziksel adresi işaret ettiğinden, PCIe DMA sürücüsü aynı fiziksel adresi birden fazla kez gördüğünde EFAULT hatası vermektedir. Bu nedenle yukarıdaki örnekte olduğu gibi np.empty() ile tampon ayrılıp fill() ile doldurulmalıdır.

Model Bilgilerinin Alınması

Girdi ve çıktı katmanlarına ait bilgiler, ön işleme ve son işleme adımlarının doğru yazılabilmesi için çalışma zamanından sorgulanabilmektedir.

Asenkron Çıkarım

Video akışı gibi sürekli veri işlenen uygulamalarda, çıkarım işleminin sonucunu beklemeden yeni kare göndermek performansı artırmaktadır. Bu amaçla run_async metodu kullanılmaktadır. Metot, çıkarım tamamlanmasını beklemeden bir iş numarası döndürmektedir. Sonuçların toplanması için iki yöntem bulunmaktadır. Geri çağırma (callback) fonksiyonu kaydedilerek sonuçların otomatik olarak iletilmesi sağlanabilir veya iş numarası ile wait metodu kullanılarak sonuç talep edilebilir.
Bu iki yöntem birlikte kullanılmamalıdır. wait metodu ile sonuç toplanacaksa register_callback ile geri çağırma fonksiyonu kaydedilmemelidir.
Geri çağırma fonksiyonu ayrı bir iş parçacığında (thread) çalıştırıldığından, paylaşılan veri yapılarına erişimde kilit kullanılması gerekmektedir.

Performans Ölçümü ve Cihaz İzleme

Çıkarım performansı run_benchmark metodu ile ölçülebilmekte, cihaz durumu ise DeviceStatus sınıfı ile uygulama içerisinden okunabilmektedir.
Gecikme ve NPU işlem süresi istatistiklerine ie.get_latency_mean() ve ie.get_npu_inference_time_mean() metotları ile erişebilirsiniz.

C/C++ Arayüzü

DX-RT, Python arayüzünün yanı sıra C ve C++ arayüzü de sunmaktadır. C++ tarafında aynı iş akışı dxrt::InferenceEngine sınıfı ile gerçekleştirilmektedir.
C++ ve Python arayüzlerine ait tüm örnekler, SDK içerisindeki dx_rt/examples klasöründe yer almaktadır.