RSMAP未対応のGridengineでGPUの管理をさせる方法
GPU搭載サーバー (Ubuntu20.04) にGridengineを導入した際に、GPUの管理ができないかと調べていたところRSMAPに対応していないためかなり苦戦しました。
そこで本記事ではGridengineでGPUを管理できるようにした設定方法について記載していきます。
目次
前提
本記事ではクラスターサーバーではなくサーバー1台でマスターホストと実行ホストを担当する構成を前提とします。
Gridengineのインストール方法
Ubuntu20.04へのGridengineのインストール方法についてはK-labさんのこちらの記事「Gridengine の Ubuntu 18.04LTS へのインストール方法」で丁寧に解説されてますので、参考にしてインストール作業をしてください。
慣れないうちはqconfコマンドが何をしてるかわからず不安になるかと思いますが、ヘルプを開いてそれぞれのオプションの意味を調べながら実行していくと命名規則の雰囲気もわかり慣れていくと思います。
GridengineのGPU管理設定
GPUの管理方法に関してはこちらのGitHubレポジトリ「kyamagu/sge-gpuprolog」を参考にさせていただきました。
実際にどのようにGPUを管理しているのかというと「Jobを投入すると空いているGPUを探してロックファイルを作成し、Jobが終了したらそのロックファイルを削除する」ということをしています。
Gridengineにはジョブの実行前後に実行したい処理がある場合にプロローグ・エピローグスクリプトを設定することができるので、この機能を利用して上記の設定をしていきます。
これ以降は基本的にGitHubレポジトリのREADMEを参考に実際どうやったかを解説していきます。
GPUをconsumable complexとして設定
qconf -mc |
と実行し、以下の行を追加してください。
1 | #name shortcut type relop requestable consumable default urgency |
その後、実行ホストにgpuのcomplexを追加します。
qconf -aattr exechost complex_values gpu=1 node01 |
ここで、gpu=1
のところはサーバーに積んでいるGPUの数、node01
は自身で設定してる実行ノードの名前に置き換えてください。
プロローグ・エピローグスクリプトの設定
まずGitHubレポジトリをクローンしてサーバーのユーザー全員が利用可能な場所(例:/usr/local
, /opt
)に配置します。
今回は/opt
以下に配置することにした場合を例に進めます。
git clone git@github.com:kyamagu/sge-gpuprolog.git |
フォルダの中に prolog.sh
と epilog.sh
というファイルがありますが、それのシバンを /bin/bash
に変更してください。
次にGPU用のキューを gpu.q
という名前で新しく作成します。
まずは以下のコマンドを実行してください。
qconf -aq gpu.q |
そしてprolog, epilogとshell_start_modeの行を以下のように修正してください。
1 | shell_start_mode unix_behavior |
ファイルのパスの前に sgeadmin とありますが、これは各スクリプトをどのユーザーとして実行するかを指定してることになります。
なので上記のように記載するとsgeadminユーザーとして各スクリプトを実行してくださいと指定していることになります。
この指定を忘れるとエラーが出ますので注意してください。
また、slotsはGPUの枚数に合わせて修正してください。
デフォルトでは1となっています。
最後に作成したGPU用のキューをホストグループに追加します。
インストール方法の記事を参考にしていた場合は @allhosts という名前にしているはずですので、以下のように実行します。
qconf -aattr queue hostlist @allhosts gpu.q |
以上で設定は完了です。
ジョブスクリプトの例
gpuというリソース名で設定したので、以下のように指定すればGPUを指定した分利用できます。
1 |
|
今回の実装ですと $CUDA_VISIBLE_DEVICES
にすでに値が入った状態でジョブが流れますので、別途値を代入する必要はありません。
おわりに
Gridengineは便利なのでよく使っていたのですが、aptで入るものはRSMAPに対応しておらずGPUの管理がうまくできずもやもやしながら利用していました。
Gridengineは調べても情報があまりなく、今回の方法にたどり着くのとそれを理解するのにかなり時間を浪費しました。
この記事が他の方の時間の節約になれば嬉しいです。
それでは。
参照
RSMAP未対応のGridengineでGPUの管理をさせる方法
https://sishida21.github.io/2022/12/17/manage-gpu-in-sge-on-ubuntu2004/