2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

雑に始める CWL!でudockerを利用する

Last updated at Posted at 2018-12-26

CWLでudocker を利用してみる

@tm_tn さんが 雑に始める CWL!を書いているので、この内容を利用してcwltoolのudockerを利用する機能を使用してみる

udockerの準備

udockerをインストールして欲しい手順は2. クラスター計算機で udocker を利用する: インストール編等を参照
curlのバージョンが古いと正常に動作しないので、その時はcurlをバージョンアップしよう!

udockerをカレントディレクトリにインストールしているので、PATHを通しておこう

cwlを記述する

雑に始める CWL!のそれをそのまま利用する

内容は次の通り

head.cwl
cwlVersion: v1.0
class: CommandLineTool
baseCommand: [head]
arguments: [-n$(inputs.nlines), $(inputs.source)]
inputs:
  - id: source
    type: File
  - id: nlines
    type: int
outputs:
  - id: out
    type: stdout
stdout: $(inputs.source.nameroot)-head.txt
requirements:
  - class: DockerRequirement
    dockerPull: alpine:latest

処理対象のファイルの作成方法も改めて記載しておく

$ man head > manhead.txt

udocker を利用して実行

いよいよudockerを利用して実行してみる

cwltool に--user-space-docker-cmd=udocker を指定してdockerの代わりにudockerを利用するようにする

$ cwltool  \
    --user-space-docker-cmd=udocker \
    head.cwl \
    --source manhead.txt\
    --nlines 5

実行結果は次の通り

$ cwltool      --user-space-docker-cmd=udocker     head.cwl     --source manhead.txt    --nlines 5
/home/usr1/.udocker/bin/cwltool 1.0.20181217162649
Resolved 'head.cwl' to 'file:///home/usr1/work/cwl/head.cwl'
[job head.cwl] /tmp/OiEMR1$ udocker \
    --quiet \
    run \
    --volume=/tmp/OiEMR1:/bDkEhV \
    --volume=/tmp/0h3_Oq:/tmp \
    --volume=/home/usr1/work/cwl/manhead.txt:/var/lib/cwl/stga57d9eba-5c74-4201-8ae7-a81c633fd6e7/manhead.txt \
    --workdir=/bDkEhV \
    --rm \
    --env=TMPDIR=/tmp \
    --env=HOME=/bDkEhV \
    alpine:latest \
    head \
    -n5 \
    /var/lib/cwl/stga57d9eba-5c74-4201-8ae7-a81c633fd6e7/manhead.txt > /tmp/OiEMR1/manhead-head.txt
[job head.cwl] Max memory used: 12MiB
[job head.cwl] completed success
{
    "out": {
        "checksum": "sha1$2520a3daad4351ed428f758236710d4c703f2362", 
        "basename": "manhead-head.txt", 
        "location": "file:///home/usr1/work/cwl/manhead-head.txt", 
        "path": "/home/usr1/work/cwl/manhead-head.txt", 
        "class": "File", 
        "size": 158
    }
}
Final process status is success

作成されたmanhead-head.txtを確認すると正常に動作した事がわかる

Job Schedulerを利用する

udockerの醍醐味はdockerをインストールできない環境でもdockerコンテナを利用できるということ
ここではUniva Grid Engineを利用して同じ処理をdocker環境の無いクラスターのノードにサブミットしてみる

その前にmanhead-head.txtを別名に変更しておこう

$ mv manhead-head.txt manhead-head_back.txt

下記では次の一連の作業を実行

  • qsubでのジョブのサブミット qsub -jc ジョブ実行用のキュー -cwd -b y 実行するコマンド
  • フォルダ上のファイルの確認
  • 結果の比較を行い出力に差が無い事を確認
$ qsub -jc ジョブ実行用のキュー -cwd -b y cwltool --user-space-docker-cmd=udocker head.cwl --source manhead.txt --nlines 5
Your job 4661722 ("cwltool") has been submitted
$ ls
cwltool.e4661722  cwltool.o4661722  head.cwl  manhead-head.txt  manhead-head_back.txt  manhead.txt  udocker
$ diff manhead-head.txt  manhead-head_back.txt  
$ 

このようにして、cwltoolとudockerを利用して結果を得られた

注意

  • コンテナ上のツールがudockerの環境下で正しく動作するかについて先に検証しておくこと
  • ジョブを実行した数だけ、コンテナを展開した結果がディスク上に残るので適切な方法でこれを消去すること
    • 大量のJobをクラスタに分散する場合には特に留意が必要

今回はここまで:smile:

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?