HPCメモ

HPC(High Performance Computing)に関連したりしなかったりすることのメモ書き

【2021年版】お手軽にGPGPUを使うには?

私がGPGPUを触わってたのはたしか2009年の始め頃あたりで、OpenCLどころかCUDA Fortranも無いような時代に

「ちょっとこれGPUで性能評価してみてー」

Fortranのin-houseコードを渡されたのが最後の記憶です。*1

そんな私ですが、先日GDEPさんのtwitterのキャンペーンでお肉をいただいてしまいました。

干支がひとまわりもする間、外から眺めてるだけだったGPGPUですが、さすがにお肉をもらっておきながら使いもしないというのは人の道に反する気がするので、ちょっと触ってみることにします。

環境構築

さて、12年前なら秋葉原に行ってGeForceを買ってくるところですが、今やいろんな意味で不可能になりました。 代わりにというと変な感じがしますがが、各種クラウドサービスにGPU搭載インスタンスが用意されているので、こちらを使うことにしましょう。

ざっくりとドキュメントを見た感じでは、AWS, GCP, Azureといずれも(世代が多少違うけど)GPUインスタンスが用意されているようです。

AWS https://aws.amazon.com/jp/ec2/instance-types/

  • P4 Cascade Lake + A100
  • P3 Broadwell + V100
  • P2 Broadwell + K80
  • G4 Cascade Lake + T4
  • G3 Broadwell + M60

GCP https://cloud.google.com/compute/docs/gpus?hl=ja

N1インスタンスに対して、オプションとして以下のGPUが追加できるようです。 - T4 - V100 - P100 - P4 - K80

Azure https://azure.microsoft.com/ja-jp/pricing/details/virtual-machines/series/ GPU搭載インスタンスとして、次の3つが提供されています。

  • NC V100
  • NDs P40またはV100
  • NV M60

ちなみに、アカウントを持ってるなら、FOCUSスパコンという手もあります。 この中だと、Fシステムのうち2ノードにP100が載っています。

www.j-focus.or.jp

だいたいどこでも使えるようなので、価格やお財布、アカウントの有無によって決めれば良いと思いますが、 今回はこれまでに挙げたどれでもなくgoogle Colaboratory (以下colab)を使うことにします。

colab.research.google.com

colabはgoogleのアカウントさえあれば使える Jupyter notebook As A Service として機械学習界隈では有名な存在ですが、

  • 無課金ユーザでも連続12時間まではGPU(K80)が使える
  • google Drive連携でファイルのuploadがちょー楽

というメリットがあるので、今回の用途なら無料で遊べるでしょう。

ただし、M1 macを使っていてGsuiteを契約していると、あいかわらずGoogle drive file streamが正常に動かないのでファイルのupload/downloadは手作業でやる必要がありますorz

colabのセットアップ

colabに接続すると、"Colaboratoryへようこそ"というドキュメントが表示されると思いますが、"ファイル"->"ノートブックを新規作成"とすると別のタブで新しいノードが開きます。

f:id:n_so5:20210113160146p:plain

タイトルを適当に変えてから、"ランタイム"->"ランタイムのタイプを変更"と選択し、表示されたダイアログ内の"ハードウェアアクセラレータ"と書かれたドロップダウンリストを"None"から"GPU"に変えます。

f:id:n_so5:20210113160018p:plain

ノートの上側にあるメニューから"接続"->"ホスト型ランタイムに接続"と選んでしばらく待つとGPUインスタンスが使える状態になっています。

f:id:n_so5:20210113160358p:plain

ランタイムに接続した後で、左のディレクトリっぽいアイコンをクリックしGoogleドライブのアイコンをクリックすると、"/content/drive"以下に現在のアカウントのgoogleドライブが接続されるので、必要なファイルなどはここを経由してやりとりすると楽です。(うっかり秘蔵のファイルが見えたりすると困るので、ここはスクショ無しで・・・)

jupyter notebookなので、何かコマンドを実行する時は、シェルエスケープ(!)を使う必要がありますが、 こんな感じでnvccも使えます。

f:id:n_so5:20210113161121p:plain

通常のコンパイラとしては、clangとGCCが入っているのでOpenCLも使えそうです。

f:id:n_so5:20210113161457p:plain

ついでに、ちらっと見えてますが、OSはubuntuの18.04のようなのでなにか不足があればaptで入れれます。

さて、ここからが本番なんですが、GPUを使ってないとこんなことを言われるので、この辺で一旦中断します。

f:id:n_so5:20210113161630p:plain

次回に続く(と良いなぁ・・・)

*1:確か、CUDA化する前にCで書き直したらなんかめっちゃ早くなって困った記憶が・・・