TensorFlow sürüm uyumluluğu

Bu belge, TensorFlow'un farklı sürümleri arasında (kod veya veri için) geriye dönük uyumluluğa ihtiyaç duyan kullanıcılar ve uyumluluğu korurken TensorFlow'u değiştirmek isteyen geliştiriciler içindir.

Anlamsal versiyonlama 2.0

TensorFlow, genel API'si için Semantic Versioning 2.0'ı ( semver ) takip ediyor. TensorFlow'un her yayın sürümü MAJOR.MINOR.PATCH biçimine sahiptir. Örneğin, TensorFlow sürüm 1.2.3'te MAJOR sürüm 1, MINOR sürüm 2 ve PATCH sürüm 3 bulunur. Her numarada yapılan değişiklikler aşağıdaki anlama gelir:

  • BÜYÜK : Potansiyel olarak geriye dönük uyumsuz değişiklikler. Önceki büyük sürümde çalışan kod ve veriler yeni sürümde mutlaka çalışmayacaktır. Ancak bazı durumlarda mevcut TensorFlow grafikleri ve kontrol noktaları yeni sürüme taşınabilir; Veri uyumluluğuna ilişkin ayrıntılar için bkz. Grafiklerin ve kontrol noktalarının uyumluluğu .

  • KÜÇÜK : Geriye dönük uyumlu özellikler, hız iyileştirmeleri vb. Önceki küçük sürümde çalışan ve yalnızca deneysel olmayan genel API'ye bağlı olan kod ve veriler değişmeden çalışmaya devam edecektir. Genel API'nin ne olduğu ve ne olmadığıyla ilgili ayrıntılar için bkz. Neler kapsanmaktadır?

  • PATCH : Geriye dönük uyumlu hata düzeltmeleri.

Örneğin, 1.0.0 sürümü, 0.12.1 sürümünden geriye doğru uyumsuz değişiklikler getirmiştir. Ancak 1.1.1 sürümü, 1.0.0 sürümüyle geriye dönük olarak uyumluydu .

Neleri kapsıyor

Yalnızca TensorFlow'un genel API'leri küçük ve yama sürümlerinde geriye dönük olarak uyumludur. Genel API'ler şunlardan oluşur:

  • Aşağıdakiler hariç, tensorflow modülünde ve alt modüllerinde belgelenen tüm Python işlevleri ve sınıfları

    • Özel semboller: adı _ ile başlayan herhangi bir işlev, sınıf vb.
    • Deneysel ve tf.contrib sembolleri, ayrıntılar için aşağıya bakın.

    examples/ ve tools/ dizinlerindeki kodlara tensorflow Python modülü aracılığıyla erişilemediğini ve bu nedenle uyumluluk garantisi kapsamında olmadığını unutmayın.

    Bir sembol tensorflow Python modülü veya alt modülleri aracılığıyla mevcutsa ancak belgelenmemişse, genel API'nin bir parçası olarak kabul edilmez .

  • Uyumluluk API'si (Python'da tf.compat modülü). Ana sürümlerde, kullanıcıların yeni bir ana sürüme geçişine yardımcı olmak için yardımcı programlar ve ek uç noktalar yayınlayabiliriz. Bu API sembolleri kullanımdan kaldırılmıştır ve desteklenmemektedir (yani, herhangi bir özellik eklemeyeceğiz ve güvenlik açıklarını düzeltmek dışında hataları düzeltmeyeceğiz), ancak uyumluluk garantilerimizin kapsamına giriyorlar.

  • TensorFlow C API'si:

  • Aşağıdaki protokol arabellek dosyaları:

TensorFlow Lite için ayrı sürüm numarası

Şu anda TensorFlow Lite, TensorFlow'un bir parçası olarak dağıtılmaktadır. Bununla birlikte, gelecekte TensorFlow Lite API'lerinde diğer TensorFlow API'lerinden farklı bir programa göre değişiklik yayınlama ve hatta TensorFlow Lite'ı TensorFlow'dan ayrı bir kaynak dağıtımına ve/veya ayrı bir kaynak deposuna taşıma hakkını saklı tutuyoruz.

Bu nedenle TensorFlow Lite için ( tensorflow/lite/version.h TFLITE_VERSION_STRING ve tensorflow/lite/c/c_api.h TfLiteVersion() ) TensorFlow'dan ( tensorflow/core/public/version.h TF_VERSION_STRING ) farklı bir sürüm numarası kullanıyoruz. tensorflow/core/public/version.h ve tensorflow/c/c_api.h içindeki TF_Version() . Şu anda bu iki sürüm numarası aynı değere sahip. Ancak gelecekte farklılaşabilirler; örneğin, TensorFlow'un ana sürüm numarasını artırmadan TensorFlow Lite'ın ana sürüm numarasını artırabiliriz veya bunun tersi de geçerlidir.

TensorFlow Lite sürüm numarasının kapsadığı API yüzeyi aşağıdaki genel API'lerden oluşur:

Deneysel semboller kapsanmamaktadır; ayrıntılar için aşağıya bakın.

TensorFlow Lite Uzantı API'leri için ayrı sürüm numarası

TensorFlow Lite, TensorFlow Lite yorumlayıcısını bir grafikte kullanıcı tanımlı işlemler sağlayan "özel işlemler" veya bir grafik için (veya bir grafiğin alt kümesi için) hesaplamanın devredilmesine izin veren "delegeler" ile genişletmek için C API'leri sağlar. özel bir arka uç. Toplu olarak "TensorFlow Lite Uzantı API'leri" olarak adlandırdığımız bu API'ler, TensorFlow Lite uygulamasının bazı ayrıntılarına daha kapsamlı bağımlılıklar gerektirir.

Potansiyel olarak geriye dönük uyumlu olmayan değişiklikler de dahil olmak üzere bu API'lerde, diğer TensorFlow Lite API'lerinden farklı bir programa göre değişiklik yayınlama hakkını saklı tutuyoruz. Bu nedenle, TensorFlow Lite Extension API'leri için TensorFlow Lite veya TensorFlow'un (önceki bölümde açıklanan) sürüm numaralarından farklı bir sürüm numarası kullanıyoruz. TensorFlow Lite Uzantı API'leri sürümünü ( tensorflow/lite/version.h TFLITE_EXTENSION_APIS_VERSION_STRING ve tensorflow/lite/c/c_api.h TfLiteExtensionApisVersion()) almak için TensorFlow Lite sürüm 2.15'te bazı yeni API'ler sunuyoruz. TensorFlow Lite Extension API'lerinin sürüm numarası şu anda TensorFlow ve TensorFlow Lite sürüm numarasıyla aynıdır. Ancak gelecekte farklılaşabilirler; örneğin, TensorFlow Lite Uzantısı API'lerinin ana sürüm numarasını, TensorFlow Lite'ın ana sürüm numarasını artırmadan artırabiliriz (ya da tam tersi).

TensorFlow Lite Uzantısı API'leri sürüm numarasının kapsadığı API yüzeyi aşağıdaki genel API'lerden oluşur:

Yine deneysel semboller kapsanmamaktadır; ayrıntılar için aşağıya bakın.

Neler kapsanmıyor

TensorFlow'un bazı parçaları herhangi bir noktada geriye dönük olarak uyumsuz şekillerde değişebilir. Bunlar şunları içerir:

  • Deneysel API'ler : Geliştirmeyi kolaylaştırmak için deneysel olarak açıkça işaretlenmiş bazı API sembollerini uyumluluk garantilerinin dışında tutuyoruz. Özellikle aşağıdakiler herhangi bir uyumluluk garantisi kapsamında değildir:

    • tf.contrib modülündeki veya alt modüllerindeki herhangi bir sembol;
    • adı experimental veya Experimental içeren herhangi bir sembol (modül, işlev, bağımsız değişken, özellik, sınıf, sabit, tür, paket vb.); veya
    • Tam nitelikli adı kendisi deneysel olan bir modül, sınıf veya paket içeren herhangi bir sembol. Bu, experimental adı verilen herhangi bir protokol arabelleğinin alanlarını ve alt mesajlarını içerir.
  • Diğer diller : Python ve C dışındaki dillerdeki TensorFlow API'leri, örneğin:

    ve özellikle Java/Kotlin, C, Objective-C ve Swift dışındaki dillerdeki TensorFlow Lite API'leri

    • C++ ( tensorflow/lite/ dosyasındaki başlık dosyaları aracılığıyla gösterilir)
  • Bileşik operasyonların ayrıntıları: Python'daki pek çok genel fonksiyon, grafikteki birkaç ilkel operasyona genişler ve bu ayrıntılar, GraphDef s olarak diske kaydedilen herhangi bir grafiğin parçası olacaktır. Bu ayrıntılar küçük sürümler için değişebilir. Özellikle, grafikler arasındaki tam eşleşmeyi kontrol eden regresyon testlerinin, grafiğin davranışı değişmese ve mevcut kontrol noktaları çalışmaya devam etse bile, küçük sürümlerde kırılması muhtemeldir.

  • Kayan nokta sayısal ayrıntıları: Ops tarafından hesaplanan belirli kayan nokta değerleri herhangi bir zamanda değişebilir. Kullanıcılar hesaplanan belirli bitlere değil, yalnızca yaklaşık doğruluğa ve sayısal kararlılığa güvenmelidir. Küçük sürümlerde ve yama sürümlerinde sayısal formüllerde yapılan değişiklikler, karşılaştırılabilir veya daha iyi bir doğrulukla sonuçlanmalıdır; ancak makine öğreniminde belirli formüllerin geliştirilmiş doğruluğunun, genel sistem için doğruluğun azalmasına yol açabileceği uyarısında bulunulmalıdır.

  • Rastgele sayılar: Hesaplanan belirli rastgele sayılar herhangi bir zamanda değişebilir. Kullanıcılar, hesaplanan belirli bitlere değil, yalnızca yaklaşık olarak doğru dağılımlara ve istatistiksel güce güvenmelidir. Ayrıntılar için rastgele sayı oluşturma kılavuzuna bakın.

  • Dağıtılmış Tensorflow'ta sürüm çarpıklığı: Tek bir kümede TensorFlow'un iki farklı sürümünün çalıştırılması desteklenmez. Wire protokolünün geriye dönük uyumluluğuna ilişkin hiçbir garanti yoktur.

  • Hatalar: Mevcut uygulamanın açıkça bozulduğu, yani belgelerle çeliştiği veya iyi bilinen ve iyi tanımlanmış bir amaçlanan davranışın, bir böceğe. Örneğin, bir optimize edici, iyi bilinen bir optimizasyon algoritmasını uyguladığını iddia ediyor ancak bir hata nedeniyle bu algoritmayla eşleşmiyorsa, o zaman optimize ediciyi düzeltiriz. Düzeltmemiz, yakınsama için yanlış davranışa bağlı olarak kodu bozabilir. Bu tür değişiklikleri sürüm notlarında belirteceğiz.

  • Kullanılmayan API: Belgelenmiş bir kullanım alanı bulamadığımız API'lerde geriye dönük olarak uyumsuz değişiklikler yapma hakkını saklı tutuyoruz (GitHub araması yoluyla TensorFlow kullanımının denetimini gerçekleştirerek). Bu tür herhangi bir değişiklik yapmadan önce, herhangi bir aksaklığın (varsa) nasıl ele alınacağına ilişkin talimatlar sunarak, anons@ posta listesinde değişiklik yapma niyetimizi açıklayacağız ve topluluğumuza geri bildirimlerini paylaşma şansı vermek için iki hafta bekleyeceğiz. .

  • Hata davranışı: Hataları, hatasız davranışlarla değiştirebiliriz. Örneğin, bir hata belgelenmiş olsa bile, bir hatayı yükseltmek yerine bir sonucu hesaplamak için bir fonksiyonu değiştirebiliriz. Ayrıca hata mesajlarının metnini değiştirme hakkımız da saklıdır. Ayrıca, belgelerde belirli bir hata koşulu için istisna türü belirtilmediği sürece hatanın türü değişebilir.

SavedModels, grafikler ve kontrol noktalarının uyumluluğu

SavedModel, TensorFlow programlarında kullanılmak üzere tercih edilen serileştirme formatıdır. SavedModels iki bölümden oluşur: GraphDefs olarak kodlanmış bir veya daha fazla grafik ve bir Denetim Noktası. Grafikler, çalıştırılacak operasyonların veri akışını tanımlar ve kontrol noktaları, bir grafikteki değişkenlerin kayıtlı tensör değerlerini içerir.

Birçok TensorFlow kullanıcısı SavedModels oluşturur ve bunları TensorFlow'un daha sonraki bir sürümüyle yükleyip çalıştırır. semver ile uyumlu olarak, TensorFlow'un bir sürümüyle yazılan SavedModels, aynı ana sürüme sahip daha sonraki bir TensorFlow sürümüyle yüklenebilir ve değerlendirilebilir.

Desteklenen SavedModel'ler için ek garantiler veriyoruz. TensorFlow ana sürümünde yalnızca kullanımdan kaldırılmayan, deneysel olmayan, uyumsuz API'ler kullanılarak oluşturulan SavedModel'i N N desteklenen bir SavedModel olarak adlandırıyoruz. TensorFlow ana sürüm N desteklenen herhangi bir SavedModel, TensorFlow ana sürüm N+1 ile yüklenebilir ve çalıştırılabilir. Ancak böyle bir modeli oluşturmak veya değiştirmek için gereken işlevsellik artık mevcut olmayabilir, dolayısıyla bu garanti yalnızca değiştirilmemiş SavedModel için geçerlidir.

Serileştirilmiş dosyaların uzun süre kullanılabilir olması için geriye dönük uyumluluğu mümkün olduğu kadar uzun süre korumaya çalışacağız.

GraphDef uyumluluğu

Grafikler GraphDef protokol arabelleği aracılığıyla serileştirilir. Grafiklerde geriye doğru uyumsuz değişiklikleri kolaylaştırmak için her GraphDef TensorFlow sürümünden ayrı bir sürüm numarası vardır. Örneğin, GraphDef sürüm 17, inv op'u reciprocal lehine kullanımdan kaldırdı. Anlambilim şunlardır:

  • TensorFlow'un her sürümü bir dizi GraphDef sürümünü destekler. Bu aralık yama sürümleri boyunca sabit olacak ve yalnızca küçük sürümlerde artacaktır. GraphDef sürümüne yönelik desteğin kaldırılması yalnızca TensorFlow'un büyük bir sürümü için gerçekleşecektir (ve yalnızca SavedModels için garanti edilen sürüm desteğiyle uyumlu).

  • Yeni oluşturulan grafiklere en son GraphDef sürüm numarası atanır.

  • TensorFlow'un belirli bir sürümü bir grafiğin GraphDef sürümünü destekliyorsa, ana soruna bakılmaksızın, onu oluşturmak için kullanılan TensorFlow sürümüyle aynı davranışla yüklenecek ve değerlendirilecektir (yukarıda özetlenen kayan noktalı sayısal ayrıntılar ve rastgele sayılar hariç). TensorFlow'un sürümü. Özellikle, TensorFlow'un bir sürümündeki bir kontrol noktası dosyasıyla uyumlu olan bir GraphDef (SavedModel'de olduğu gibi), GraphDef desteklendiği sürece sonraki sürümlerde bu kontrol noktasıyla uyumlu kalacaktır.

    Bunun yalnızca GraphDefs'teki (ve SavedModels) serileştirilmiş Grafikler için geçerli olduğunu unutmayın: Bir denetim noktası okuyan kod , TensorFlow'un farklı bir sürümünü çalıştıran aynı kod tarafından oluşturulan denetim noktalarını okuyamayabilir.

  • GraphDef üst sınırı bir (küçük) sürümde X'e yükseltilirse, alt sınırın X'e yükseltilmesinden önce en az altı ay olacaktır. Örneğin (burada varsayımsal sürüm numaralarını kullanıyoruz):

    • TensorFlow 1.2, GraphDef 4 ila 7 arasındaki sürümlerini destekleyebilir.
    • TensorFlow 1.3, GraphDef sürüm 8'i ekleyebilir ve 4 ila 8 arasındaki sürümleri destekleyebilir.
    • En az altı ay sonra TensorFlow 2.0.0, 4'ten 7'ye kadar olan sürümlere yönelik desteği bırakabilir ve yalnızca sürüm 8'i bırakabilir.

    TensorFlow'un ana sürümleri genellikle 6 aydan daha uzun aralıklarla yayınlandığından, yukarıda ayrıntıları verilen desteklenen SavedModels garantilerinin GraphDefs için 6 aylık garantiden çok daha güçlü olduğunu unutmayın.

Son olarak, GraphDef sürümü desteği kaldırıldığında, grafikleri otomatik olarak desteklenen daha yeni bir GraphDef sürümüne dönüştürmek için araçlar sağlamaya çalışacağız.

TensorFlow'u genişletirken grafik ve kontrol noktası uyumluluğu

Bu bölüm yalnızca GraphDef formatında uyumsuz değişiklikler yapılırken (örneğin op'lar eklenirken, op'lar kaldırılırken veya mevcut op'ların işlevselliği değiştirilirken) geçerlidir. Önceki bölüm çoğu kullanıcı için yeterli olacaktır.

Geriye ve kısmi ileriye uyumluluk

Sürüm oluşturma planımızın üç gereksinimi vardır:

  • TensorFlow'un eski sürümleriyle oluşturulan yükleme grafiklerini ve kontrol noktalarını desteklemek için geriye dönük uyumluluk .
  • Bir grafik veya kontrol noktası üreticisinin tüketiciden önce TensorFlow'un daha yeni bir sürümüne yükseltildiği senaryoları desteklemek için ileri uyumluluk .
  • TensorFlow'un uyumsuz yollarla gelişmesini sağlayın. Örneğin, işlemleri kaldırmak, nitelikleri eklemek ve nitelikleri kaldırmak.

GraphDef sürüm mekanizması TensorFlow sürümünden ayrı olsa da GraphDef formatındaki geriye dönük uyumsuz değişikliklerin Semantik Sürüm Oluşturma tarafından hala kısıtlandığını unutmayın. Bu, işlevselliğin yalnızca TensorFlow'un MAJOR sürümleri ( 1.7 2.0 kadar) arasında kaldırılabileceği veya değiştirilebileceği anlamına gelir. Ek olarak, Yama sürümlerinde (örneğin 1.x.1 1.x.2 kadar) ileri uyumluluk zorunlu kılınır.

Geriye ve ileriye dönük uyumluluk elde etmek ve formatlardaki değişikliklerin ne zaman uygulanacağını bilmek için grafiklerde ve kontrol noktalarında, ne zaman üretildiklerini açıklayan meta veriler bulunur. Aşağıdaki bölümler, GraphDef sürümlerinin geliştirilmesine yönelik TensorFlow uygulamasını ve yönergelerini ayrıntılı olarak açıklamaktadır.

Bağımsız veri sürümü şemaları

Grafikler ve kontrol noktaları için farklı veri versiyonları vardır. İki veri formatı birbirinden farklı hızlarda ve ayrıca TensorFlow'dan farklı hızlarda gelişir. Her iki sürüm oluşturma sistemi de core/public/version.h dosyasında tanımlanmıştır. Yeni bir sürüm eklendiğinde, başlığa nelerin değiştiğini ve tarihi belirten bir not eklenir.

Veriler, üreticiler ve tüketiciler

Aşağıdaki veri sürümü bilgileri türlerini birbirinden ayırıyoruz:

  • üreticiler : veri üreten ikili dosyalar. Üreticilerin bir sürümü ( producer ) ve uyumlu oldukları bir minimum tüketici sürümü ( min_consumer ) vardır.
  • tüketiciler : veri tüketen ikili dosyalar. Tüketicilerin bir sürümü ( consumer ) ve uyumlu oldukları bir minimum üretici sürümü ( min_producer ) vardır.

Sürümlendirilmiş verilerin her bir parçası, verileri oluşturan producer , uyumlu olduğu min_consumer ve izin verilmeyen bad_consumers sürümlerinin listesini kaydeden bir VersionDef versions alanına sahiptir.

Varsayılan olarak, bir üretici bazı veriler oluşturduğunda veriler, üreticinin producer ve min_consumer sürümlerini devralır. bad_consumers belirli tüketici sürümlerinin hata içerdiği biliniyorsa ve bundan kaçınılması gerekiyorsa ayarlanabilir. Aşağıdakilerin tümü doğruysa tüketici bir veri parçasını kabul edebilir:

  • consumer >= verinin min_consumer
  • verinin producer >= tüketicinin min_producer
  • consumer datanın bad_consumers değil

Hem üreticiler hem de tüketiciler aynı TensorFlow kod tabanından geldiğinden, core/public/version.h bağlama bağlı olarak producer veya consumer olarak ele alınan bir ana veri sürümünü ve hem min_consumer hem de min_producer (sırasıyla üreticiler ve tüketiciler tarafından ihtiyaç duyulan) içerir. . Özellikle,

  • GraphDef sürümleri için TF_GRAPH_DEF_VERSION , TF_GRAPH_DEF_VERSION_MIN_CONSUMER ve TF_GRAPH_DEF_VERSION_MIN_PRODUCER sürümlerimiz bulunmaktadır.
  • Kontrol noktası versiyonları için TF_CHECKPOINT_VERSION , TF_CHECKPOINT_VERSION_MIN_CONSUMER ve TF_CHECKPOINT_VERSION_MIN_PRODUCER versiyonlarımız bulunmaktadır.

Mevcut bir operasyona varsayılan olarak yeni bir özellik ekleyin

Aşağıdaki rehberliği takip etmek, yalnızca operasyon seti değişmediyse size ileri uyumluluk sağlar:

  1. İleriye yönelik uyumluluk isteniyorsa, SavedModelBuilder sınıfının tf.saved_model.SavedModelBuilder.add_meta_graph_and_variables ve tf.saved_model.SavedModelBuilder.add_meta_graph yöntemlerini veya tf.estimator.Estimator.export_saved_model kullanarak modeli dışa aktarırken strip_default_attrs True olarak ayarlayın.
  2. Bu, modellerin üretildiği/dışa aktarıldığı sırada varsayılan değere sahip öznitelikleri ortadan kaldırır. Bu, dışa aktarılan tf.MetaGraphDef , varsayılan değer kullanıldığında yeni işlem niteliğini içermemesini sağlar.
  3. Bu denetime sahip olmak, güncel olmayan tüketicilerin (örneğin, eğitim ikili dosyalarının gerisinde kalan hizmet veren ikili dosyalar) modelleri yüklemeye devam etmesine ve model sunumunda kesintileri önlemesine olanak tanıyabilir.

Gelişen GraphDef sürümleri

Bu bölümde GraphDef formatında farklı türde değişiklikler yapmak için bu sürüm oluşturma mekanizmasının nasıl kullanılacağı açıklanmaktadır.

Operasyon ekle

Yeni operasyonu hem tüketicilere hem de üreticilere aynı anda ekleyin ve hiçbir GraphDef sürümünü değiştirmeyin. Bu tür bir değişiklik otomatik olarak geriye dönük olarak uyumludur ve mevcut yapımcı komut dosyaları yeni işlevselliği birdenbire kullanmayacağından ileriye yönelik uyumluluk planını etkilemez.

Bir op ekleyin ve onu kullanmak için mevcut Python sarmalayıcılarını değiştirin

  1. Yeni tüketici işlevselliğini uygulayın ve GraphDef sürümünü artırın.
  2. Sarmalayıcıların yeni işlevselliği yalnızca daha önce işe yaramayan durumlarda kullanmasını sağlamak mümkünse sarmalayıcılar şimdi güncellenebilir.
  3. Yeni işlevselliği kullanmak için Python sarmalayıcılarını değiştirin. Bu işlemi kullanmayan modellerin bozulmaması gerektiğinden min_consumer artırmayın.

Bir operasyonun işlevselliğini kaldırın veya kısıtlayın

  1. Tüm yapımcı komut dosyalarını (TensorFlow'un kendisi değil) yasaklı işlemi veya işlevselliği kullanmayacak şekilde düzeltin.
  2. GraphDef sürümünü artırın ve yeni sürüm ve üzeri sürümlerde GraphDef'ler için kaldırılan işlemi veya işlevselliği yasaklayan yeni tüketici işlevselliğini uygulayın. Mümkünse TensorFlow'un yasaklı işlevlere sahip GraphDefs üretmesini durdurun. Bunu yapmak için REGISTER_OP(...).Deprecated(deprecated_at_version, message) ekleyin.
  3. Geriye dönük uyumluluk amacıyla büyük bir sürümü bekleyin.
  4. min_producer (2)'deki GraphDef sürümüne yükseltin ve işlevselliği tamamen kaldırın.

Bir operasyonun işlevselliğini değiştirme

  1. SomethingV2 veya benzeri adında yeni bir benzer işlem ekleyin ve onu ekleme ve mevcut Python sarmalayıcılarını kullanacak şekilde değiştirme sürecini izleyin. İleriye dönük uyumluluğu sağlamak için Python sarmalayıcılarını değiştirirken compat.py'de önerilen kontrolleri kullanın.
  2. Eski işlemi kaldırın (Geriye dönük uyumluluk nedeniyle yalnızca büyük bir sürüm değişikliği ile gerçekleşebilir).
  3. Eski operasyona sahip tüketicileri elemek için min_consumer artırın, eski operasyonu SomethingV2 için bir takma ad olarak geri ekleyin ve mevcut Python sarmalayıcılarını onu kullanacak şekilde değiştirme işlemini gerçekleştirin.
  4. SomethingV2 kaldırmak için işlemi gerçekleştirin.

Tek bir güvenli olmayan tüketici sürümünü yasaklayın

  1. GraphDef sürümünü yükseltin ve tüm yeni GraphDef'ler için kötü sürümü bad_consumers ekleyin. Mümkünse, yalnızca belirli bir op veya benzerini içeren GraphDef'ler için bad_consumers ekleyin.
  2. Mevcut tüketiciler kötü versiyona sahipse, onları mümkün olan en kısa sürede piyasadan uzaklaştırın.