2023年ごろから、TensorFlowプロファイラを使おうとしても、「No profile data was found」と出て、使えないバグがあります。その解消方法について紹介します。
バグの内容
TensorBoardでPROFILEタグを選択して、プロファイラを使おうとすると、次のようなメッセージが出ます。
これは次の公式のガイドやチュートリアルをそのままcolabで実行しても、同じように起きますので、使い方が間違っているわけでなく、バグです。
- https://www.tensorflow.org/guide/profiler
- https://www.tensorflow.org/tensorboard/tensorboard_profiling_keras
このガイドとチュートリアルは2023年1月ごろに生成されていて、そのころのtensorflow + tensorboard-plugin-profileバージョンなら動くようです。
しかし、2024/1現在のcolabではその古いtensorflowのバージョンを使おうとしてもcuDNNかcudaかあたりに不整合で、かなり面倒な状態です。
Issuesにも挙がっています。
この不具合は半年~1年ほど放置されているようです。
環境
Tensorflowとtensorboard-plugin-profileのバージョンは2.15.0です。
$ pip freeze | grep tensorboard tensorboard==2.15.1 tensorboard-data-server==0.7.2 tensorboard-plugin-profile==2.15.0 $ pip freeze | grep tensorflow tensorflow==2.15.0 tensorflow-datasets==4.9.3 tensorflow-estimator==2.15.0 tensorflow-gcs-config==2.15.0 tensorflow-hub==0.15.0 tensorflow-io-gcs-filesystem==0.34.0 tensorflow-metadata==1.14.0 tensorflow-probability==0.22.0 $ nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2023 NVIDIA Corporation Built on Tue_Aug_15_22:02:13_PDT_2023 Cuda compilation tools, release 12.2, V12.2.140 Build cuda_12.2.r12.2/compiler.33191640_0
対処方法
本来ならコードを修正してプルリクエストを投げるべきかもしれませんが、対処療法をして使用していますので、その方法を紹介します。(Issuesにもそれっぽいことが書いてありました。)
それは、ログデータをひとつ上のディレクトリに移動すれば動くというものです。
プロファイルログ収集後には次のように、trainとvalidationフォルダのなかにeventsファイルが入っています。
それを次のように移動します。
そしてtensorboardのリロードボタンを押すと、読めるようになります。
コードでログを移動する
Tensorflow Profilerのログは次のように取得しているとします。
!pip install -U tensorboard-plugin-profile import pytz log_dir = "logs/fit/" + datetime.datetime.now(pytz.timezone('Asia/Tokyo')).strftime("%Y%m%d-%H%M%S") tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1, profile_batch='500,510') model.fit(x=x_train, y=y_train, epochs=1, validation_data=(x_test, y_test), callbacks=[tensorboard_callback])
ログデータをコードで移動するには次のようにします。
import pathlib log_files = pathlib.Path('./logs/fit').glob('*/*/events.out.tfevents*') for file in log_files: !mv {file} {file.parent.parent}
ファイルの移動にはshutil.move()を使用してもよいです。
まとめ
TensorFlow Profilerのバグ「No profile data was found」は、ログファイルを一つ上のディレクトリに移動すればとりあえず解消します。
以上、TensorFlow ProfilerのバグNo profile data was foundの解消方法。 でした。
- PROIRON
- 価格¥2,780(2024/11/20 06:46時点)
- Amazonで口コミ・レビューを見る