イーサリアムを GPU マイニングしてみる(2017/04/21 時点)

<img width="916" alt="Screen Shot 2017-04-22 at 1.35.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/36275/3522ecbb-c54f-9c70-9200-7d217a79dfb9.png">

漢なら GPU でレイトレーシングしたり機械学習ですね!

しかし GPU クラスタを組んでも, タスクがあまりなくて遊待(idle)が多かったり, 夜使わないとかだともったいないですね.

そこで最近話題の仮想通貨の GPU 採掘(Mining)で GPU 構築費用の足しにしてみることを考えたり, GPU をエージングし稼働耐性の高い GPU 個体を抽出するなどしたり, GPU 性能のベンチマークに使ったりとかしたいですね!

ビットコインは ASIC 使うのが強いので, ASIC 耐性が考えられていてまだまだ GPU を使うことに意義のあるイーサリアムを採掘してみることにしましょう.

2017/04/21 時点ではイーサリアムが第二の取引ボリュームを持っています.
https://coinmarketcap.com/

Radeon RX480と最近のイーサリアム事情
http://tatujin-dejimono.com/virtual_currency/eth-radeon-rx480/

(以前は CureCoin という, Folding@Home 用に計算資源を提供するとコインがもらえるという, 寄付的なものがあったようですが, いつのまにか終了していました...)

## 環境構築

2017/04/21 時点でもっともコスパのよいのは RX 470(memory 4GB 版) です(1.5 万円くらい?). また, GPU メモリは 4GB over あるのが必須です.

OpenCL コードをみるとほとんど整数演算なので(ハッシュ計算なので当たり前?), AMD 系が強いです.

今回は動作環境確認には, すでに手持ちである Fury X を使いました.

結論からいうと, 2017/04/21 時点でまともに動く採掘プログラムは,

https://eth.nanopool.org/help

で示されている Claymore です.

### Windows 10 64bit

ドライバは Radeon Crimson 17.2 あたりです.

#### MinerGate

まずは Minergate

https://minergate.com/

という, GUI つきでおてがる採掘できるのを試してみましたが, v6.6 は Windows リブートしたり GPU プログラム実行に失敗しました.
v6.5 ではかろうじて ETC(Ethereum Classic)は動きましたが, それでも不安定です.

まともにメンテもされていない感もあるので, とりあえず試してみるにはよいかもしれませんが, 実運用をするときには使わないほうがよいでしょう.

### Ubuntu 16.04

OS (もしくは動かしている PC)の問題もあるかと思い, 別の Ubuntu 16.04 マシンで試すことにしました.

ドライバは amdgpu-pro 17.10 です.

Ubuntu 16.04 で AMDGPU Pro ドライバを使う(17.10 推奨)
http://qiita.com/syoyo/items/7cb6e73cc7770e1f89da

#### MinerGate

Linux でも MinerGate は動きませんでした.

#### Genoil Ethminer

次に, Genoil Ethminer(cpp-ethminer) を試しました.

本家 ethminer は CPU 実装を pollish していて, GPU(OpenCL, CUDA)は Genoil branch で行われています.

が, これもうごきませんでした.

https://github.com/Genoil/cpp-ethereum

https://github.com/Genoil/cpp-ethereum/issues/141

にあるように OPENCL 99% で止まって画面が刺さって process が defunct になり死にます
(一応 ssh リモートログインはできる)

`110` branch にすると動くっぽいらしいですが, 面倒なので諦めました.

### Claymore Dual Miner

https://eth.nanopool.org/help

で紹介されている Claymore Dual Miner を試しました.

しかし, 最新ドライバですと, 配布物にあるスクリプト通りに動かすと死にます. 調べてみたところ,

**GPU_FORCE_64BIT_PTR 0 にすると死にます**
**GPU_FORCE_64BIT_PTR 0 にすると死にます**

他の LuxMark などの OpenCL プログラムも死んでしまいました. **GPU_FORCE_64BIT_PTR 0** は(少なくとも)最新ドライバでは使ってはいけないようです.

とりあえずなにも環境変数を定義しないで実行したところ, **動きました**.

ただ, ときどき GPU メモリの fragmentation が起こるのか, 実行失敗したりします(その後自動で再起動されますが, エラーになったまま).

**GPU_MAX_ALLOC_PERCENT 100** をつけると改善しました.

したがって, **GPU_MAX_ALLOC_PERCENT 100** だけ設定して動かすのがよさそうです.

Windows 10 環境でも, Claymore なら動くかも.
(追記 2017/08/16: Fuji, Polaris で最新ドライバ(17.7.2)で Claymore v9.8 それなりに安定動作確認しました. )

## 採掘効率

Fury X 自体の消費電力が 200W くらい(+ CPU などで 50~100W). Claymore Dual Miner を使ったところハッシュレートが 29 MH/s でした. 
(追記 2017/08/16: -50% に powertune で 26.5 MH/s くらいでした)

2017/04/21 時点でのイーサリアムの価格は 1 ETH = 50 USD = 5500 円くらいです.

https://minergate.com/calculator/ethereum

2017/04/21 時点では, 29 MH/s で 1 hour で 0.00176 ETH, 1 日で 0.04233 ETH.

0.00176 * 720 Hour * 50 USD * 109(USD/JPY rate) = 6920 円

電気代が 1kW/h 24 円とすると,

0.2 kW(GPU のみ) * 24 yen * 720 Hour = 3456 円

だいたい半分くらいが電気代で持って行かれますね... 

RX 470(4G mem) だと 120W, ハッシュレート 24 MH/s くらいのようですので, RX 470 のように電力効率とコスパのよい GPU を使うか, 深夜だけ動かす(1kW/h 12 円程度の夜特プランがあったような.)か, 採掘したあともしばらく ETH のまま保有し ETH の値上がりを待つか, 太陽光や水力発電で電気代コストを減らすか, でしょうか. 

## NVIDIA 系は...?

Claymore ethminer は, 最近だと NVIDIA 系でもそこそろ強いようです.

v8.0 を GTX 1070 で試したところ, 2017/04/30 時点で 25 MH/s 出ました.
power limit 90W くらいまではハッシュレート落ちず, 下限の 76W にすると 18 MH/s くらいになりました.
(追記 2017/08/16: GPU mem clock 下げ, core clock 上げつつ powetune で 60 ~
 80% くらいにすると, 概ね 3.6 ~ 4.0 Sol/W くらいが Pascal 世代 GPU の最大効率でした)

価格は 4.5 万円くらいしますが, 電力効率は RX 470 と同じくらい良さげな気がしますね.
 
## 問題点

イーサリアムは今年(2017 年)には, Proof of Work から Proof of Stake に移行するようなので, 1 年後どうなるか不明です. 

2017 年 7 月には ice age の到来が予定されています.
2017 年 7 月 14 日時点では, average block time 20 secs, diffuculty 1,200 TH と, どんどん採掘しずらくなっています.

http://www.tomshardware.com/news/ethereum-price-drop-difficulty-increase,34985.html

必要に応じて ethash アルゴリズムを使う musicoin などの若いコインや, Sia コインや Zcash など他のコインのマイニングなどに切り替えていくのを考慮しておく必要があります.

https://whattomine.com/

に, どの GPU でどれだけの収益で採掘できるかの一覧があります.

## TODO

* レイトレーシング計算など浮動小数点計算の多いカーネルと, ハッシュ計算の整数演算のカーネルをフージョンして実行し, レイトレーシングとマイニングを同時に行うのに試みてくれるコンパイラ最適化若人を探す旅に出たい.
* 奈良生駒近辺に太陽光 or 水力発電 + テスラのバッテリーで動く計算機農場をつくり, 日中はレイトレーシングと機械学習計算, 夜間はバッテリー駆動でマイニングして収益を得るスキームを確立したい.