Checkpoint
前提: CheckpointのIOは無視できるほど小さい(爆速でCheckpointをread/writeするやつはいない)
学習開始時に pull checkpoint, 学習終了/中断時に push checkpointが必要.
抽象化をしない場合、remote->local checkpointダウウンロード、checkpoint local保存 + remoteアップロードが必要.
ただし、ファイルシステム/fsへのread/writeと見ればダウウンロード/アップロードを抽象化できる.
fsはデータ実体の場所を問わない (c.f. ファイルシステム - Wikipedia).
Checkpointを読みたかったらread, 書き込みたかったらwriteするだけ (透過的remoteアクセス).
remote対応しているfsを使うだけでいい(c.f. fsspec
)
欠点はIOパフォーマンスだが、前提にあるようにcheckpointはIO-boundにならないので無問題
Checkpoint/stateオブジェクト
何を読みだせるようにするか、という話.
機械学習では固定パラメータ(hparams)を指定して可変パラメータ(weights)を学習する.
推論時にはhparamsもweightsも固定されていて、それらをloadして推論する.
なのでhparamsとweightsは1つにパッケージングされ、1発でcheckpointから読みだせるといい.
hparamsとwieghts個別loadを "state load 1call" に抽象化できる.
ただし推論時のみ切り替えたい設定値はしばしばあるので、overrideはあるとベター.
run argument
コンテナベースの場合:
ENTRYPOINTで["python", "main.py"], CMDで["--arg_a", "A", "--arg_b", "B"]
こうすれば「設定を渡す」に抽象化できる(Pythonかどうか、どのファイルを実行するか、を透過的に)
学習用アプリケーション、的な抽象化になってる(アプリが何の言語で書かれているかUserは不関知)
Google AI Platform training
// Sets up the entry point to invoke the trainer.
ENTRYPOINT ["python", "task.py"]
https://cloud.google.com/ai-platform/training/docs/using-containers#dockerfile-basics
Google AI Platform training
The training service runs your Docker image, passing through any command-line arguments you specify when you create the training job.
https://cloud.google.com/ai-platform/training/docs/containers-overview