Yerel TensorFlow Everywhere etkinliğiniz için bugün LCV!
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

TensorFlow sürüm uyumluluğu

Bu belge, farklı TensorFlow sürümlerinde (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 sürüm oluşturma 2.0

TensorFlow, genel API'si için Anlamsal Sürüm Oluşturma 2.0'ı ( semver ) izler. TensorFlow'un her yayın sürümü MAJOR.MINOR.PATCH formuna MAJOR.MINOR.PATCH . Örneğin, TensorFlow sürüm 1.2.3, MAJOR sürüm 1, MINOR sürüm 2 ve PATCH sürüm 3'e sahiptir. Her bir sayıdaki 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ümle çalışan kod ve veriler, yeni sürümle mutlaka çalışmayacaktır. Ancak, bazı durumlarda mevcut TensorFlow grafikleri ve kontrol noktaları yeni sürüme taşınabilir; bkz grafikler ve kontrol noktası Uyumluluğu veri uyumluluğu ile ilgili detaylar için.

  • KÜÇÜK : Geriye dönük uyumlu özellikler, hız iyileştirmeleri, vb. Önceki küçük sürümle ç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 olmayacağıyla ilgili ayrıntılar için Kapsananlara bakın .

  • 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. Bununla birlikte, 1.1.1 sürümü, 1.0.0 sürümü ile geriye doğru uyumludur .

Neler kapsanır

Yalnızca TensorFlow'un genel API'leri küçük ve yama sürümleri arasında geriye doğru uyumludur. Genel API'ler şunlardan oluşur:

  • tensorflow modülündeki ve alt modüllerindeki belgelenmiş tüm Python fonksiyonları 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/ dizinlerdeki 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 tensorflow , ancak belgelenmemişse, o zaman genel API'nin bir parçası olarak kabul edilmez .

  • Uyumluluk API'si (Python'da, tf.compat modülü). Büyük sürümlerde, kullanıcılara yeni bir ana sürüme geçişte 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 girerler.

  • C API .

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

Ne kapsamında değildir

TensorFlow'un bazı bölümleri, herhangi bir noktada geriye dönük 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 garantilerinden muaf 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 veya sabit); veya

    • Tam adı, kendisi deneysel olan bir modül veya sınıf içeren herhangi bir sembol. Bu, experimental adlandırılan herhangi bir protokol tamponunun alanlarını ve alt mesajlarını içerir.

  • Diğer diller : Python ve C dışındaki dillerdeki TensorFlow API'leri, örneğin:

  • Bileşik işlemlerin ayrıntıları: Python'daki birçok genel işlev, grafikte birkaç ilkel GraphDef genişletilir 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 testleri, grafiğin davranışının değişmemiş olması ve mevcut kontrol noktalarının çalışmaya devam etmesine rağmen, küçük sürümlerde kırılma olasılığı yüksektir.

  • Kayan nokta sayısal ayrıntıları: İşlemler 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. İkincil ve yama sürümlerinde sayısal formüllerde yapılan değişiklikler, makine öğreniminde belirli formüllerin gelişmiş doğruluğunun tüm sistem için doğrulukta düşüşe neden olabileceği uyarısıyla karşılaştırılabilir veya iyileştirilmiş doğrulukla sonuçlanmalı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'da sürüm çarpıklığı: Tek bir kümede TensorFlow'un iki farklı sürümünü çalıştırmak desteklenmez. Tel protokolünün geriye dönük uyumluluğunun garantisi yoktur.

  • Hatalar: Mevcut uygulama açıkça bozulmuşsa, yani dokümantasyonla çelişiyorsa veya iyi bilinen ve iyi tanımlanmış bir amaçlanan davranış gereği gibi uygulanmıyorsa, geriye dönük uyumsuz davranış (API değil) değişiklikleri yapma hakkını saklı tutarız. bir böceğe. Örneğin, bir optimizasyon uzmanı iyi bilinen bir optimizasyon algoritması uyguladığını iddia ederse, ancak bir hata nedeniyle bu algoritmaya uymuyorsa, 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 not edeceğiz.

  • Kullanılmayan API: Belgelenmiş kullanım bulamadığımız API'lerde geriye dönük uyumsuz değişiklikler yapma hakkını saklı tutarız (GitHub araması aracılığıyla TensorFlow kullanımının denetimini yaparak). Bu tür bir değişiklik yapmadan önce, değişikliği yapma niyetimizi announce @ mailing listesinde açıklayacağız , herhangi bir kesintinin nasıl ele alınacağına dair talimatlar sunacağız (varsa) ve topluluğumuza geri bildirimlerini paylaşma şansı vermek için iki hafta bekleyeceğiz. .

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

SavedModellerin, grafiklerin ve kontrol noktalarının uyumluluğu

SavedModel, TensorFlow programlarında kullanmak için tercih edilen serileştirme formatıdır. SavedModels iki bölüm içerir: GraphDefs olarak kodlanmış bir veya daha fazla grafik ve bir Kontrol Noktası. Grafikler, çalıştırılacak işlemlerin veri akışını açıklar ve kontrol noktaları, bir grafikteki değişkenlerin kaydedilen tensör değerlerini içerir.

Birçok TensorFlow kullanıcısı SavedModel'leri oluşturur ve bunları daha sonraki bir TensorFlow sürümüyle yükleyip yürütür. Semver'e uygun olarak, TensorFlow'un bir sürümüyle yazılan SavedModels, aynı ana sürümle TensorFlow'un sonraki bir sürümüyle yüklenebilir ve değerlendirilebilir.

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

Geriye dönük uyumluluğu mümkün olduğu kadar uzun süre korumaya çalışacağız, böylece serileştirilmiş dosyalar uzun süre kullanılabilir.

GraphDef uyumluluğu

Grafikler, GraphDef protokol tamponu aracılığıyla serileştirilir. Grafiklerde geriye dönük 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 işlemini reciprocal lehine kullanımdan GraphDef . Anlambilim:

  • TensorFlow her sürümü bir aralığını destekleyen GraphDef sürümleri. Bu aralık, yama sürümleri arasında sabit olacak ve yalnızca küçük sürümlerde artacaktır. Bir GraphDef sürümü için destek GraphDef , yalnızca GraphDef büyük bir sürümü için gerçekleşir (ve yalnızca SavedModels için garanti edilen sürüm desteğiyle uyumludur).

  • 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, onu oluşturmak için kullanılan TensorFlow sürümüyle aynı davranışla yüklenir ve değerlendirilir (yukarıda özetlenen kayan noktalı sayısal ayrıntılar ve rastgele sayılar hariç), ana hatlardan bağımsız olarak TensorFlow sürümü. Özellikle, bir TensorFlow sürümündeki (bir SavedModel'de olduğu gibi) bir denetim noktası dosyasıyla uyumlu bir GraphDef, GraphDef desteklendiği sürece sonraki sürümlerde bu denetim noktası ile uyumlu kalacaktır.

    Kod bir kontrol noktası TensorFlow farklı bir sürümünü çalıştıran aynı kod tarafından oluşturulan kontrol noktaları okumak mümkün olmayabilir okur: Bu GraphDefs (ve SavedModels) tefrika Grafikleri için geçerlidirEND_BOLD unutmayın.

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

    • TensorFlow 1.2, GraphDef sürümlerini destekleyebilir.
    • TensorFlow 1.3, GraphDef sürüm 8'i ekleyebilir ve GraphDef sürümlerini destekleyebilir.
    • En az altı ay sonra, TensorFlow 2.0.0, yalnızca sürüm 8'i bırakarak 4 ila 7 sürümleri için desteği bırakabilir.

    TensorFlow'un ana sürümleri genellikle 6 aydan fazla arayla yayınlandığı için, 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, bir GraphDef sürümü için destek GraphDef , grafikleri otomatik olarak daha yeni desteklenen 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 denetim noktası uyumluluğu

Bu bölüm yalnızca, GraphDef eklerken, işlemleri kaldırırken veya mevcut işlemlerin işlevselliğini değiştirirken olduğu gibi GraphDef biçiminde uyumsuz değişiklikler yaparken ilgilidir. Önceki bölüm çoğu kullanıcı için yeterli olacaktır.

Geriye ve kısmi ileriye dönük 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 denetim 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 ileriye dönük uyumluluk .
  • Uyumsuz yollarla gelişen TensorFlow'u etkinleştirin. Örneğin, operasyonları kaldırmak, nitelik eklemek ve nitelikleri kaldırmak.

GraphDef sürüm mekanizması GraphDef sürümünden ayrı olsa da, GraphDef biçimindeki geriye dönük uyumsuz değişikliklerin Anlamsal GraphDef tarafından hala kısıtlandığını unutmayın. Bu, işlevselliğin yalnızca TensorFlow'un MAJOR sürümleri ( 1.7 ila 2.0 ) arasında kaldırılabileceği veya değiştirilebileceği anlamına gelir. Ayrıca, Yama sürümlerinde (örneğin 1.x.1 - 1.x.2 ) ileriye dönük uyumluluk zorunludur.

Geriye ve ileriye dönük uyumluluğa ulaşmak ve formatlarda, grafiklerde ve kontrol noktalarında değişikliklerin ne zaman uygulanacağını bilmek için, ne zaman üretildiklerini açıklayan meta veriler bulunur. Aşağıdaki bölümler, TensorFlow uygulamasını ve gelişen GraphDef sürümleri için yönergeleri GraphDef .

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

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

Veriler, üreticiler ve tüketiciler

Aşağıdaki veri sürümü bilgileri türleri arasında ayrım yapıyoruz:

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

Sürüm bilgisi verilerin Her parça bir sahiptir VersionDef versions kaydeden alanını producer verileri yapılmış min_consumer o uyumlu olduğunu ve bir listesini bad_consumers izin verilmez sürümleri.

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 hatalar içerdiği biliniyorsa ve bunlardan kaçınılması gerekiyorsa ayarlanabilir. Bir tüketici, aşağıdakilerin tümü doğruysa bir veri parçasını kabul edebilir:

  • consumer > = verilerin min_consumer
  • veri producer > = tüketicinin min_producer
  • consumer , verilerin bad_consumers

Hem üreticiler hem de tüketiciler aynı TensorFlow kod tabanından geldiği için, core/public/version.h , bağlama göre producer veya consumer olarak ve hem min_consumer hem de min_producer (sırasıyla üreticiler ve tüketiciler tarafından ihtiyaç duyulan) olarak değerlendirilen bir ana veri sürümü 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 .
  • Kontrol noktası sürümleri için, TF_CHECKPOINT_VERSION , TF_CHECKPOINT_VERSION_MIN_CONSUMER ve TF_CHECKPOINT_VERSION_MIN_PRODUCER .

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

Aşağıdaki rehberliğin ardından, yalnızca işlem seti değişmediyse size ileriye dönük uyumluluk sağlar:

  1. İleriye dönük uyumluluk isteniyorsa, modeli, 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 dışa aktarırken strip_default_attrs True tf.estimator.Estimator.export_saved_model
  2. Bu, modellerin üretilmesi / ihraç edilmesi sırasında varsayılan değerli öznitelikleri kaldırır. Bu, dışa aktarılan tf.MetaGraphDef , varsayılan değer kullanıldığında yeni op-özniteliğini içermediğinden emin olur.
  3. Bu kontrole sahip olmak, güncel olmayan tüketicilerin (örneğin, eğitim ikili dosyalarının gerisinde kalan ikili dosyalar hizmet vermesi) modelleri yüklemeye devam etmesine ve model sunumundaki kesintileri önlemesine olanak sağlayabilir.

Gelişen GraphDef sürümleri

Bu bölüm, GraphDef biçiminde farklı türlerde değişiklikler yapmak için bu sürüm oluşturma mekanizmasının nasıl kullanılacağını açıklamaktadır.

Operasyon ekle

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

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

  1. Yeni tüketici işlevselliği uygulayın ve GraphDef sürümünü GraphDef .
  2. Sarmalayıcıların yeni işlevi yalnızca daha önce çalışmayan durumlarda kullanmasını sağlamak mümkünse, sarmalayıcılar şimdi güncellenebilir.
  3. Yeni işlevi kullanmak için Python sarmalayıcılarını değiştirin. min_consumer , çünkü bu işlemi kullanmayan modeller min_consumer .

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

  1. Yasaklı op veya işlevselliği kullanmamak için tüm üretici komut dosyalarını (TensorFlow'un kendisini değil) düzeltin.
  2. GraphDef sürümünü artırın ve yeni sürüm ve üzeri GraphDefs için kaldırılan işlem veya işlevselliği yasaklayan yeni tüketici işlevselliği uygulayın. Mümkünse, TensorFlow'un yasaklanmış işlevselliğe sahip GraphDef'ler üretmeyi durdurmasını GraphDefs . Bunu yapmak için REGISTER_OP(...).Deprecated(deprecated_at_version, message) ekleyin REGISTER_OP(...).Deprecated(deprecated_at_version, message) .
  3. Geriye dönük uyumluluk amacıyla büyük bir sürüm bekleyin.
  4. min_producer (2) 'den 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 eklemek ve kullanmak için mevcut Python sarmalayıcılarını değiştirme işleminden geçin. İleriye dönük uyumluluğu sağlamak için, Python sarmalayıcılarını değiştirirken uyumlu.py'de önerilen kontrolleri kullanın.
  2. Eski operasyonu kaldırın (Yalnızca geriye dönük uyumluluk nedeniyle büyük bir sürüm değişikliğinde gerçekleşebilir).
  3. Artış min_consumer , eski op tüketicilere ekarte için bir takma ad olarak eski op geri eklemek için SomethingV2 ve kullanmak için varolan Python sarmalayıcılarını geçmek için sürecinden geçmesi.
  4. SomethingV2 kaldırma sürecinden geçin.

Güvenli olmayan tek bir tüketici sürümünü yasaklayın

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