Azure Batch サンプルプログラムのカスタマイズ

目的

Azure Batchのpythonサンプルプログラムを、ゲノムシークエンスデータ解析に使いやすいようにカスタマイズしたのでメモしておく。

 

カスタマイズしたプログラム

github.com

オリジナルのサンプルプログラム

github.com

 

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概要

f:id:ken0-1n:20180403134741p:plain

事前準備

リファレンスゲノム、FASTQ Fileと実行ScriptをAzureストレージにアップロードしておく。Docker imageをDockerHubに登録しておく

1.AzurebatchのJobを作成

2.Azurebatchのpoolを作成

3.タスク(実行するプログラム)の登録

  Azureストレージから解析に必要なデータをダウンロード

  docker imageをpullしてくる

  解析処理の実行

4.タスクをモニタリングする

5.解析が完了したら、結果をAzure Storageにアップロードする

 

オリジナルpythonスクリプトの説明はこちら

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としよう。