Skip to content

Latest commit

 

History

History
143 lines (97 loc) · 5.91 KB

ExperimentProject.md

File metadata and controls

143 lines (97 loc) · 5.91 KB

実験を行うにあたって

ここには実験の行い方や注意事項をまとめます。

実験を始めるときは

実験用ブランチを切る。

実験を始める時は日付を確認してexperiment/YYYY-MM-DD_実験タイトル(例: experiment/2023-02-10_fit-jsut)という名前でブランチを切り、Githubに公開してください。(publish branch.)

実験を進めていくうちに多くの修正や新規ファイルの作成が想定され、迅速に実験を進めるために行います。実験が最終的に完了した時にプルリクエストを送信します。

注意事項

データセットと学習ログをホストOSに保存する

docker内部で作業した記録はコンテナおよびボリュームが削除されると同時消えてしまいます。また、データセットは容量が大きいためそれぞれのDockerボリュームに保存しておくことはあまり望まれません。Dockerのbindマウントを使用することで、これらの問題を解決します。

方法:

Makefileのdocker-runコマンドに引数を追加します。<PathToDatasetDir><PathToLogDir>は実行環境によって書き換えてください。

docker run -it \
    ... \
    --mount type=bind,source=<PathToDatasetDir>,target=/workspace/data \
    --monnt type=bind,source=<PathToLogDir>,target=/workspace/logs \
    ...

Note: AWS上ではS3ストレージを直接マウントすることができないため、学習の最後にログデータを/mnt/sharedにコピーするか、zipにしてダウンロードする必要があります!

cp -r ./logs/** -d /mnt/shared/logs
zip -r logs.zip ./logs

Hydra による実験設定の上書き

Hydraを利用してハイパーパラメータの管理を行っているため簡単に上書きし、実験を行うことができます。

実験用configファイルを作成する

実験を異なるハイパーパラメータで行いたい場合は、configs/experimentの中にconfigファイルを作成してください。 その中にデフォルトで入っているexample.yamlを参考に中身を書いていきます。

configs/experiment/your_experiment.yaml

# @package _global_
# 上記の`@package _global_`はpython src/train.py experiment=your_experimentと指定するために必要です。

defaults:
  # configファイルごとデフォルト値をオーバライドする場合は次のように書きます。
  - override /env: new_env_config.yaml

# 通常値を上書きする時はコンフィグの最上位からたどって指定します。
trainer:
  num_episode: 10
  gradient_clip_value: 50.0

実行する時は次のようにコマンドライン引数として指定します。

python src/train.py experiment=your_experiment

今回のexperimentコンフィグによるオーバーライドはlightning-hydra-templateを参考にしています。

コマンドライン引数でオーバライドする。

Hydraはコマンドライン引数を用いて簡単にハイパーパラメータをオーバライドすることができます。実験のログに何をオーバライドしたかは.hydraフォルダに記録されるので簡単にいくつか試したい場合に重宝します。指定する際はコンフィグの最上位からドット.区切りで指定します。

例としてエピソード数を変更してみます。

python src/train.py trainer.num_episode=8888

出力結果

[2023-02-09 13:03:04,237][__main__][INFO] - Training configs:
...
trainer:
  num_episode: 8888
...

実験走らせてを放置する。

今回の実験も多くの時間がかかるため、コンソールを閉じても実行が続き、再接続できるようにする方法を記述します。

screenによる放置と再接続

screenパッケージを使用することで走らせたコードを放置したうえで、再開することができるようになります

  • screen python src/train.pyでsshなどの接続が切れても動き続けます
  • screen -lsで切断されたセッションを確認することが出来ます。
    There are screens on:
        2947.a_bsc      (Detached)
        17657.b_test1   (Detached)
        17897.c_test2   (Detached)
    
  • screen -r <id>で再接続することができます。 e.g. screen -r 2947

Dockerの再開

  1. docker psで実行中のコンテナIDを確認します。
    CONTAINER ID   IMAGE ...
    af810c94c026   148929cdadbd  ...
    
  2. docker exec -it <CONTAINER ID> /bin/bashでbashに入ることができます。

Tensorboardを使って結果を見る

今回実験した結果はtensorboardを使用することでインタラクティブに確認することが出来ます。 次のようにして起動することができます。そして デフォルトでは http://localhost:6006/ にブラウザからアクセスする事によって使用することが出来ます。

# on /workspace
tensorboard --logdir ./logs

output

...
Serving TensorBoard on localhost; to expose to the network, use a proxy or pass --bind_all
TensorBoard 2.11.2 at http://localhost:6006/ (Press CTRL+C to quit)

tensorboardは通常ローカルホストで起動しますが、VPN上に公開したりなど、外部のデバイスからもアクセスすることが出来ます。

AWSのJupyter Hub環境

AWS上のJupyter Hubの中でTensorboardを起動し利用する方法は現在わかっていません。