0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SageMaker で TensorFlow Keras のログ(進捗状況)が正しく表示されない

Last updated at Posted at 2022-02-01

はじめに

機械学習を実行するとき、手元に高価な GPU マシンが存在しないので、
よく SageMaker のトレーニングジョブを利用しています

とあるモデルを SageMaker で学習したとき、ログを見るとこんな状態になってしまいました
※被害が分かりやすいように120文字で折り返しています

Epoch 4/10
#015 1/15 [=>............................] - ETA: 13s - loss: 0.4645 - accuracy: 0.9688#010#010#010#010#010#010#010#010#
010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#
010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#
010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#015 2/15 [===>..........................] - ETA: 10s - loss:
 0.4206 - accuracy: 0.9844#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#01
0#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#01
0#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#010#01
....

これが延々続きます

本来であれば、以下のように表示され、プログレスバーが進むはずです

Epoch 4/10
1/15 [=>............................] - ETA: 13s - loss: 0.4645 - accuracy: 0.9688

ローカルの Docker では問題なくプログレスバーが動いているのに、何故 SageMaker だとうまく動かないのでしょうか

実行環境

  • ローカルのDocker: 20.10.9
  • コンテナのベースイメージ: tensorflow/tensorflow:2.7.0-gpu
  • SageMaker のインスタンスタイプ: ml.g4dn.xlarge

学習の実行コード(抜粋)

model = tf.keras.Sequential(

...

model.fit(
    train_generator,
    epochs=10,
    verbose=1,
    steps_per_epoch=steps_per_epoch,
    validation_data=valid_generator,
    validation_steps=validation_steps,
    callbacks=[cb_es],
)

TensorFlow の Keras を利用しています

ログの抑制

調べると、 TensorFlow の Issue が出てきました

Keras がプログレスバーを表示するとき、バックスペース文字を使っており、
これがインタラクティブ(対話的)でない環境 = SageMaker のトレーニングジョブでは #010 として表示されてしまうようです

ノートブックで操作しているわけではなく、ログとして出力されているので仕方ないですね

解決策、というか妥協案ですが、
現状では model.fit の引数で verbose=2 を渡し、進捗表示を少なくするしかないようです

verbose: 整数.0,1,2のいずれか.進行状況の表示モード.0 = 表示なし,1 = プログレスバー,2 = 各試行毎に一行の出力.

0 で全く表示がないのは流石にログの意味がないし進捗が分からなくなるため、
2 で各エポック終了時の値だけ出すようにします

Epoch 4/10
15/15 - 13s - loss: 0.6037 - accuracy: 0.8660 - val_loss: 0.4044 - val_accuracy: 0.9479 - 13s 869ms/step

おわりに

ログとしてはエポック毎に出ていれば十分なので、
SageMaker のトレーニングジョブでは verbose=2 にするのが良さそうです

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?