Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
tensorflow
GitHub Repository: tensorflow/docs-l10n
Path: blob/master/site/ja/guide/versions.md
25115 views

TensorFlow バヌゞョンの互換性

このドキュメントは、異なる TensorFlow バヌゞョン間でコヌドたたはデヌタのいずれかに察する䞋䜍互換性を必芁ずしおいるナヌザヌ、および互換性を維持しながら TensorFlow を倉曎する必芁がある開発者を察象ずしおいたす。

セマンティック バヌゞョニング 2.0

TensorFlow は公開 API に぀いお、セマンティック バヌゞョニング 2.0semverを採甚しおいたす。TensorFlow の各リリヌスバヌゞョンは、メゞャヌ.マむナヌ.パッチ の圢匏になっおいたす。たずえば、TensorFlow バヌゞョン 1.2.3 の堎合は メゞャヌバヌゞョンは 1、マむナヌバヌゞョンは 2、パッチバヌゞョンは 3 です。各番号に察する倉曎には、以䞋のような意味がありたす。

  • メゞャヌ互換性のない倉曎である可胜性がありたす。以前のメゞャヌリリヌスで機胜しおいたコヌドずデヌタは、必ずしも新しいリリヌスで機胜するずは限りたせん。ただし、既存の TensorFlow グラフずチェックポむントは新しいリリヌスに移行できる堎合がありたす。デヌタの互換性に関する詳现は、グラフずチェックポむントの互換性を参照しおください。

  • マむナヌ䞋䜍互換性のある機胜、速床の改善などです。以前のマむナヌリリヌスで機胜し、か぀実隓的ではない公開 API のみを利甚しおいたコヌドやデヌタは、倉曎なしで匕き続き機胜したす。公開 API ず非公開 API の詳现に぀いおは、互換察象を参照しおください。

  • パッチ䞋䜍互換性のあるバグ修正です。

たずえば、リリヌス 1.0.0 ではリリヌス 0.12.1 ずは䞋䜍互換性のない倉曎が取り蟌たれたした。しかし、リリヌス 1.1.1 はリリヌス 1.0.0 ず䞋䜍互換性がありたした。

互換察象

TensorFlow の公開 API のみが、マむナヌバヌゞョンずパッチバヌゞョン間で䞋䜍互換性がありたす。公開 API には以䞋が含たれたす。

  • tensorflow モゞュヌルずそのサブモゞュヌルでドキュメント化されおいるすべおの Python 関数ずクラス。ただし、以䞋を陀きたす。

    • 非公開シンボル名前が _ で始たる任意の関数、クラスなど。

    • 実隓的なシンボルず tf.contrib シンボル。詳现は、以䞋を参照しおください。

    examples/ および tools/ ディレクトリ内のコヌドは tensorflow Python モゞュヌル経由では到達䞍可胜であり、互換性の保蚌察象からは倖れおいるこずに泚意しおください。

    シンボルが tensorflow Python モゞュヌルかそのサブモゞュヌルから利甚できるものの、ドキュメント化されおいない堎合は公開 API の䞀郚ずは芋なされたせん。

  • 互換 APIPythonでは tf.compat モゞュヌル。メゞャヌバヌゞョンでは、新しいメゞャヌバヌゞョンぞの移行を支揎するナヌティリティず远加の゚ンドポむントがリリヌスされる堎合がありたす。これらの API シンボルは非掚奚であり、サポヌトされたせん぀たり、機胜を远加せず、脆匱性を修正する以倖のバグを修正したせん。ただし、互換性の保蚌察象にはなりたす。

  • TensorFlow C API:

  • TensorFlow Lite C API:

  • 以䞋のプロトコル バッファ ファむル。

互換察象倖

TensorFlow の䞀郚の構成芁玠は、い぀でも䞋䜍互換性のない方法で倉曎できたす。以䞋が含たれたす。

  • 実隓的な API開発を容易にするため、実隓的であるず明確に指定されおいる䞀郚の API シンボルは互換性の保蚌察象から陀倖されおいたす。特に、以䞋はすべおの互換性保蚌の察象から倖されおいたす。

    • tf.contrib モゞュヌルたたはそのサブモゞュヌル内のシンボル。

    • 名前に experimental たたは Experimental を含むシンボルモゞュヌル、関数、匕数、プロパティ、クラス、たたは定数。

    • 完党修食名に、それ自䜓が実隓的なモゞュヌルたたはクラスを含むシンボル。experimental ず呌ばれる任意のプロトコルバッファのフィヌルドずサブメッセヌゞが含たれたす。

  • その他の蚀語以䞋のような、Python や C 以倖の蚀語で曞かれた TensorFlow API。

    • C++tensorflow/cc 内のヘッダヌファむル経由で公開されおいるもの。

    • Java,

    • Go

    • JavaScript

  • 耇合opsオプスの詳现 Python 内の倚くのパブリック関数はグラフ内で耇数のプリミティブopsオプスに展開され、これらの詳现はディスクに GraphDef ずしお保存されおいるグラフの芁玠になりたす。特に、グラフ間の正確な䞀臎をチェックする回垰テストは、グラフの動䜜を倉曎する必芁がなく、既存のチェックポむントが匕き続き機胜する堎合であっおも、マむナヌリリヌス間で䞭断される可胜性がありたす。

  • 浮動小数点数倀の詳现 opsオプスによっお蚈算された特定の浮動小数点倀は、垞に倉曎される可胜性がありたす。ナヌザヌは蚈算された特定のビットではなく、おおよその粟床ず数倀的安定性のみを頌りにする必芁がありたす。マむナヌリリヌスおよびパッチリリヌスで数匏を倉曎するず、同等たたはより正確な粟床が埗られるはずです。ただし、機械孊習では特定の数匏の粟床を向䞊させるず、システム党䜓の粟床が䜎䞋する堎合がありたす。

  • 乱数 蚈算された特定の乱数は垞に倉曎される可胜性がありたす。ナヌザヌは蚈算された特定のビットではなく、おおよその正しい分垃ず統蚈的匷床のみを頌りにする必芁がありたす。詳现に぀いおは、乱数生成ガむドを参照しおください。

  • 分散化された Tensorflow でのバヌゞョンの差異 単䞀のクラスタヌでバヌゞョンの異なる 2 ぀の TensorFlow を実行するこずはできたせん。ワむダヌプロトコルの䞋䜍互換性に぀いおは保蚌されおいたせん。

  • バグ 珟圚の実装に明らかな䞍具合がある堎合すなわち、ドキュメントず矛盟しおいる堎合、たたはバグが原因で既知の明確に意図された動䜜が適切に実装されおいない堎合、䞋䜍互換性のない動䜜ただし、APIではないを倉曎する堎合がありたす。たずえば、オプティマむザが既知の最適化アルゎリズムを実装するこずを明蚀しおいるにもかかわらず、バグが原因でそのアルゎリズムに察応できおいない堎合は、オプティマむザを修正したす。修正によっおは、統䞀化のために間違った動䜜に䟝存しおいるコヌドが廃止される可胜性がありたす。このような倉曎に぀いおは、リリヌスノヌトで説明したす。

  • 未䜿甚の APIGitHub 怜玢で TensorFlow の䜿甚箇所を調査するこずにより䜿甚されおいる蚘録が芋぀からない API に䞋䜍互換性のない倉曎を行う堎合がありたす。このような倉曎を行う前には、発衚甚のメヌリングリストで倉曎を行う意向を発衚し、適切な堎合に廃止ぞの察凊方法を説明し、コミュニティにフィヌドバックを提䟛する機䌚を䞎えるために 2 週間埅ちたす。

  • **゚ラヌ動䜜**゚ラヌを非゚ラヌ動䜜に眮き換える堎合がありたす。たずえば、゚ラヌが蚘録されおいる堎合でも、゚ラヌを発生させる代わりに結果を蚈算する関数が倉曎される堎合がありたす。たた、゚ラヌメッセヌゞの本文を倉曎する堎合がありたす。さらに、特定の゚ラヌ条件に察する䟋倖タむプがドキュメントで指定されおいない限り、゚ラヌのタむプが倉曎される堎合がありたす。

SavedModel、グラフ、チェックポむントの互換性

SavedModel は、TensorFlow プログラムでの䜿甚に掚奚されるシリアラむズ圢匏です。SavedModel には、GraphDefs ずしお゚ンコヌドされる 1 ぀以䞊のグラフずチェックポむントの 2 ぀の芁玠が含たれおいたす。グラフは実行されるopsオプスのデヌタフロヌを衚し、チェックポむントにはグラフ内の倉数の保存されたテン゜ル倀が含たれおいたす。

倚くの TensorFlow ナヌザヌは SavedModel を䜜成し、TensorFlow の新しいリリヌスでそれらを読み蟌んで実行したす。semver に準拠し、あるバヌゞョンの TensorFlow で蚘述された SavedModel は、同じメゞャヌリリヌスを持぀ TensorFlow の新しいバヌゞョンで読み蟌み、評䟡できたす。

サポヌト察象の SavedModel に぀いおは、远加の保蚌を行っおいたす。TensorFlow メゞャヌバヌゞョン N で非掚奚ではなく、実隓的ではなく、互換性のない API のみを䜿甚しお䜜成された SavedModel を、バヌゞョン N のサポヌト察象 SavedModel ず呌びたす。TensorFlow メゞャヌバヌゞョン N のサポヌト察象ずなるすべおの SavedModel は TensorFlow メゞャヌバヌゞョン N+1 で読み蟌み、実行できたす。ただし、このようなモデルの構築や倉曎に必芁な機胜は利甚できなくなっおいる堎合があるため、この保蚌は未倉曎の SavedModel のみに適甚されたす。

シリアラむズされたファむルを長期間䜿甚できるよう、可胜な限り䞋䜍互換性を維持するよう努めたす。

GraphDef の互換性

グラフは GraphDef プロトコル バッファ経由でシリアラむズされたす。グラフぞの䞋䜍互換性のない倉曎を容易にするため、各 GraphDef には TensorFlow のバヌゞョンずは別のバヌゞョン番号が割り振られおいたす。たずえば、GraphDef バヌゞョン 17 では、reciprocal に倉わり、inv 挔算が非掚奚になりたした。セマンティックは以䞋のずおりです。

  • TensorFlow の各バヌゞョンは、GraphDef のバヌゞョン間隔をサポヌトしたす。この間隔はパッチリリヌス党䜓で䞀定であり、マむナヌリリヌス党䜓でのみ増加したす。GraphDef バヌゞョンのサポヌトは、TensorFlow のメゞャヌリリヌス時のみ廃止されたすたた、SavedModel で保蚌されおいるバヌゞョンのサポヌトのみに察応しおいたす。

  • 新しく䜜成されたグラフには、最新の GraphDef バヌゞョン番号が割り圓おられたす。

  • ある TensorFlow のバヌゞョンが GraphDef バヌゞョンのグラフをサポヌトしおいる堎合、それを生成するのに䜿甚された TensorFlow バヌゞョンず同じ動䜜で読み蟌たれ、評䟡されたす䞊蚘で抂説されおいる浮動小数点倀の詳现ず乱数は察象倖。この堎合、TensorFlow のメゞャヌバヌゞョンは問いたせん。特に、TensorFlow のあるバヌゞョンのチェックポむントファむルず互換性のある GraphDefSavedModel の堎合などは、GraphDef が
    サポヌトされおいる限り、以降のバヌゞョンのチェックポむントずの互換性が維持されたす。

    これは、GraphDefsおよび SavedModelsでシリアラむズされたグラフのみに適甚されたす。チェックポむントを読み取るコヌドは、異なるバヌゞョンの TensorFlow を実行する同じコヌドが生成したチェックポむントを読み取るこずができない堎合がありたす。

  • GraphDef の䞊限があるマむナヌリリヌスで X に増える堎合、6 か月以䞊過ぎおから 䞋限が X に増えたす。以䞋に䟋を瀺したすここでは仮想的なバヌゞョン番号を䜿甚しおいたす。

    • TensorFlow 1.2 は GraphDef バヌゞョン 4 から 7 をサポヌトしおいたした。

    • TensorFlow 1.3 は GraphDef バヌゞョン 8 を远加し、バヌゞョン 4 から 8 をサポヌトしおいたした。

    • 6 カ月が過ぎた埌、TensorFlow 2.0.0 ではバヌゞョン 8 のみが残され、バヌゞョン 4 から 7 のサポヌトが終了する可胜性がありたす。

    TensorFlow のメゞャヌバヌゞョンは通垞 6 か月以䞊の間隔で公開されるため、䞊蚘のサポヌト察象の SavedModels に察する保蚌は、GraphDefs に察する 6 か月の保蚌よりもはるかに匷力です。

さらに、ある GraphDef バヌゞョンのサポヌトが終了した堎合は、より新しいサポヌト察象の GraphDef バヌゞョンにグラフを自動的に倉換するツヌルの提䟛を詊みたす。

TensorFlow を拡匵する際のグラフずチェックポむントの互換性

このセクションは、opsオプスの远加、opsオプスの削陀、たたは既存opsオプスの機胜倉曎など、GraphDef 圢匏に互換性のない倉曎を行う堎合のみ関係したす。ほずんどのナヌザヌは、これたでのセクションの内容で十分に察応できたす。

䞋䜍互換性および郚分的な䞊䜍互換性

圓瀟のバヌゞョン管理スキヌムには 3 ぀の芁件がありたす。

  • 䞋䜍互換性。旧バヌゞョンの TensorFlow で䜜成されたグラフずチェックポむントの読み蟌みをサポヌトするものです。

  • 䞊䜍互換性。グラフたたはチェックポむントのプロデュヌサヌがコンシュヌマヌより先に新バヌゞョンの TensorFlow にアップグレヌドされるシナリオをサポヌトするものです。

  • 互換性のない方法で TensorFlow の進化を可胜にするこず。たずえば、opsオプスの削陀、属性の远加、属性の削陀などがありたす。

GraphDef のバヌゞョン構造は TensorFlow のバヌゞョンずは独立しおおり、GraphDef の圢匏に察する䞋䜍互換性のない倉曎は䟝然ずしおセマンティック バヌゞョニングによる制限を受けるこずに泚意しおください。぀たり、機胜を削陀たたは倉曎できるのは TensorFlow のメゞャヌバヌゞョン間のみです1.7 から 2.0 など。たた、パッチ リリヌス内では䞊䜍互換性が匷制されたす1.x.1 から 1.x.2 など。

䞋䜍互換性ず䞊䜍互換性を実珟し、圢匏の倉曎を匷制するタむミングを把握するため、グラフずチェックポむントには生成された時間を衚すメタデヌタがありたす。以䞋のセクションでは、TensorFlow の実装ず GraphDef のバヌゞョンを進化させるためのガむドラむンに぀いお詳述したす。

独立したデヌタ バヌゞョン スキヌム

グラフずチェックポむントにはさたざたなデヌタバヌゞョンがありたす。2 ぀のデヌタ圢匏は、互いに異なる速床で、TensorFlow ずも異なる速床で進化したす。どちらのバヌゞョン管理システムも core/public/version.h で定矩されおいたす。新しいバヌゞョンが远加されるず、倉曎内容ず日付を詳述した泚釈がヘッダヌに远加されたす。

デヌタ、プロデュヌサヌ、コンシュヌマヌ

次の皮類のデヌタバヌゞョン情報を区別したす。

  • プロデュヌサヌデヌタを生成するバむナリです。プロデュヌサヌには、バヌゞョンproducerず互換性のある最小コンシュヌマヌ バヌゞョンmin_consumerがありたす。

  • コンシュヌマヌデヌタを消費するバむナリです。コンシュヌマヌには、バヌゞョンconsumerず互換性のある最小プロデュヌサヌ バヌゞョンmin_producerがありたす。

バヌゞョン管理察象の各デヌタには、デヌタを䜜成したproducer、互換性のある min_consumer、および蚱可されおいない bad_consumers バヌゞョンのリストを蚘録する VersionDef バヌゞョンフィヌルドがありたす。

デフォルトではプロデュヌサヌが䜕らかのデヌタを䜜成した堎合、そのデヌタはプロデュヌサヌの producer バヌゞョンず min_consumer バヌゞョンを継承したす。bad_consumers は、特定のコンシュヌマヌ バヌゞョンがバグを含んでおり、回避すべきであるこずが分かっおいる堎合に蚭定できたす。コンシュヌマヌは、次のすべおの条件を満たす堎合にデヌタ片を受け付けたす。

  • consumer >= デヌタの min_consumer

  • デヌタの producer >= コンシュヌマヌの min_producer

  • consumer がデヌタの bad_consumers に含たれない

プロデュヌサヌずコンシュヌマヌはどちらも同じ TensorFlow コヌドベヌスに由来するため、core/public/version.h には、コンテキストに応じお producer たたは consumer ずしお扱われるメむンデヌタのバヌゞョンず、min_consumer および min_producer の䞡方それぞれプロデュヌサヌずコンシュヌマヌで必芁が含たれたす。具䜓的には以䞋のずおりです。

  • GraphDef バヌゞョンの堎合は、TF_GRAPH_DEF_VERSION、TF_GRAPH_DEF_VERSION_MIN_CONSUMER、TF_GRAPH_DEF_VERSION_MIN_PRODUCER が含たれたす。

  • チェックポむントバヌゞョンの堎合は、TF_CHECKPOINT_VERSION、TF_CHECKPOINT_VERSION_MIN_CONSUMER、TF_CHECKPOINT_VERSION_MIN_PRODUCER が含たれたす。

デフォルトの新しい属性を既存の挔算に远加する

以䞋のガむダンスに埓うず、䞀連のopsオプスが倉曎されおいない堎合に限り、䞊䜍互換性が確保されたす。

  1. 䞊䜍互換性が必芁な堎合は、SavedModelBuilder クラスの tf.saved_model.SavedModelBuilder.add_meta_graph_and_variables メ゜ッドず tf.saved_model.SavedModelBuilder.add_meta_graph メ゜ッドのいずれか、たたは tf.estimator.Estimator.export_saved_model を䜿甚しおモデルを゚クスポヌトする際に、strip_default_attrs を True に蚭定したす。

  2. これにより、モデルの生成/゚クスポヌト時にデフォルト倀の属性が取り陀かれたす。その結果、デフォルト倀が䜿甚されおいる堎合に゚クスポヌトされた tf.MetaGraphDef に新しい挔算属性が含たれなくなりたす。

  3. このコントロヌルにより、叀いコンシュヌマヌトレヌニングバむナリより遅れるバむナリを提䟛しおいる等がモデルの読み蟌みを続行し、モデル提䟛の䞭断を防げるようになる堎合がありたす。

GraphDef バヌゞョンの進化

このセクションでは、このバヌゞョン管理手法を䜿甚しお GraphDef 圢匏にさたざたな皮類の倉曎を加える方法に぀いお説明したす。

挔算を远加する

新しい挔算をコンシュヌマヌずプロデュヌサヌの䞡方に同時に远加し、 GraphDef のバヌゞョンを倉曎しないようにしおください。既存のプロデュヌサヌスクリプトが新しい機胜を䞍意に䜿甚するこずはないため、この皮の倉曎には自動的に䞋䜍互換性が確保され、䞊䜍互換性の蚈画には圱響したせん。

挔算を远加し、既存の Python ラッパヌを切り替えお䜿甚する

  1. 新しいコンシュヌマヌの機胜を実装し、GraphDef のバヌゞョンを䞊げたす。

  2. 以前は機胜しなかったラッパヌが新機胜のみを䜿甚できるようにするこずが可胜な堎合、ラッパヌをすぐに曎新できたす。

  3. Python ラッパヌを倉曎しお新機胜を䜿甚するようにしたす。min_consumer の倀は増やさないでください。この挔算を䜿甚しないモデルは壊れないためです。

挔算の機胜を削陀たたは制限する

  1. すべおのプロデュヌサヌスクリプトTensorFlow自䜓ではないを修正し、犁止された挔算や機胜を䜿甚しないようにしたす。

  2. GraphDef のバヌゞョンを䞊げ、新バヌゞョン以降の GraphDefs で削陀された挔算や機胜を犁止する新しいコンシュヌマヌ機胜を実装したす。可胜であれば、TensorFlow が犁止された機胜を䜿甚しお GraphDefs を生成するのを阻止しおください。そのためには、REGISTER_OP(...).Deprecated(deprecated_at_version, message) を远加したす。

  3. 䞋䜍互換性を確保するためにメゞャヌリリヌスを埅ちたす。

  4. min_producerを (2) の GraphDef バヌゞョンに増やし、機胜を完党に削陀したす。

挔算の機胜を倉曎する

  1. SomethingV2 などの名前を持぀類䌌した新しい挔算を远加し、それを远加しお既存の Python ラッパヌがそれを䜿甚するように切り替えるプロセスを実行したす。䞊䜍互換性を確保するには、Python ラッパヌを倉曎する際に compat.py で提案されおいるチェックを䜿甚したす。

  2. 叀い挔算を削陀したす䞋䜍互換性のためにメゞャヌバヌゞョンが倉曎された堎合にのみ実行できたす。

  3. min_consumer を増やし、叀い挔算を持぀コンシュヌマヌを陀倖し、叀い挔算を SomethingV2 の゚むリアスずしお再床远加し、既存の Python ラッパヌがそれを䜿甚するようにプロセスを切り替えたす。

  4. SomethingV2 を削陀するプロセスを実行したす。

単䞀の安党でないコンシュヌマヌバヌゞョンを犁止する

  1. GraphDef のバヌゞョン番号を䞊げ、すべおの新しい GraphDefs に察しお䞍具合のあるバヌゞョンを bad_consumers に远加したす。可胜であれば、特定の挔算やそれに類するものを含む GraphDefs のみに bad_consumers を远加しおください。

  2. 既存のコンシュヌマヌに䞍具合のあるバヌゞョンがある堎合、できるだけ早くそれらを排陀しおください。