TensorFlowプロジェクトは、バージョン2.3.0のリリースを発表した。これは、入力パイプラインのボトルネックの低減、前処理用のKerasレイヤー、メモリプロファイリングのための新しいメカニズムを備えている。
TensorFlow開発者のアドボケートであるJosh Gordon氏は、最近のブログ投稿で新しいリリースのハイライトについて概説した。tf.dataパッケージには、入力前処理をワーカーマシンのクラスタに分散できる新しいサービスAPIが含まれている。これにより、トレーニング中のデータのスループットを向上させることができる。さらに、スナップショットAPIは、前処理パイプラインの結果をディスクに永続化できるため、後続のトレーニング実行に必要な作業を削減できる。実験的なKeras前処理レイヤーAPIを使用すると、一部の前処理操作を深層学習モデルに組み込んで、モデルのデプロイを簡素化できる。TF Profilerには、デバッグを支援するために、メモリプロファイリングとPythonトレース用の新しいツールが含まれている。Gordon氏はTwitterで、TensorFlow2.3は「堅実でユーザー中心のリリース」であるとコメントしている。
tf.dataパッケージは、入力前処理、つまり抽出-変換-ロード(ETL)パイプラインを定義する方法として、TensorFlowバージョン1.4で導入された。これにより、トレーニングマシンのCPUは、前段の一連のデータに対するGPU処理と並行して、ディスクからのロードや変換機能など、一連のデータに対するIOおよび計算アクティビティを実行できるようになった。ただし、場合によっては、前処理がGPU処理よりも長くかかり、GPUがアイドル状態になることがある。新しいリリースでは、前処理をマシンのクラスタに分散するためのメカニズムが提供される。マシンの例として、Google Kubernetes Engineが挙げられる。前処理が非常に計算集約的であるトレーニングシナリオに対して、新しいリリースでは、前処理されたデータをディスクに永続化するためのスナップショットAPIも提供される。スナップショットは、変換コードの変更など、入力パイプラインの変更を検出することもできる。この変更により、スナップショットの再計算が発生する。
トレーニングデータに適用される前処理ロジックは、本番環境でトレーニングされたモデルに入力される推論データにも適用する必要がある。これは、入力パイプラインコードもモデルを使用するシステムに複製する必要があるため、デプロイを複雑にする可能性がある。新しい実験的なKeras前処理レイヤーAPIを使用すると、一部の前処理タスクをモデル定義に含めることができ、推論時にデータに自動的に適用させることができる。たとえば、新しいTextVectorizationレイヤーを使用して、文字列をトークン化およびベクトル化するためのロジックを含めることができる。他の新しいレイヤーは、画像処理とカテゴリーデータ処理に利用できる。
TensorFlow 2.2で導入されたTF Profilerには、2つの新機能がある。メモリプロファイラは、トレーニング中のメモリ使用量を監視し、「余分な作業なしで」プロファイラダッシュボードに結果を表示できる。メモリプロファイラは、メモリ不足やメモリ断片化の問題のデバッグを支援できる。プロファイラには、実行中にPython呼び出しスタックを表示するのに役立つ新しいPythonトレーサーも含まれている。
TensorFlowの主な競合であるPyTorchにも、特にメモリプロファイラを搭載した最近のリリースがあった。昨年末時点において、TensorFlowは依然として業界で主要なフレームワークであったが、新しいリリースに関するRedditのディスカッションには、TensorFlowへの不満を表すいくつかのコメントがあった。あるユーザーは次のように述べている。
業界の専門家であり、研究者ではないTensorFlow Xは依然として優れており、[TensorFlowの]最大の強みの1つです。しかし、ますますオンライン方式になっていると言われています。TensorFlowにうんざりしてきています。
TensorFlowのソースコードと2.3リリースノートはGitHubで入手できる。