Yeni yayınlanabilir yolları keşfeden bir modül oluşturma

Bu belge, hizmet verilecek yeni modelleri (sürümleri) veya verileri keşfetmek üzere farklı depolama sistemlerini izlemek için TensorFlow Hizmetinin nasıl genişletileceğini açıklamaktadır. Özellikle, her bir alt yolun yüklenecek yeni bir hizmet verilebilir sürümü temsil ettiği, yeni alt yolların ortaya çıkması için bir depolama sistemi yolunu izleyen bir modülün nasıl oluşturulacağını ve kullanılacağını kapsar. Bu tür bir modüle Source<StoragePath> adı verilir, çünkü StoragePath türündeki nesneleri ( string olarak tanımlanmış) yayar. Kaynağın keşfettiği belirli bir yoldan hizmet verilebilir bir Loader oluşturan bir SourceAdapter ile oluşturulabilir.

İlk olarak, genellikle ilgili bir not

Sunulabilir verilere yönelik tanıtıcılar olarak yolların kullanılması gerekli değildir; yalnızca hizmet edilebilir öğeleri sisteme almanın bir yolunu gösterir. Ortamınız sunulabilir verileri yollarda kapsüllemese bile, bu belge size önemli soyutlamalar hakkında bilgi verecektir. Ortamınıza uygun türler için (örn. RPC veya pub/sub mesajları, veritabanı kayıtları) Source<T> ve SourceAdapter<T1, T2> modülleri oluşturma veya yalnızca monolitik bir Source<std::unique_ptr<Loader>> oluşturma seçeneğiniz vardır. Source<std::unique_ptr<Loader>> doğrudan servis edilebilir yükleyicileri yayar.

Elbette, kaynağınız ne tür veri yayıyorsa (POSIX yolları, Google Cloud Storage yolları veya RPC tanıtıcıları olsun), buna dayalı olarak sunulabilir dosyaları yükleyebilecek eşlik eden modüllerin olması gerekir. Bu tür modüllere SourceAdapters adı verilir. Özel bir tane oluşturma Özel Sunulabilirlik belgesinde açıklanmaktadır. TensorFlow Serving, TensorFlow'un desteklediği dosya sistemlerindeki yollara dayalı olarak TensorFlow oturumlarını başlatmak için bir taneyle birlikte gelir. RandomAccessFile soyutlamasını ( tensorflow/core/public/env.h ) genişleterek TensorFlow'a ek dosya sistemleri için destek eklenebilir.

Bu belge, TensorFlow destekli bir dosya sistemindeki yolları yayan bir kaynak oluşturmaya odaklanmaktadır. TensorFlow modellerine hizmet vermek için kaynağınızı önceden mevcut modüllerle birlikte nasıl kullanacağınıza dair bir genel bakışla sona eriyor.

Kaynağınızı Oluşturmak

FileSystemStoragePathSource ( sources/storage_path/file_system_storage_path_source* adresinde) adı verilen Source<StoragePath> referans uygulamasına sahibiz. FileSystemStoragePathSource belirli bir dosya sistemi yolunu izler, sayısal alt dizinleri izler ve bunların en sonuncusunu, yüklemeyi hedeflediği sürüm olarak rapor eder. Bu belgede FileSystemStoragePathSource göze çarpan yönleri anlatılmaktadır. FileSystemStoragePathSource bir kopyasını oluşturmayı ve ardından bunu ihtiyaçlarınıza uyacak şekilde değiştirmeyi uygun bulabilirsiniz.

İlk olarak, FileSystemStoragePathSource Source<StoragePath> API'sini uygular ve bu, Source<T> API'sinin StoragePath bağlı T ile bir uzmanlığıdır. API, kaynağın belirli bir hizmet verilebilir sürüm kümesinin yüklenmesini istediğini bildirmek için çağırabileceği bir kapatma sağlayan tek bir SetAspiredVersionsCallback() yönteminden oluşur.

FileSystemStoragePathSource istenen sürüm geri çağrısını çok basit bir şekilde kullanır: düzenli olarak dosya sistemini denetler (esasen ls yaparak) ve yayınlanabilir sürümlere benzeyen bir veya daha fazla yol bulursa hangisinin en son sürüm olduğunu belirler ve onu çağırır. yalnızca bu sürümü içeren (varsayılan yapılandırma altında) bir boyutlu bir listeyle geri arama. Dolayısıyla, herhangi bir zamanda FileSystemStoragePathSource en fazla bir hizmet dosyasının yüklenmesini ister ve uygulaması, kendisini durumsuz tutmak için geri çağırmanın bağımsızlığından yararlanır (aynı argümanlarla tekrar tekrar geri aramayı çağırmanın bir zararı yoktur).

FileSystemStoragePathSource bir yapılandırma protokolü mesajı alan statik bir başlatma fabrikasına ( Create() yöntemi) sahiptir. Yapılandırma mesajı, izlenecek temel yol ve izleme aralığı gibi ayrıntıları içerir. Ayrıca yayınlanacak yayınlanabilir akışın adını da içerir. (Alternatif yaklaşımlar, daha derin bir dizin hiyerarşisini gözlemlemeye dayalı olarak birden fazla sunulabilir akış yaymak için hizmet verilebilir akış adını temel yoldan çıkarabilir; bu değişkenler referans uygulamasının kapsamı dışındadır.)

Uygulamanın büyük kısmı, dosya sistemini periyodik olarak inceleyen bir iş parçacığından ve keşfettiği sayısal alt yolları tanımlamaya ve sıralamaya yönelik bir mantıktan oluşur. İş parçacığı SetAspiredVersionsCallback() içinde başlatılır ( Create() içinde değil) çünkü bu, kaynağın "başlaması" gereken noktadır ve istenen sürüm isteklerini nereye göndereceğini bilir.

TensorFlow oturumlarını yüklemek için Kaynağınızı kullanma

Büyük olasılıkla yeni kaynak modülünüzü SavedModelBundleSourceAdapter ( servables/tensorflow/saved_model_bundle_source_adapter* ) ile birlikte kullanmak isteyeceksiniz; bu modül, kaynağınızın yaydığı her yolu bir TensorFlow dışa aktarma olarak yorumlayacak ve her yolu bir TensorFlow SavedModelBundle servis edilebilir için bir yükleyiciye dönüştürecektir. Muhtemelen SavedModelBundle adaptörünü, servis dosyalarının gerçekten yüklenmesi ve sunulmasıyla ilgilenen AspiredVersionsManager takacaksınız. Çalışan bir sunucu kitaplığı elde etmek için bu üç tür modülün birbirine zincirlenmesinin iyi bir örneği servables/tensorflow/simple_servers.cc dosyasında bulunur. Burada ana kod akışının bir özeti verilmiştir (kötü hata yönetimiyle; gerçek kod daha dikkatli olmalıdır):

İlk önce bir yönetici oluşturun:

std::unique_ptr<AspiredVersionsManager> manager = ...;

Ardından bir SavedModelBundle kaynak bağdaştırıcısı oluşturun ve bunu yöneticiye takın:

std::unique_ptr<SavedModelBundleSourceAdapter> bundle_adapter;
SavedModelBundleSourceAdapterConfig config;
// ... populate 'config' with TensorFlow options.
TF_CHECK_OK(SavedModelBundleSourceAdapter::Create(config, &bundle_adapter));
ConnectSourceToTarget(bundle_adapter.get(), manager.get());

Son olarak yol kaynağınızı oluşturun ve SavedModelBundle adaptörüne takın:

auto your_source = new YourPathSource(...);
ConnectSourceToTarget(your_source, bundle_adapter.get());

ConnectSourceToTarget() işlevi ( core/target.h dosyasında tanımlanmıştır) bir Source<T> bir Target<T> ye bağlamak için yalnızca SetAspiredVersionsCallback() i çağırır ( Target , istenen sürüm isteklerini yakalayan bir modüldür, yani bir bağdaştırıcı veya yönetici). ).