序
こんにちは。橋本です。
超並列計算が必要な科学計算用途において、計算用GPUの存在は不可欠です。
中でもプログラミングツールキットの情報が豊富なNvidia製GPUは汎用性が高く、従来より高速な計算が可能となっております。
しかしながら、倍精度を要求する計算において、一般的に流通しているNvidia GTX,RTXシリーズは厳しい制限が掛けられており、科学計算には不向きです。(単精度においてはこの限りではありません。)
Nvidia製GPUの中で倍精度に制限が掛けられておらず、現在のGTX,RTXシリーズと比較しても遜色ない性能のものは以下の何れかしかありません。
このうち、K20,40,80あたりが中古で現実的な値段で手に入りやすくなっております。
そこで、K80を研究室で購入頂いたわけなのですが、動作までにちょっとした苦戦がありましたのでナレッジしておきます。
なぜか、記述が見つからなかったので。
#破
K80のインストール方法を述べます。
##先に結論
K80が使用できるチップセットは「C610」「X99」「Z77」以降のアルファベットシリーズです。
「B150」とか「X79」とかは使えません!
また、対応しているからと言って必ず使えるとはかぎりません。(大抵は使えると思いますが。)
事前にマザーボードの設定項目が「Above 4GB MMIO BIOS Assignment (4GB を超える MMIO BIOS 割り当て)」をサポートしているかを確認してください。
この項目の無いマザーボードは動きません。
##組み立て
K80はパッシブ冷却ですので、ファンを内蔵しておりません。そこで以下のシロッコファンを接着剤でつけることで解決しております。
また、電源はペリフェラルから12Vを供給しております。おそらくマザーボードのファン端子から電気を得るとMOSFETがアチアチになると思います。
##設定
マザーボードUEFI BIOSの項目「Above 4GB MMIO BIOS Assignment (4GB を超える MMIO BIOS 割り当て)」を探し、有効にしてください。
有効にしないままインストールを進めると、OSをから認識はされますが、ドライバーが当たらない奇妙な現象に遭遇します。
##OSのインストール
Ubuntu 20.04LTSを導入します。
インストールする際に「サードパーティ製のドライバをインストールする」項目にチェックを入れないでください。ログインループに陥ります。やらかしてしまった場合は素直にOSをインストールし直しましょう。
##ドライバのインストール
任意のCuda Toolkit ヴァージョンをアーカイブから選択してインストールします。
Cuda Toolkit Archives「https://developer.nvidia.com/cuda-toolkit-archive 」
あとは、インストール手順に従ってインストールを行います。
再起動の後、「nvidia-smi」コマンドで確認してください。
#急
「lspci -v」コマンドでPCIeからは認識しているのにCUDAドライバーが当たらない事象に遭遇しました。原因は「Above 4GB MMIO BIOS Assignment (4GB を超える MMIO BIOS 割り当て)」の有無です。
そもそも、PCIeは「メモリ空間」「IO空間」「コンフィギュレーション空間」の3つのアドレス空間を持ちます。
うち、メモリ空間において1バスでメインメモリ空間に転送(仮想化)できるメモリ量は256MB。x16バスで4GB(32ビットアドレス長)
k80は1つのバスに24GBのメモリがあり、x16バスで全てをマッピングできません。
(Tesla k40やTesla C2070ではこの現象が現れなかったため、24GBというメモリ量がこれを要請している可能性がある。)
すなわち、「IO空間」「コンフィギュレーション空間」が生きているからPCIeから認識されるが、「メモリ空間」を有効にするドライバを入れようとすると弾かれてしまうと考えられます。
解決策は「Above 4GB MMIO BIOS Assignment (4GB を超える MMIO BIOS 割り当て)」を有効にすることです。有効にすれば、1バス256MBの制限がなくなります。
この機能は「C610」「X99」「Z77」以降のアルファベットシリーズを持つチップセットに搭載されている事が知られています。
#参考
nvidia公式では「いや~。k80はワークステーション向けだから。そんな一般のマザボで動かないとか知らんよ。ワークステーション向けのC610とか買ったら?」的な事が書いてありました。
https://community.intel.com/t5/Intel-NUCs/Latest-BIOS-for-NUC6i7KYK-and-quot-Above-4G-decoding-quot/m-p/690484#M68958
Xeon Phiのインストールのときダメだった的なコミュニティなのですが、ここで「K80とか大きなメモリ空間を使うものはAbove 4GB MMIO BIOS Assignmentを有効にすればいいよ!」と猛者がつぶやいており、ここから答えをえました。
https://forums.developer.nvidia.com/t/plugging-tesla-k80-results-in-pci-resource-allocation-error/37007/11
ASUSさんは言ってましたね。「Teslaとか使うときには4GBデコードをオンにしてね!」と。
https://www.asus.com/jp/support/FAQ/1017190/