Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Task Spooler を試した

2,390 views

Published on

社内勉強会での発表資料です。機械学習のジョブを流す際などに Task Spooler というツールが便利そうだと思い試してみました。使い方を簡単にまとめて紹介したものです。

Published in: Technology
  • Login to see the comments

  • Be the first to like this

Task Spooler を試した

  1. 1. Task Spooler を試した 内山 雄司 (@y__uti) 2016-09-13 社内勉強会
  2. 2. 自己紹介 内山 雄司 (@y__uti) ◦ http://y-uti.hatenablog.jp/ (phpusers-ja) 仕事 ◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています 興味 ◦ プログラミング言語処理系 ◦ 機械学習 2016-09-13 社内勉強会 2
  3. 3. Task Spooler http://vicerveza.homeunix.net/~viric/soft/ts/ 2016-09-13 社内勉強会 3
  4. 4. Task Spooler とは? 簡易ジョブ管理システム的なもの Task Spooler ができること ◦ 最大同時実行数を設定してプロセスを並列実行する ◦ プロセスの状態や実行結果を管理する ◦ プロセスの実行条件 (依存関係) を指定する Task Spooler ではできないこと ◦ 複雑なことは概ねできない ◦ ジョブの実行時刻を指定するとか (cron じゃないから) ◦ 異常終了したら通知するとか ◦ トリッキーなジョブを仕掛ければできるかもしれないが・・・ 2016-09-13 社内勉強会 4
  5. 5. 何をしてくれるのか 最大同時実行数を設定してプロセスを並列実行する 2016-09-13 社内勉強会 5 実行待ち 実行中 実行済み
  6. 6. 何をしてくれるのか 最大同時実行数を設定してプロセスを並列実行する 2016-09-13 社内勉強会 6 実行待ち 実行中 実行済み 終わった!
  7. 7. 何をしてくれるのか 最大同時実行数を設定してプロセスを並列実行する 2016-09-13 社内勉強会 7 実行待ち 実行中 実行済み 次!
  8. 8. インストール ソースコードを取得してビルドする 2016-09-13 社内勉強会 8 $ wget http://vicerveza.homeunix.net/~viric/soft/ts/ts- 0.7.6.tar.gz $ tar xf ts-0.7.6.tar.gz $ cd ts-0.7.6 $ make $ make PREFIX=.. install ◦ インストールされるのは以下の 2 ファイル ◦ $PREFIX/bin/ts ◦ $PREFIX/share/man/man1/ts.1 ◦ ちなみに GPL version 2.0
  9. 9. 基本的な使い方 [1/2] 最大同時実行数を設定する 2016-09-13 社内勉強会 9 $ ts -S 4 ◦ 4 プロセスまで同時実行 確認 $ ts ID State Output E-Level Times(r/u/s) Command [run=0/4]
  10. 10. 基本的な使い方 [2/2] ジョブをキューに登録する 2016-09-13 社内勉強会 10 $ for i in $(seq 1 10); do ts sleep $i; done 0 1 2 3 4 5 6 7 8 9 ◦ i = 1 ~ 10 として「$i 秒 sleep する」ジョブを登録した
  11. 11. 実行の様子 キューの状態を確認する 実行直後 2016-09-13 社内勉強会 11 $ ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 0 running /tmp/ts-out.sWEDhd sleep 1 1 running /tmp/ts-out.2FZb9f sleep 2 2 running /tmp/ts-out.g4nEOg sleep 3 3 running /tmp/ts-out.E7hDyg sleep 4 4 queued (file) sleep 5 5 queued (file) sleep 6 6 queued (file) sleep 7 7 queued (file) sleep 8 8 queued (file) sleep 9 9 queued (file) sleep 10
  12. 12. 実行の様子 キューの状態を確認する 1秒後 2016-09-13 社内勉強会 12 $ ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 1 running /tmp/ts-out.2FZb9f sleep 2 2 running /tmp/ts-out.g4nEOg sleep 3 3 running /tmp/ts-out.E7hDyg sleep 4 4 running /tmp/ts-out.iNqnyi sleep 5 5 queued (file) sleep 6 6 queued (file) sleep 7 7 queued (file) sleep 8 8 queued (file) sleep 9 9 queued (file) sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  13. 13. 実行の様子 キューの状態を確認する 2秒後 2016-09-13 社内勉強会 13 $ ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 2 running /tmp/ts-out.g4nEOg sleep 3 3 running /tmp/ts-out.E7hDyg sleep 4 4 running /tmp/ts-out.iNqnyi sleep 5 5 running /tmp/ts-out.zLJ4Ci sleep 6 6 queued (file) sleep 7 7 queued (file) sleep 8 8 queued (file) sleep 9 9 queued (file) sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  14. 14. 実行の様子 キューの状態を確認する 3秒後 2016-09-13 社内勉強会 14 $ ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 3 running /tmp/ts-out.E7hDyg sleep 4 4 running /tmp/ts-out.iNqnyi sleep 5 5 running /tmp/ts-out.zLJ4Ci sleep 6 6 running /tmp/ts-out.kjWcqk sleep 7 7 queued (file) sleep 8 8 queued (file) sleep 9 9 queued (file) sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  15. 15. 実行の様子 キューの状態を確認する ・・・ 2016-09-13 社内勉強会 15 $ ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 4 running /tmp/ts-out.iNqnyi sleep 5 5 running /tmp/ts-out.zLJ4Ci sleep 6 6 running /tmp/ts-out.kjWcqk sleep 7 7 running /tmp/ts-out.i9BXum sleep 8 8 queued (file) sleep 9 9 queued (file) sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  16. 16. 実行の様子 キューの状態を確認する ・・・ 2016-09-13 社内勉強会 16 $ ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 5 running /tmp/ts-out.zLJ4Ci sleep 6 6 running /tmp/ts-out.kjWcqk sleep 7 7 running /tmp/ts-out.i9BXum sleep 8 8 running /tmp/ts-out.AWi5Dq sleep 9 9 queued (file) sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  17. 17. 実行の様子 キューの状態を確認する ・・・ 2016-09-13 社内勉強会 17 $ ts ID State Output E-Level Times(r/u/s) Command [run=4/4] 6 running /tmp/ts-out.kjWcqk sleep 7 7 running /tmp/ts-out.i9BXum sleep 8 8 running /tmp/ts-out.AWi5Dq sleep 9 9 running /tmp/ts-out.kVAX0u sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5 5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  18. 18. 実行の様子 キューの状態を確認する ・・・ 2016-09-13 社内勉強会 18 $ ts ID State Output E-Level Times(r/u/s) Command [run=3/4] 7 running /tmp/ts-out.i9BXum sleep 8 8 running /tmp/ts-out.AWi5Dq sleep 9 9 running /tmp/ts-out.kVAX0u sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5 5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6 6 finished /tmp/ts-out.kjWcqk 0 7.00/0.00/0.00 sleep 7 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  19. 19. 実行の様子 キューの状態を確認する ・・・ 2016-09-13 社内勉強会 19 $ ts ID State Output E-Level Times(r/u/s) Command [run=2/4] 8 running /tmp/ts-out.AWi5Dq sleep 9 9 running /tmp/ts-out.kVAX0u sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5 5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6 6 finished /tmp/ts-out.kjWcqk 0 7.00/0.00/0.00 sleep 7 7 finished /tmp/ts-out.i9BXum 0 8.01/0.00/0.00 sleep 8 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  20. 20. 実行の様子 キューの状態を確認する ・・・ 2016-09-13 社内勉強会 20 $ ts ID State Output E-Level Times(r/u/s) Command [run=1/4] 9 running /tmp/ts-out.kVAX0u sleep 10 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5 5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6 6 finished /tmp/ts-out.kjWcqk 0 7.00/0.00/0.00 sleep 7 7 finished /tmp/ts-out.i9BXum 0 8.01/0.00/0.00 sleep 8 8 finished /tmp/ts-out.AWi5Dq 0 9.00/0.00/0.00 sleep 9 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  21. 21. 実行の様子 キューの状態を確認する 終わり 2016-09-13 社内勉強会 21 $ ts ID State Output E-Level Times(r/u/s) Command [run=0/4] 0 finished /tmp/ts-out.sWEDhd 0 1.01/0.00/0.00 sleep 1 1 finished /tmp/ts-out.2FZb9f 0 2.02/0.00/0.00 sleep 2 2 finished /tmp/ts-out.g4nEOg 0 3.01/0.00/0.00 sleep 3 3 finished /tmp/ts-out.E7hDyg 0 4.00/0.00/0.00 sleep 4 4 finished /tmp/ts-out.iNqnyi 0 5.01/0.00/0.00 sleep 5 5 finished /tmp/ts-out.zLJ4Ci 0 6.01/0.00/0.00 sleep 6 6 finished /tmp/ts-out.kjWcqk 0 7.00/0.00/0.00 sleep 7 7 finished /tmp/ts-out.i9BXum 0 8.01/0.00/0.00 sleep 8 8 finished /tmp/ts-out.AWi5Dq 0 9.00/0.00/0.00 sleep 9 9 finished /tmp/ts-out.kVAX0u 0 10.00/0.00/0.00 sleep 10 ◦ 一秒ごとに ts コマンドを実行しています ◦ 自動更新されるわけではない
  22. 22. ts のオプション [1/3] ジョブの情報を確認する 2016-09-13 社内勉強会 22 オプション 意味 -t [id] 指定されたジョブの出力を tail -f する -c [id] 指定されたジョブの出力を cat する -p [id] 指定されたジョブのプロセス ID を表示する -o [id] 指定されたジョブの出力ファイル名を表示する -i [id] 指定されたジョブの情報を表示する -s [id] 指定されたジョブの状態を表示する
  23. 23. ts -i [id] 指定されたジョブの情報を表示する 2016-09-13 社内勉強会 23 $ ts -i 3 Exit status: died with exit code 0 Command: sleep 4 Slots required: 1 Enqueue time: Mon Sep 12 22:07:56 2016 Start time: Mon Sep 12 22:07:56 2016 End time: Mon Sep 12 22:08:00 2016 Time run: 4.004059s
  24. 24. ts のオプション [2/3] ジョブの実行を制御する 2016-09-13 社内勉強会 24 オプション 意味 -r [id] 指定されたジョブをキューから取り除く -w [id] 指定されたジョブが終わるまで待つ -k [id] 指定されたジョブを kill する (SIGTERM) -u [id] 指定されたジョブをキューの先頭に移動する -U <id>-<id> 指定された二つのジョブの位置を入れ替える
  25. 25. ts のオプション [3/3] ジョブを登録するときのオプション 2016-09-13 社内勉強会 25 オプション 意味 -n ジョブの出力をファイルに保存しない -E ジョブの標準出力と標準エラーを分けて出力する -g ジョブの出力を gzip する -f バックグラウンドで fork しない (未確認) -m ジョブの出力をメールで送信する (未確認) -d 直前のジョブが正常終了したときだけ実行する -D <id> 指定されたジョブが正常終了したときだけ実行する -L <lab> ジョブに名前を付ける -N <num> ジョブが使うスロット数を指定する
  26. 26. ts -D [id] 指定されたジョブが正常終了したときだけ実行する 2016-09-13 社内勉強会 26 $ ts -S 2 $ ts sleep 20 0 $ ts sleep 10 1 $ ts -D 0 sleep 5 2 $ ts sleep 5 3 ◦ ID = 2 のジョブは ID = 0 のジョブが正常終了したら実行が始まる
  27. 27. 実行の様子 実行直後 2016-09-13 社内勉強会 27 $ ts ID State Output E-Level Times(r/u/s) Command [run=2/2] 0 running /tmp/ts-out.flebwV sleep 20 1 running /tmp/ts-out.RGTygW sleep 10 2 queued (file) [0]&& sleep 5 3 queued (file) sleep 5
  28. 28. 実行の様子 10 秒後 2016-09-13 社内勉強会 28 $ ts ID State Output E-Level Times(r/u/s) Command [run=2/2] 0 running /tmp/ts-out.flebwV sleep 20 2 queued (file) [0]&& sleep 5 3 running /tmp/ts-out.4MUpNi sleep 5 1 finished /tmp/ts-out.RGTygW 0 10.01/0.00/0.00 sleep 10 ◦ ID = 1 のジョブが終了する ◦ ID = 2 のジョブは ID = 0 を待っているので実行が開始されない ◦ ID = 3 のジョブの実行が開始される
  29. 29. 実行の様子 15 秒後 2016-09-13 社内勉強会 29 $ ts ID State Output E-Level Times(r/u/s) Command [run=1/2] 0 running /tmp/ts-out.flebwV sleep 20 2 queued (file) [0]&& sleep 5 1 finished /tmp/ts-out.RGTygW 0 10.01/0.00/0.00 sleep 10 3 finished /tmp/ts-out.4MUpNi 0 5.01/0.00/0.00 sleep 5 ◦ ID = 3 のジョブが終了する ◦ ID = 2 のジョブは ID = 0 を待っているので実行が開始されない
  30. 30. 実行の様子 20 秒後 2016-09-13 社内勉強会 30 $ ts ID State Output E-Level Times(r/u/s) Command [run=1/2] 2 running /tmp/ts-out.c9eVnz [0]&& sleep 5 1 finished /tmp/ts-out.RGTygW 0 10.01/0.00/0.00 sleep 10 3 finished /tmp/ts-out.4MUpNi 0 5.01/0.00/0.00 sleep 5 0 finished /tmp/ts-out.flebwV 0 20.01/0.00/0.00 sleep 20 ◦ ID = 0 のジョブが終了する ◦ ID = 2 のジョブの実行が開始される
  31. 31. 実行の様子 25 秒後 2016-09-13 社内勉強会 31 $ ts ID State Output E-Level Times(r/u/s) Command [run=0/2] 1 finished /tmp/ts-out.RGTygW 0 10.01/0.00/0.00 sleep 10 3 finished /tmp/ts-out.4MUpNi 0 5.01/0.00/0.00 sleep 5 0 finished /tmp/ts-out.flebwV 0 20.01/0.00/0.00 sleep 20 2 finished /tmp/ts-out.c9eVnz 0 5.01/0.00/0.00 [0]&& sleep 5 ◦ ID = 2 のジョブが終了する
  32. 32. ところで -D って複数指定できるの? ◦ できない! ◦ 右図のような制御ができない プログラムを修正すればできる ◦ 実際できた ◦ -D の値を int で持っているのを 配列に変更するだけ 2016-09-13 社内勉強会 32 ここができない!
  33. 33. ts の後片付け バックグラウンドの ts サーバプロセスを終了する 2016-09-13 社内勉強会 33 $ ts -K ◦ 必要になったとき (ジョブを登録したとき等) に自動起動している
  34. 34. おわり 詳細は ts -h 説明していないオプションもあるよ 2016-09-13 社内勉強会 34

×