Azure Batch サンプルプログラムのカスタマイズ
目的
Azure Batchのpythonサンプルプログラムを、ゲノムシークエンスデータ解析に使いやすいようにカスタマイズしたのでメモしておく。
カスタマイズしたプログラム
オリジナルのサンプルプログラム
azurebatchmonの実行環境
Azure 仮想マシン Standard DS1 v2 (1 vcpu、3.5 GB メモリ) Ubuntu
Azureのアカウントが必要
・Azure アカウント (メインのアカウント)
・Azure Batchアカウント( Azure Portal で Batch アカウントを作成する | Microsoft Docs )
・ストレージアカウント( Azure Portal でストレージ アカウントを作成… | Microsoft Docs )
Pythonのモジュールのインストール
# azure-batchとazure-strageにアクセスするためのpythonパッケージ
pip install azure-batch
pip install azure-storage
Azurebatchmon概要
事前準備
リファレンスゲノム、FASTQ Fileと実行ScriptをAzureストレージにアップロードしておく。Docker imageをDockerHubに登録しておく
1.AzurebatchのJobを作成
2.Azurebatchのpoolを作成
3.タスク(実行するプログラム)の登録
Azureストレージから解析に必要なデータをダウンロード
docker imageをpullしてくる
解析処理の実行
4.タスクをモニタリングする
5.解析が完了したら、結果をAzure Storageにアップロードする
Azure クイック スタート - Batch ジョブの実行 - Python | Microsoft Docs
カスタマイズのポイント
1.シークエンスデータは数十~数百GBのビックデータなのでローカルからのアップロードはしない
ゲノムデータはストレージに置いておく。Microsoft Genomicsもデータはストレージはじまりでストレージ終わり。このやり方が無難。
2.ストレージのデータに対するダウンロードとアップロードにazcopyを使う。
azcopyの利点
・recursiveが可能
・Storageアカウント、コンテナ名とファイル名を1つのpathとして記載できるので便利。(cliだとファイル名とは別にコンテナ名を指定する必要があった)
・destに指定したファイルパスに、ディレクトリがない場合は作成される
サンプルコード(ダウンロード
azcopy \
--source https://storage_account.file.core.windows.net/my_container/ \
--destination /mnt \
--source-key storage_account_key \
--recursive
サンプルプログラムにあるTaskAddParameterを用いてストレージからのファイルダウンロードは、recursiveができないっぽいので使わなかった。
3.Pool作成時のStartタスクでDockerをインストールする。
そしてタスクで解析ツールが入っているDocker imageをダウンロードして、解析処理を実行する。
Pool作成時のStartタスクでDockerをインストール
pool_start_commands = [dockerインストール]
PoolAddParameter(command_line=common.helpers.wrap_commands_in_shell('linux',pool_task_commands),
・・略・・)
タスクでDockerを使った解析処理を実行する
commands = [docker run イメージ]
tasks.append(batch.models.TaskAddParameter(
'azmon-task-{}'.format(idx),
common.helpers.wrap_commands_in_shell('linux', commands),
user_identity=run_elevated))
便利だったところ
・スタートタスクが失敗してもリトライされる。
・VMが起動してタスクが投入されるところをコンソールから確認できる。
困ったところ
・pool中のVMのタスクが失敗した場合の戻り値をどうやってとるかわからない。
・東日本リージョン混んでる(2018年3月時点)low priority VMを使ったけど、かなり割り込みが多かった。→西日本リージョンに移動した。
改善ポイント
・オートスケーリング機能を使用して、idleのVMをdeleteした方が良い。
・タスクにリトライ機能があるので使った方が良い。
・ログをストレージに保存するように設定する。現時点ではプールの削除とともにログも消える。
クラウドって
・データのリージョン間コピーのお値段高いので気をつける。(Azureに限らないけど)
最後に
改善ポイントはまだあるけど、ほかにもやりたいことあるし、3月にできるだけやろうと考えていたので、Time's upとしよう。