2026-04-07

【備忘録】SB3 と TensorBoard

Stable Baselines3 (SB3) は、PyTorch をベースに実装した、信頼性の高い強化学習アルゴリズム(PPO, DQN, SAC 等)のオープンソースライブラリです。OpenAI Baselines の改良版で、統一された API により、数行のコードで環境の学習・評価・保存が容易に行えるため、研究やプロトタイピングの効率を大幅に向上できます。

強化学習モデルの学習中に、エピソード毎に解析したい情報を引き出す方法について Microsoft Copilot(以降、単に Copilot)に相談していたところ TensorBoard で可視化する話がでたので、突っ込んで聞いてみました。TensorBoard はその名前から TensorFlow の専用ツールだと勝手に思っていたのですが、全くの誤解でした。

知らない」っていうのは怖いですね。TensorBoard を利用することで RL(強化学習)モデルの学習時の内部状態を(ほぼ)リアルタイムで確認できるようになりました。

TensorBoard について

Copilot が TensorBoard について下記のようにまとめてくれました。

  • 学習中の指標(episode reward, loss など)をグラフでリアルタイム可視化するツール
  • ブラウザで http://localhost:6006 を開いて眺めるスタイル
  • TensorBoard は TensorFlow 専用ではない
  • ログファイルを読み取るだけの汎用可視化サーバー
  • SB3 は標準で TensorBoard 出力に対応している
  • RL の “見えない内部状態” を可視化する最強ツール

TensorBoard の基本的な使い方

備忘録として、以前とりあげた倒立振子問題 (CartPole) [3] の学習を TensorBoard で可視化します。

動作環境は、パッケージのバージョンが更新されていることを除けば、倒立振子問題 (CartPole) の記事 [3] と同じですが、さらに TensorBoard をインストールします。

$ pip install tensorboard

TensorBoard を利用するには、モデル生成時、tensorboard_log に TensorBoard 用ログの出力ディレクトリ(存在していなくとも良い)を指定します。

model = PPO(
    "MlpPolicy",
    env,
    verbose=1,
    tensorboard_log="./ppo_cartpole_tensorboard/",
)

編集したプログラム cartpole_rl.py を起動して学習を始めた後に、別ターミナルで TensorBoard を起動します。その際に --logdir に、モデル生成時に指定したログの出力ディレクトリを指定します。

$ tensorboard --logdir ./ppo_cartpole_tensorboard/

ブラウザで http://localhost:6006 を開きます。

他の PC からアクセスする場合

LAN 内の他の PC のブラウザからアクセスをしたい場合は、TensorBoard のポート番号がファイアウォールを通るようにしておきます。

$ sudo firewall-cmd --add-port=6006/tcp --permanent
$ sudo firewall-cmd --reload

TensorBoard を起動する時に外部からアクセスできるように --bind_all を付けます。

$ tensorboard --logdir ./ppo_cartpole_tensorboard/ --bind_all

実行例

TensorBoard 用のログを出力できるようにしたプログラム cartpole_rl.py を起動します。

cartpole_rl.py の実行例
$ python cartpole_rl.py
Using cpu device
Wrapping the env in a DummyVecEnv.
Logging to ./ppo_cartpole_tensorboard/PPO_1
---------------------------------
| rollout/           |          |
|    ep_len_mean     | 20.3     |
|    ep_rew_mean     | 20.3     |
| time/              |          |
|    fps             | 46       |
|    iterations      | 1        |
|    time_elapsed    | 44       |
|    total_timesteps | 2048     |
---------------------------------
-----------------------------------------
| rollout/                |             |
|    ep_len_mean          | 26.4        |
|    ep_rew_mean          | 26.4        |
| time/                   |             |
|    fps                  | 46          |
|    iterations           | 2           |
|    time_elapsed         | 88          |
|    total_timesteps      | 4096        |
| train/                  |             |
|    approx_kl            | 0.008908875 |
|    clip_fraction        | 0.0802      |
|    clip_range           | 0.2         |
|    entropy_loss         | -0.686      |
|    explained_variance   | 0.000353    |
|    learning_rate        | 0.0003      |
|    loss                 | 6.18        |
|    n_updates            | 10          |
|    policy_gradient_loss | -0.0121     |
|    value_loss           | 45.3        |
-----------------------------------------
...
(以降省略)

別ターミナルで TensorBoard の起動します。

$ tensorboard --logdir ./ppo_cartpole_tensorboard/

Firefox を起動して http://localhost:6006 にアクセスします。

Firefox 上に表示した TensorBoard(例)

参考サイト

  1. Tensorboard Integration — Stable Baselines3 documentation
  2. tensorflow/tensorboard: TensorFlow's Visualization Toolkit
  3. bitWalk's: 倒立振子問題 (CartPole) [2025-10-03]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加