TensorFlow ProfilerのバグNo profile data was foundの解消方法。

2023年ごろから、TensorFlowプロファイラを使おうとしても、「No profile data was found」と出て、使えないバグがあります。その解消方法について紹介します。

バグの内容

TensorBoardでPROFILEタグを選択して、プロファイラを使おうとすると、次のようなメッセージが出ます。

 

これは次の公式のガイドやチュートリアルをそのままcolabで実行しても、同じように起きますので、使い方が間違っているわけでなく、バグです。

このガイドとチュートリアルは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 ダンベル 3kg 2個セット エクササイズ ネオプレンゴムコーティング 筋トレ