Tesla P100 を一般マザーボード + Ubuntu 20.04 にインストールし運用するメモ

## 背景

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ねんがんの Tesla P100 をてにいたぞ!!!! 🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🎉🥳🥳🥳🥳🥳🥳🥳🥳🥳🥳🥳🥳🥳🥳🥳🙏🙏🙏🙏🙏🙏🙏🙏🙏🙏 <a href="https://t.co/m3pEwx3NX2">pic.twitter.com/m3pEwx3NX2</a></p>&mdash; Syoyo Fujita 🌸 レイトラ ® 🐯 3 周年 🎉 (@syoyo) <a href="https://twitter.com/syoyo/status/1384795811377156108?ref_src=twsrc%5Etfw">April 21, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

テレワークも普及し, おうち Tesla P100/V100 で HPC(倍精度たくさんつかう)とかマイニングとかレイトレとかやりたいですよね.
Tesla P100/V100, HW 的にはだいたい Quadro と同じはずなので, 一般 PC 環境でも動くはず...

とりあえず Tesla P100(倍精度 4.6 TF)を扱ってみます.

## 冷却

そのままではすぐに 85 度とかになってしまいます.
ケースファンとか 1U 用サーバーファンで冷却も限界あります.
 

簡単なファンで冷却は無理なので,
eBay とかで売っているつよつよ active cooling fan(ただしうるさい. 小型ドライヤーの騒音レベル) や, 水冷化を考えましょう.

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ねんがんの Tesla P100 active coooling に成功したぞ!!!! さすがにファンはそれなりにうるさいでした. できれば別室ドとかで運用がいいですね <a href="https://t.co/i4BF7eppnM">pic.twitter.com/i4BF7eppnM</a></p>&mdash; Syoyo Fujita 🌸 レイトラ ® 🐯 3 周年 🎉 (@syoyo) <a href="https://twitter.com/syoyo/status/1387298084024057856?ref_src=twsrc%5Etfw">April 28, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

水冷ブロックはもう売っていです.

現在は, ライザーでつなぐようにし, ケースをはずして(ヒートシンクがむき出しになるようにして), Amazon あたりで買える 2000 円くらいのオーディオ用ヒートシンクを追加で載せて冷やして運用になりました.
(サーマルパッドを挟んでいます)

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ファン 2 つにしました. 外気温 33 度で GPU 温度71 度. 勝てそうです 💪 <a href="https://t.co/PU3wo7RW5s">pic.twitter.com/PU3wo7RW5s</a></p>&mdash; Syoyo Fujita 🌸 レイトラ ® 🐯 3 周年 🎉 (@syoyo) <a href="https://twitter.com/syoyo/status/1400736356704219136?ref_src=twsrc%5Etfw">June 4, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

横に障害物がなければ PCI-ex スロット直挿しも行けるでしょう.

## HW

https://forums.developer.nvidia.com/t/ph402-dual-p100-64g-rminitadapter-failed-memory-mapping-issue/173877

X570 では Above 4G decode on, CSM off, UEFI ブートでいけるっぽい

少なくとも UEFI は必須のようです.

### 動作確認

メモリは 48 GB 以上(GPU のメモリサイズ x 2 以上)がよいでしょう.

マザーボードは少し古めの環境がよさそうです.

* [x] X570(asus) + Windows 10(Above 4G decode on)
* [x] B350(asrock) + Ubuntu 20.4(Above 4G decode on, IOMMU off, CSM disabled, UEFI boot, SR-IOV off)
* [x] X570(asus) + Ubuntu 20.04(Above 4G decode on, IOMMU off, CSM disabled, UEFI boot, SR-IOV off)

Ryzen 環境だと BIOS の設定するために dGPU が入ります.
あとは nvidia-settings あたり用に画面出したりで(x11vnc で画面飛ばす場合も) GTX 1030 とかその当たりの GPU を刺しておくとよいです.

#### NG

* [ ] Z590 + Core i7-11700
  * 新しすぎた...? IOMMU や SR-IOV あたりいじれば動くかも 


Z590 では

```
[    9.474727] NVRM: GPU 0000:02:00.0: RmInitAdapter failed! (0x26:0xffff:1290)
[    9.474746] NVRM: GPU 0000:02:00.0: rm_init_adapter failed, device minor number 1
```

が出ました.

## ドライバ

GeForce 系と共通
(EULA が違うくらい?)

Ubuntu ですと apt とか CUDA SDK で入るドライバでいけます.


## 冷却性能

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Ryzen マザー民生品環境で稼働する Tesla P100, 良き 😚　室温 27 度で GPU 温度 65 度でした <a href="https://t.co/XSLm6H3iNe">pic.twitter.com/XSLm6H3iNe</a></p>&mdash; Syoyo Fujita 🌸 レイトラ ® 🐯 3 周年 🎉 (@syoyo) <a href="https://twitter.com/syoyo/status/1387357181691842564?ref_src=twsrc%5Etfw">April 28, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 


eBay で買える active fan で, ETH miner 走らせてみました.

* 130W に powerlimit(125W が下限)
* 室温 27 度で GPU 温度 65 度

~70 度くらいですと thermal limit は発生しないようです.
mixbench も 65 度ですと倍精度 4 TFlops 出る(125 W powerlimit)のを確認しました.
(70 度後半 ~ 80 度台になると thermal limit 発生して 300~500 GFlops くらいに落ちてしまう)

### clock の設定

Tesla P100 では, メモリクロックは 715(or 715 に近い値)しかサポートされていません.

SM クロックはいくらか変えることができます.

``` 
$ nvidia-smi -q -d SUPPORTED_CLOCKS

Attached GPUs                             : 2
GPU 00000000:03:00.0
    Supported Clocks
        Memory                            : 715 MHz
            Graphics                      : 1328 MHz
            Graphics                      : 1316 MHz
            Graphics                      : 1303 MHz
            Graphics                      : 1290 MHz
            Graphics                      : 1278 MHz
            Graphics                      : 1265 MHz
            Graphics                      : 1252 MHz
            Graphics                      : 1240 MHz
            Graphics                      : 1227 MHz
            Graphics                      : 1215 MHz
            Graphics                      : 1202 MHz
            Graphics                      : 1189 MHz
            Graphics                      : 1177 MHz
            Graphics                      : 1164 MHz
            Graphics                      : 1151 MHz
            Graphics                      : 1139 MHz
            Graphics                      : 1126 MHz
            Graphics                      : 1113 MHz
            Graphics                      : 1101 MHz
            Graphics                      : 1088 MHz
            Graphics                      : 1075 MHz
            Graphics                      : 1063 MHz
            Graphics                      : 1050 MHz
            Graphics                      : 1037 MHz
            Graphics                      : 1025 MHz
            Graphics                      : 1012 MHz
            Graphics                      : 999 MHz
            Graphics                      : 987 MHz
            Graphics                      : 974 MHz
            Graphics                      : 961 MHz
            Graphics                      : 949 MHz
            Graphics                      : 936 MHz
            Graphics                      : 923 MHz
            Graphics                      : 911 MHz
            Graphics                      : 898 MHz
            Graphics                      : 885 MHz
            Graphics                      : 873 MHz
            Graphics                      : 860 MHz
            Graphics                      : 847 MHz
            Graphics                      : 835 MHz
            Graphics                      : 822 MHz
            Graphics                      : 810 MHz
            Graphics                      : 797 MHz
            Graphics                      : 784 MHz
            Graphics                      : 772 MHz
            Graphics                      : 759 MHz
            Graphics                      : 746 MHz
            Graphics                      : 734 MHz
            Graphics                      : 721 MHz
            Graphics                      : 708 MHz
            Graphics                      : 696 MHz
            Graphics                      : 683 MHz
            Graphics                      : 670 MHz
            Graphics                      : 658 MHz
            Graphics                      : 645 MHz
            Graphics                      : 632 MHz
            Graphics                      : 620 MHz
            Graphics                      : 607 MHz
            Graphics                      : 594 MHz
            Graphics                      : 582 MHz
            Graphics                      : 569 MHz
            Graphics                      : 556 MHz
            Graphics                      : 544 MHz
```

```
$ nvidia-smi -i 0 -ac 715,1101
```

アクティブクーリングなどで, 長時間安定して計算したいので多少性能落ちてもいいので温度下げたい場合は SM クロックを落として運用してみましょう.

参考までに 1101 MHz に落としてだと mixbench fp64 3.8 TF でした.

## ETH マイニング性能

35 MH/s @ 125W でした(2021 春時点). あんまり電力効率は良くないです(マイニングで元を取るなら V100, A30/A100 が良いでしょう).

最初の DAG の頃ですと 50~60 MH/s 出ていました.

https://www.reddit.com/r/EtherMining/comments/kurd9f/help_50_eth_reward_4x_tesla_16gb_p100_superserver/

P100 だと, メモリアクセスかキャッシュ周りで DAG サイズ増えるとだんだんと性能落ちるようです.

### 他のマイニング性能

* ERG(Autolykos v2) : 130 MH/s @ 95W
* RVN(Kawpow) : 16 M @ 130W
* CFX(Octopus) : 10 M @ 130W

## 活用

Tesla は GeForce EULA にある制限が無いので, データセンターで非ブロックチェーン処理しても OK ですし(e.g. マイニングしつつレイトレや機械学習), 使っていないときに(物理)レンタルするのもできます!(GeForce は所有権保有者のみにしかドライバインストールできない)

中古品だと製品保証つかないけどね.
(故障したら有償で修理してくれるところとかあるかしらん?)

### Vulkan ray tracing は?

KHR ray tracing は対応していませんでした.
NV ray tracing は使えるっぽい.

## TODO

* [ ] 水冷化を考える(おうち CNC フライス加工したい)
* [ ] Tesla K80 も試す(eBay で 3~4 万円で買えて倍精度 3 TF(1.5 x 2)とコスパ高い) 
* [ ] 謎の Tesla P100 dual(32GB mem each) である PK402 SKU 200 が eBay で 30 万円くらいで売られているのでこれも試す: https://codechina.csdn.net/paddlepaddle/Paddle/-/issues/26227