Senkronizasyon

Zaman çizelgesi mekanizmaları

MediaPipe grafiğinde veri işleme, CalculatorBase alt sınıfları olarak tanımlanan işleme düğümlerinin içinde gerçekleşir. Planlama sistemi, her hesap makinesinin ne zaman çalıştırılması gerektiğine karar verir.

Her grafikte en az bir planlayıcı sırası vardır. Her planlayıcı sırasında tam olarak bir executor vardır. Düğümler statik olarak bir sıraya (ve dolayısıyla bir yürütücüye) atanır. Varsayılan olarak bir sıra vardır. Bu sıraların yürütücüsü, sistemin özelliklerine bağlı olarak çeşitli iş parçacıkları içeren bir iş parçacığı havuzudur.

Her düğümün bir planlama durumu vardır. Bu durum hazır değil, hazır veya çalışıyor olabilir. Hazır olma işlevi, bir düğümün çalışmaya hazır olup olmadığını belirler. Bu işlev, grafik başlatma sırasında, bir düğümün çalışması tamamlandığında ve düğüm girişlerinin durumu değiştiğinde çağrılır.

Kullanılan hazırlık durumu işlevi düğümün türüne bağlıdır. Akış girişi olmayan düğüme kaynak düğüm denir. Kaynak düğümler, çerçeveye oluşturulacak veri kalmadığını ve bu noktada kapatıldığını söyleyene kadar her zaman çalışmaya hazırdır.

Kaynak olmayan düğümler işlenecek girişleri varsa ve bu girişler, düğümün giriş politikası (aşağıda açıklanmıştır) tarafından belirlenen koşullara göre ayarlanmış geçerli bir giriş oluşturuyorsa hazırdır. Çoğu düğüm varsayılan giriş politikasını kullanır ancak bazı düğümler farklı bir politika belirtir.

Düğüm hazır hale geldiğinde, öncelik sırası olan ilgili planlayıcı sırasına bir görev eklenir. Öncelik işlevi şu anda sabittir ve düğümlerin statik özelliklerini ve grafikteki topolojik sıralamalarını dikkate alır. Örneğin, grafiğin çıkış tarafına daha yakın olan düğümler daha yüksek önceliğe sahipken kaynak düğümler en düşük önceliğe sahiptir.

Her sıra, hesap makinesinin kodunu çağırarak görevi çalıştırmaktan sorumlu olan bir yürütücü tarafından sunulur. Farklı yürütücüler sağlanabilir ve yapılandırılabilir. Bu yürütme kaynakları, belirli düğümleri daha düşük öncelikli iş parçacıklarında çalıştırma gibi kullanım alanlarını özelleştirmek için kullanılabilir.

Zaman Damgası Senkronizasyonu

MediaPipe grafiğinin yürütmesi merkezi olmayan bir yapıya sahiptir: Global saat yoktur ve farklı düğümler farklı zaman damgalarına ait verileri aynı anda işleyebilir. Bu, ardışık düzen aracılığıyla daha yüksek işleme hızı sağlar.

Ancak zaman bilgisi, birçok algı iş akışı için çok önemlidir. Birden fazla giriş akışı alan düğümler genellikle bunları bir şekilde koordine etmelidir. Örneğin, bir nesne algılayıcısı bir çerçeveden sınır dikdörtgenleri listesi oluşturabilir ve bu bilgiler oluşturma düğümüne beslenebilir. Bu düğüm, düğümleri orijinal çerçeveyle birlikte işlemelidir.

Bu nedenle, MediaPipe çerçevesinin temel sorumluluklarından biri düğümler için giriş senkronizasyonu sağlamaktır. Çerçeve mekaniği açısından, zaman damgasının birincil rolü senkronizasyon anahtarı görevi görmektir.

Ayrıca MediaPipe, birçok senaryoda (test, simülasyon, toplu işleme vb.) önemli olan belirleyici işlemleri destekleyecek şekilde tasarlanmıştır. Aynı zamanda, grafik yazarlarının gerçek zamanlı kısıtlamaları karşılamak için gerektiği durumlarda determinizmi gevşetmesine olanak tanır.

Çeşitli tasarım seçeneklerinin altında senkronizasyon ve determinizm gibi iki hedef yatmaktadır. Belirli bir akışa aktarılan paketlerin tekdüze şekilde artan zaman damgalarına sahip olması gerekir: Bu, birçok düğüm için yararlı bir varsayım olmakla kalmaz, aynı zamanda senkronizasyon mantığına da dayanır. Her akışın bir zaman damgası sınırı vardır. Bu, akıştaki yeni bir paket için izin verilen olası en düşük zaman damgasıdır. T zaman damgasına sahip bir paket geldiğinde, sınır otomatik olarak T+1 seviyesine doğru ilerler ve monotonik gereksinimi yansıtır. Bu, çerçevenin, zaman damgası T değerinden daha kısa olan başka paketlerin gelmeyeceğini kesin olarak bilmesine olanak tanır.

Giriş politikaları

Senkronizasyon, düğüm tarafından belirtilen giriş politikası kullanılarak her bir düğümde yerel olarak gerçekleştirilir.

DefaultInputStreamHandler tarafından tanımlanan varsayılan giriş politikası, aşağıdaki garantilerle girişlerin belirleyici senkronizasyonunu sağlar:

  • Birden fazla giriş akışında aynı zaman damgasına sahip paketler sağlanırsa bunlar gerçek zamanlı varış sıralarına bakılmaksızın her zaman birlikte işlenir.

  • Giriş grupları, tamamen artan zaman damgası sırasına göre işlenir.

  • Hiçbir paket bırakılmaz ve işleme tamamen belirleyicidir.

  • Yukarıdaki garantiler doğrultusunda düğüm, verileri en kısa sürede işlemeye hazır hale gelir.

İşleyiş şeklini açıklamak için yerleştirilmiş bir zaman damgasının tanımını göstermemiz gerekir. Akıştaki bir zaman damgası, zaman damgası sınırından daha kısaysa yerleştirilir demektir. Diğer bir deyişle, bir zaman damgasındaki girişin durumu geri alınamaz şekilde bilindiğinde akış için bir zaman damgası ayarlanır: Ya bir paket vardır ya da bu zaman damgasına sahip bir paketin ulaşmayacağı kesindir.

Zaman damgası, her bir akışa ayarlanmışsa birden fazla akışa ayarlanır. Ayrıca, zaman damgasının ayarlanması, önceki tüm zaman damgalarının da ayarlandığı anlamına gelir. Böylece belirlenen zaman damgaları, artan düzende belirleyici bir şekilde işlenebilir.

Bu tanım gereğince, tüm giriş akışlarında yer alan ve en az bir giriş akışında paket içeren bir zaman damgası varsa varsayılan giriş politikasına sahip hesap makinesi hazırdır. Giriş politikası, hesap makinesine tek bir girdi grubu olarak ayarlanmış bir zaman damgası için mevcut tüm paketleri sağlar.

Bu belirleyici davranışın bir sonucu, birden fazla giriş akışına sahip düğümler için bir zaman damgasının belirlenmesi için teorik olarak sınırsız bir beklemenin söz konusu olabilmesi ve bu süre zarfında sınırsız sayıda paketin arabelleğe alınabilmesidir. (İki giriş akışına sahip bir düğümü düşünün. Bu düğümlerden biri paket göndermeye devam ederken, diğeri hiçbir şey göndermez ve sınırda ilerlemez.)

Bu nedenle, özel giriş politikaları da sağlarız. Örneğin, girişleri SyncSetInputStreamHandler tarafından tanımlanan farklı senkronizasyon kümelerine bölme veya bütün olarak senkronizasyondan kaçınmak ve girişleri ImmediateInputStreamHandler ile tanımlandığı anda işleme almaktan kaçınma.

Akış denetimi

İki ana akış kontrol mekanizması vardır. Bir akışta arabelleğe alınan paketler, CalculatorGraphConfig::max_queue_size tarafından tanımlanan (yapılandırılabilir) bir sınıra ulaştığında geri basınç mekanizması, yukarı akış düğümlerinin yürütülmesini kısıtlar. Bu mekanizma, belirleyici davranışı korur ve gerektiğinde yapılandırılmış sınırları gevşeten bir kilitlenmeden kaçınma sistemi içerir.

İkinci sistem, FlowLimiterCalculator tarafından tanımlanan gerçek zamanlı kısıtlamalara göre (genellikle özel giriş politikaları kullanılır) paket bırakabilen özel düğümler eklenmesinden oluşur. Örneğin, ortak bir kalıp, alt grafiğin girişine bir akış denetimi düğümü ve son çıkıştan akış denetimi düğümüne bir geri dönüş bağlantısı yerleştirir. Böylece akış kontrolü düğümü, aşağı akış grafiğinde kaç zaman damgasının işlendiğini takip edebilir ve bu sayı (yapılandırılabilir) bir sınıra ulaşırsa paket bırakabilir. Ayrıca paketler yukarı akışa bırakıldığından, bir zaman damgasının kısmen işlenip ara aşamalar arasında paketleri bırakması sonucunda ortaya çıkabilecek işin boşa gitmesini önlüyoruz.

Hesap makinesine dayalı bu yaklaşım, grafik yazarına paketlerin nereye bırakılabileceğini kontrol etme imkanı verir ve kaynak kısıtlamalarına bağlı olarak grafiğin davranışını uyarlama ve özelleştirme konusunda esneklik sağlar.