GCPのプリエンプティブルインスタンスで大量の数値計算を行う際に、自動化するスクリプトを作って利用しています。以下は、GitHubに置いたスクリプトの説明(のコピー)です。
Batch scripts for Google Cloud Platform
Google Cloud Platformでのバッチ処理をサポートするスクリプト。
システム全体について
Google Cloud Platform(GCP)において、完全に並列化可能で、条件の異なる大量の処理を、できるだけ短い時間で実施することを目的に開発した。
システムは、費用削減効果の高いプリエンプティブ仮想マシンを用いることを前提に設計しているが、通常の仮想マシンでの実行も可能。
自動化のために、以下の機能を実装した。
- 処理(以後、解析と呼ぶ)の条件(以後、パラメータと呼ぶ)を登録
- 解析を行うワーカインスタンスを複数立ち上げ
- パラメータを取得し、解析プログラムを実行
- 解析プログラムの結果ファイルをクラウドストレージにアップロード
- ワーカインスタンスを再利用して、起動にかかるオーバーヘッドなく、次のパラメータで解析プログラムを実行
- 後からワーカインスタンス数を増やすと、自動的にジョブを割り当てる
- ワーカインスタンスを監視し、異常終了したワーカインスタンスを再起動
- 実行中のパラメータや解析途中ファイルをクラウドストレージに退避
- 退避したパラメータや解析途中ファイルを再起動時に復元
- ワーカインスタンスの状態をログに残す
- バッチ登録時に、解析プログラムのバージョンチェックを行う
準備
GCPに新しいプロジェクトを作成し、ディスクイメージなどの設定をする。
doc/settings.mdを参照
解析
キューに解析パラメータを複数登録してワーカインスタンスを立ち上げると、キューに登録した解析パラメータにしたがって、ユーザの解析プログラムを逐次実行する。
doc/execution.mdを参照
サンプル
doc/execution.md内のインストラクション通りに進めると、逆行列の計算を行い結果をファイルに出力する。
script/inverse_matrix.shが、pythonの環境設定や解析結果フォルダの作成を行い、パラメータを変えてscript/inverse_matrix.pyを複数回実行する。
リソース
リソース割り当て
大量の処理を並列に行うため、利用申請が必要になることがある。
- Cloud Console
IAMと管理>割り当て
Preemptible CPU, In-use IP address, Local SSDを編集する。- CPU : 必要な量 * 2 (Hyperthreadingのため) 例: 3000 CPU
- IP : # of CPU / 8 CPU (PreemptibleインスタンスのCPU数) 例: 380 IP
- SSD : # of IP * 375 GB (SSDのサイズ) 例: 142500 GB
- 価格の安いリージョンは us-west1, us-central1, us-east1
リクエストが処理されるまで一週間ほどかかる。
(個人の契約では3000CPUに対して、利用前に$450ドルの入金が必要だった。(2016年))
利用リソース
Coupute Engine
- インスタンス
- マシンイメージ
Cloud Storage
- 解析結果の保存
- ジョブ管理情報(runフォルダ)
- インスタンス起動オプション(INSTANCE_OPTIONS.txt)
- スクリプト(script.tar.bz2)
- ログ(logs/)
- ジョブパラメータの一時保存(params/)
- 停止インスタンスの一時結果(results/)
- インスタンスの状態(workers/)
Logging
- インスタンス&ジョブ管理情報
- リソース: グローバル
- ログ
- instance-up/down/upexpected-down: マシンの起動と停止の情報
- worker: ジョブの開始と終了の情報
Pub/Sub
- ジョブ管理情報
リソース不足について
たくさんマシンを立ち上げた際は、足りないリソースがないか確認する。使用量でソートすると分かりやすい。
その他
メンバに必要な権限
- Project: 参照者
- Compute Engine: Computeインスタンス管理者(v1)
- Service Accounts: サービスアカウントユーザー
- Logging: Logging管理者
- Pub/Sub: Pub/Sub管理者
- ストレージ: ストレージ管理者
実行中のバッチのクリーンアップ(手動)
- インスタンスの削除
- ストレージ
-
run/workerフォルダの削除 -
run/paramsrun/resultsフォルダの削除(未完了の解析を再開する場合には削除しない)
-
- Pub/Subのトピックとサブスクリプションの削除
バージョン管理について
-
gcp/master/config.sh内のVERSION_CHECKを有効にすると、バージョン管理されていないファイルがある場合は停止する。 - このレポジトリのバージョン管理は消しておく。