理乃美

ソフトとハードと論理の覚え書き

またもや熱に敗れる

2021-06-12 18:01:00 | 自作パソコン

しばらく前にヤフオクでTESLA K80を入手していたが、やっと試すことができた。で、結局は熱の問題で出直しである。

TESLA K80は、ヤフオクで5万円程度でいくつも出品されている。消費電力が300Wの大飯食らいとパッシブ冷却という扱いにくさでニーズが無いのだろう。

K80は、Keplerアーキテクチャ。現在のAmpere からさかのぼって、Volta, Pascal、Maxwell、Kepler というように4世代前の代物。それをなぜ買ったのかというと、倍精度番長だから。カタログスペックは、倍精度で1.87Tflops(Boost時 2.91TFlops)。

GPGPUの昔の用途は科学技術計算だったが、その後、人工知能にシフトしたことで倍精度演算がなおざりにされた。なので、倍精度の計算に限れば KeplerはそのあとのMaxwell, Pascalより早い。ディープラーニングをやらせたら今どきのグラボにもぼろ負けだろうけどね。

ボードの電源はグラボと違ってCPU補助電源. どうしようかと思ったら、ainex から EPS 12V用電源変換ケーブル (ペリフェラルx2 <-> EPS 12V 8ピン x1)[型番 PX-009A) というおあつらえのコードがあったのでポチッた。これがぴったり。

冷却が問題。eBayにはファンを取り付けるアダプターが出品されていたりするけど、よく読むとフルパワー時には冷却が足りないよと書いてあるものもあってなんだかなぁ。ということで、二つ並べた6cmファンから風を送り込むアダプターをえっちらおっちらと自作。

ということで、やっとTESLA K80をインストール。サンプルソフトを動かすのにちょっと手間取ったけど。

で、nbodyを動かして負荷をかけながら、GPU-Z で GPUの温度を観察してみるとやばい状態。外気温が26.5℃くらいだが GPUは92℃まで上がってさらにじりじりと上がりそうな雰囲気。こりゃだめだ。

調べてみるとK80にろくに風が通っていない。K80の冷却フィンのトンネルの空気抵抗が大きくて、ファンは回ってもファンの外回りのすきまから吹き戻ってしまっているようだ。

ファンを変えるにしても、今のケースでは、もう寸法的に余裕がない。別の手段としては、K80のカバーを外し、むき出しになった放熱器へ横からファンで風をあてて冷やす手が良く使われているようだ。グラボの3連ファン部分だけを隣に置くかんじ。だが、そうなると今度もまたPCケースの排熱が問題になる。CPUクーラーからの180Wすら籠ってしまうのに、300Wとなったらどうにもならない。PCケースあらためオーブントースターとなってしまう。

ということで、今回も熱に敗退。あたらしいPCケースが届いたら、改めて作戦を立てることにしよう。

後日談

横から風をあてて冷却をこころみたのがこちら。Tesla K80の熱は手ごわい - 理乃美

強力なファンに変えて、冷却はできたけど... というのがこちら。Tesla K80 の発熱に勝った..のか? - 理乃美

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Tesla K80を動かしてみる

2021-06-12 10:47:00 | ソフトウェア

NVIDIAの TESLA K80で手始めにサンプルプログラムを動かすところまでの記録。ハマった原因は二つ。

1.  TESLA K80は、Kepler という今では4世代前の古いアーキテクチャ

2.  CPUの内蔵グラフィクスを利用

ハードウェアは CPUが 11700K (第11世代 Core i7)で、マザーボードは ASUS TUF GAMING Z590 PLUS、グラボなしの構成。

ソフトウェアは、Windows 10 . ドライバーは、NVIDIAのサイトから入手.  (462.31-data-center-tesla-desktop-win10-64bit-international.exe).  開発環境は、Microsoft Visual Studio Community 2019 にCUDA Toolkit 11.3.1 (cuda_11.3.1_465.89_win10.exe) をインストール。

#ちなみに、VS2019には、intel oneAPI ツールキットも先にインストールしていたが問題ないようだ。

Step 0. インストール

インストールに特別なことはなし。GPUカードを刺して立ち上げ、ドライバーをインストール。Visua Studioはインストール済みのところへ、CUDA Toolkit をインストール。

Step 1. hello.cu の実行

まず、これが正しく動作しなくて悩む。

こちら (https://www.kkaneko.jp/tools/win/cuda10.html#S2) に従って hello.cuを作成しコンパイル。

で、実行結果した結果はこうなるはずが...

C:\test>a.exe
Max error: 0.000000

下記のようになってしまった。

C:\test>a.exe
Max error: 2.000000

いろいろデバッグしてみた結果、GPU側のコードが動いていないようなので、下記のようにソースを書き換えてみると... エラーコード 209が起きていると判明。

------------

  // Perform SAXPY on 1M elements
  saxpy<<<(N+255)/256, 256>>>(N, 2.0f, d_x, d_y);

err = cudaGetLastError();
printf("LastError %d\n",err);

-------------

今回のケースだと、古いアーキテクチャのKeplerで動くようにはできてませんというエラー。nvcc のパラメータでターゲットを指定できるのではないかと調べると、やはりありました。

下記のように -arch sm_37 と指定すれば、「古いアーキテクチャだからそのうちサポートしなくなるよ」という警告が出るもののちゃんとコンパイルできる。


C:\test>nvcc -arch sm_37 hello.cu
nvcc warning : The 'compute_35', 'compute_37', 'compute_50', 'sm_35', 'sm_37' and 'sm_50' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).
hello.cu

これでOK. ちゃんと、a.exe は期待通りの動作をするようになった。

Step 2.  CUDA Toolkit のサンプルプログラム nbodyを動かす。

CUDA Toolkitにはサンプルプログラム一式もついてくる。そのうちnbodyのありかは下記.

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.3\5_Simulations\nbody

ここにある nbody_vs2019.sln を Visual Studio 2019で開き、ソリューションのビルドをすれば完了。

だが、Visual Studioから実行をかけると下記のように即終了してしまう。本来はウインドウが開いて質点が動き回わる様子が表示されるはずなのだが。

...(省略)...

CUDA error at C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.3\5_Simulations\nbody\bodysystemcuda_impl.h:188 code=304(cudaErrorOperatingSystem) "cudaGraphicsGLRegisterBuffer(&m_pGRes[i], m_pbo[i], cudaGraphicsMapFlagsNone)"

C:\ProgramData\NVIDIA Corporation\CUDA Samples\v11.3\bin\win64\Debug\nbody.exe (プロセス 13336) は、コード 1 で終了しま した。
デバッグが停止したときに自動的にコンソールを閉じるには、[ツール] -> [オプション] -> [デバッグ] -> [デバッグの停止時に自 動的にコンソールを閉じる] を有効にします。
このウィンドウを閉じるには、任意のキーを押してください...

 

この原因は、グラフィクス出力が必要だけど計算をしているTESLA K80にディスプレイ出力が無い、ということらしい。グラボでCUDAの場合はそのグラボにディスプレイを接続して解決だけど、K80にはもともとディスプレイ出力機能は無いし...  で、はたと思いついた。グラフィクスはCPU側で行っているのだから nbodyのパラメータにある -hostmem を指定してデータをホスト側メモリにストアさせればいけるんでないかい。試してみるとビンゴ。無事に画面が開いた。DOS窓から実行形式を起動する場合のパラメータの指定方法は書くまでもないが、Visual Studioから起動する場合は、デバッグプロパティで指定する。

プルダウンメニューの デバッグ > nbodyのデバッグ プロパティ  でプロパティページを開き、左のペーンにあるツリーで構成プロパティ>デバッグ を選択。コマンド引数 のところの値が空だけど、そこに-hostmem と書いて OK をクリックする。 ReleaseとDebugの二つの構成のそれぞれに行っておく。

なお、Debug構成でビルドしたものとRelease構成でビルドしたものでは実行速度が格段に違う。Release だと光点がびゅうびゅん飛び回る.  K80の半分しか使っていないけど約 1TFLOPS.

以上はソフトの話だが、Tesla K80 の冷却で試行錯誤した話はこちら。

またもや熱に敗れる - 理乃美

横から風をあてて冷却をこころみたのがこちら。Tesla K80の熱は手ごわい - 理乃美

強力なファンに変えて、冷却はできたけど... というのがこちら。Tesla K80 の発熱に勝った..のか? - 理乃美

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする