みんなで使うGPUシステム

 GPUシステムが利用されるシーンと特徴

  • 主に深層学習、重力計算、高速フーリエ変換などに使われる (単純かつ大量の行列積和演算が得意)
  • 特に深層学習用途の発展が顕著
  • 深層学習向けにNVIDIA CUDAを利用したフレームワーク(Tensorflow等)が多数リリースされている
  • CUDAや複数のフレームワークをセットにしたDockerやSingularity等のコンテナが多数公開されている
  • 最大の計算パフォーマンスを得るには高価なGPU(NVIDIA Tesla等)が必要な場合がある
  • 高性能なGPUが搭載された計算機を準備するのに高額な費用がかかる
  • 複数の開発者で機械学習プログラムを共同作成する場合、限られた計算機リソースを上手にシェアして使う必要がある

 コンテナとは?

  • オープンソースの仮想化技術のひとつ(Docker, Singularity, LXC等)
  • ハイパーバイザー型とは異なり、高速に起動・実行可能 (Linux KernelはベースOSのものを共用するため)
  • アプリケーションソフトやライブラリを「コンテナ」にパッケージング
  • Linuxディストリビューションに依存せずアプリケーションを実行可能

 コンテナ活用によるメリット

  • コンテナ実行環境さえ整っているシステムであれば、特定のコンテナがどこでも実行できる
    (理研 富岳、産総研 ABCI、名大 不老など)
  • 共用システム内に入っていないソフトウェアやライブラリをコンテナ化し、実行したいプログラムに必要な実行環境を事前に整えておくことができる
  • 他人が作ったコンテナを使うことで自身はロジックを書くことに専念するといったことが可能
    (Docker HubやNGCなどからコンテナダウンロードして利用)
  • 自身が作ったコンテナをコピーして他人に渡すことで同じ環境を使うことが可能
    (プログラムの共同開発や共同研究などに有効)
  • 研究論文の際に実行環境とプログラムをセットで公開して発表することができる
  • コンテナとプログラムをバックアップしておくことで、研究論文作成に使った環境などを長期保存することができる
    (後日反論・異論などを受けて再調査する際にもすぐに環境を準備することができる)

 みんなで使うGPUシステムの悩みどころと解決策はこれ!

  • 誰が今使っているのか、次に誰が使うのかなど調整が煩雑
    【解決策】ジョブスケジューラを使ってシステマティックに管理
  • 1台の計算機に複数GPUが登載されている場合、使用するGPUのデバイスIDをいちいち指定するのが面倒(環境変数 NVIDIA_VISIBLE_DEVICES で指定する)
    【解決策】使用できるGPUデバイスIDはジョブスケジューラが自動で付与し、利用者は常にデバイスIDを0から必要数分だけ利用できるものとして意識すれば良い
  • Dockerを使用する場合、root権限を考慮して運用する必要があり、セキュリティ面の不安が残る
    【解決策】 Singularityコンテナであればユーザ権限で実行されるため安心
  • Dockerを使って、複数GPUおよび複数計算機を使用した並列計算(horovod)実行は手間が煩雑
    【解決策】 Singularityコンテナのhorovodを使うことでmpiexecが使えるので簡単

 みんなで使うGPUシステム 構成例

 GPUデバイス制御のメカニズム