日常の話と、ちょっとIT

日常の話と、ちょっとIT

フリーランスの日常を書いてます

仮想通貨のマイニングをやってみた

f:id:moundsbook:20210211180020j:plain

GPGPU(General-purpose computing on graphics processing units)を使った、HPC(high-performance computing)環境の検証を集中的におこなう機会があったので、その空き時間を使って仮想通貨を掘って(マイニングして)みました。

 

 

マイニングとは

マイニングは仮想通貨の取引内容を確定させる行為となります。
仮想通貨の取引では、暗号化された大量なデータが流れます。
その取引の確定をおこなう為には膨大な計算を処理しなくてはならないため、高い計算能力を持ったハードウェアが必要となります。
現在では CPU ではなく、マイニングに専用化された RISC(Reduced Instruction Set Computer)が利用されているようですが、そんな立派なものは持っていませんので、CPU よりかは高処理がおこなえる GPGPU を使用しました。
マイニング自体は誰かがやらないといけない処理なので、代わりにおこなうことで報酬が貰えます。

その報酬がどれくらいなのか、また、RISCほどではないにしても、GPGPU もそこそこなお値段ですので、どれくらいの費用対効果があるのかも検証したいと思います。

マイニングの方法

マイニングには以下の手法があります。

  • ソロマイニング
  • プールマイニング
  • クラウドマイニング

仮想通貨の基盤となるブロックチェーンのルールとして、PoW(Proof of Work)というのがあるため、一番早くマイニング作業を終えた者だけが承認され、報酬を受け取れます。
よっぽど高速かつ膨大なデータをやり取りできるハードウェアがあればソロマイニング(一人でマイニング)にチャレンジするのもアリですが、猛者が集うマイニングの世界に一人で挑んでも、ずっとマイニング出来ずに電気代だけかかる可能性が高い、というか絶対そうなります。
ということで、今回は複数のマイニング参加者が協力してマイニングする「プールマイニング」とします。
クラウドマイニングは、クラウドファンディングのように、事業者にお金を出してマイニングを任せるという方式になります。今回は自分でマイニングしたかったので対象外。

プールマイニングをおこなうには

まず最初におこなうことは、どんな仮想通貨をマイニングするかを確定することです。
私は適当に決めました。イーサリアム(ETH)です。特に理由はなく、何となく、、、
本当は以下の決め方がいいようです。

  1. マイニングする環境(CPU?NVIDIARyzen?・・・)
  2. マイニングする通貨(BTC?ETH?LSK?・・・)
  3. 1,2 に対応・最適化されたツールを提供しているマイニングプール
  4. 通貨を扱っている交換業者

私の場合は 1 と 2 が決まっていたので、

3. 1,2 に対応・最適化されたツールを提供しているマイニングプール
→ NVIDIAでETHがマイニングできるツールを提供している「nanopool」
4. 通貨を扱っている交換業者
→ ETHの交換取引所の1つである「Coincheck」(たまたま口座開設してただけ)

交換取引所にてマイニングする通貨のウォレット(財布)を作成する必要があります。
Coincheck的には「Ethereum入金用アドレス」になります。


上記以外にも選択肢はありますので、是非いろいろと試してみてください。
今回はとりあえずこれで事前準備は完了です。

環境作成

検証環境の OS は CentOS 7.9 と Ubuntu 20.04 でおこないました。

マイニング環境は簡単にできます。
基本的には CentOSUbuntu も以下の手順となります。

  1. OSインストール
  2. GPGPUドライバインストール
  3. CUDA(Compute Unified Device Architecture) インストール

ドライバと CUDA は、CUDA Toolkit をインストールすれば同時に入りますので、そちらを利用しました。
CUDA ToolKit は以下よりダウンロードできます。

developer.nvidia.com

CUDA Toolkit でインストールする際は、nouveau ドライバを無効にし忘れてインストールが途中で止まっても、コンソールには詳細なエラーメッセージが表示されないので、そこだけは忘れずに。

 マイニングツールのインストール

ダウンロードしてファイル展開するだけです。
Nanopool が提供しているツールは、Git にあります。

github.com

今回の検証環境は少し古いCUDAバージョン(11.0)でしたので、nanominer v1.13.1 以前のバージョンを選択する必要がありました。
基本的には対応GPUが増えているだけでなく、処理速度も向上しているの最新バージョンを選択した方が良さそうです。

ダウンロードしたマイングツール(nanominer-linux-x.x.x.tar.gz)を展開すると、config.ini がありますので、以下のように修正します。

wallet = <交換所で指定されたウォレットのアドレス>

; (Optional) Rig (worker) name.
rigName = <適当に>

pool1 = eth-jp1.nanopool.org:9999
pool2 = eth-asia1.nanopool.org:9999
pool3 = eth-us-east1.nanopool.org:9999
pool4 = eth-us-west1.nanopool.org:9999

あとは起動するだけ。

# ./nanominer

                                   _                 
 _ __   __ _ _ __   ___  _ __ ___ (_)_ __   ___ _ __ 
| '_ \ / _` | '_ \ / _ \| '_ ` _ \| | '_ \ / _ \ '__|
| | | | (_| | | | | (_) | | | | | | | | | |  __/ |   
|_| |_|\__,_|_| |_|\___/|_| |_| |_|_|_| |_|\___|_|   
Version 1.10.0
 Started EthMan server on port 3333 without a password (read-only mode).
 Started web interface on port 9090 without a password.
 CUDA driver version is 11.0, runtime version is 10.0
Single device detected
GPU 0 PCI 02:00.0, Platform: CUDA, Name: Quadro P4000, 8119 MB available
-------------------Ethash:------------------
Currency: Ethereum
Wallet: 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Rig name: RIG
Email was not set.
Hashrate threshold to restart miner is not set
Added pool: eth-jp1.nanopool.org:9999
Added pool: eth-asia1.nanopool.org:9999
Added pool: eth-us-east1.nanopool.org:9999
Added pool: eth-us-west1.nanopool.org:9999
Auto pool sorting is disabled
Using all GPU devices
Memory tweak: 1
-------------Common parameters:-------------
Log path: ./logs/
Log is written to file
GPU watchdog is enabled
Never calling reboot.sh (always restarting the miner in case of errors). 
 Setting up algorithm: Ethash
 Connecting to pools...
 Connected to pool: eth-jp1.nanopool.org:9999 | ping: 8 ms.
 New job from eth-jp1.nanopool.org:9999 | share difficulty = 10000 MH, epoch 356 (3871 MB)

使用するGPGPU

今回使用した GPGPUNVIDIA の以下になります。

贅沢だ。

マイニング結果

CentOSUbuntu ではテスト結果はほとんど変わらなかったので、以下の結果は全てCentOS 環境になります。

Ubuntu 環境は途中から NVIDIA Docker にしてテストを忘れてたのは内緒、、、 

マイニング結果
  MH/s share/day ETH/day (ETH) 収入/day (円)
Quadro P4000 24.100 210.5714286 0.001992 347.10
TITAN V 52.900 440.7142857 0.004170 726.47
Quadro GV100 67.300 563.8333333 0.005335 929.42

MH/s:ハッシュレートを表し、マイニング速度を示した数値 [nanopoolのログから]

share/day:マイニングが成功した(ナンスを発見した)回数 [検証結果からの1日の平均値]

ETH/day:報酬結果 [検証結果からの1日の平均値]

収入/day:報酬結果から記載時の相場で計算 [1 ETH=$ 1,665.52 / 1 $= ¥104.60]

GPGPUの稼働状況とスペック

マイニング時のGPU稼働状況
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 450.51.05    Driver Version: 450.51.05    CUDA Version: 11.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  TITAN V             Off  | 00000000:02:00.0 Off |                  N/A |
| 55%   75C    P2   127W / 250W |   4329MiB / 12066MiB |    100%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A      2980      C   ./nanominer                      4325MiB |
+-----------------------------------------------------------------------------+

GPU-Util は常時100%で、使用メモリは4GB程度。

GPGPUスペック表
  CUDA Cores GPU Max Clock rate (MHz) Memory (MBytes)
Quadro P4000 1792 1480 8120
TITAN V 5120 1455 12067
Quadro GV100 5120 1627 32508

GPGPUの稼働状況や、マイニング結果・スペック表を見ると、CUDA Cores数とGPU Max Clock rate値で、マイニング結果が予測できそう。

マイニングは儲かるのか

上記の結果をもとに、費用対効果を調べてみます

マイニングの電気代
  消費電力 (W) 推定電気代/day (円)
Quadro P4000 108 54.54
TITAN V 127 64.13
Quadro GV100 160 80.79
マイニングの経費
  製品価格 3年減価償却/day
Quadro P4000 120,000 109.59
TITAN V 500,000 456.62
Quadro GV100 1,300,000 1187.21

※ベースとなるマザーボードや電源等は(面倒なので)含めていません

損益結果
  収入/day 電気代/day 減価償却/day 利益/day 年間利益
Quadro P4000 347.10 54.53 109.58 182.99 66,791.35
TITAN V 726.46 64.12 456.62 205.72 75,087.80
Quadro GV100 929.41 80.79 1187.21 -338.59 -123,585.35

 結論

マイニングやり始めの時には「まったく儲からないな〜」と思いながらデータを見ていたのですが、2020年12月末ごろからの仮想通貨全般の爆上げで、GV100以外は利益が見込めそう。GV100はそもそも用途が違うので、まぁそうなんだという感じです。

Quadro P4000なら初期投資も少ないので安い中古品を買って始めるというのも良いですし、CUDA Cores が多く、そして安価なものも新たに出ていますので、それらの機種を選択し、そしてこのまま Ethereum が値上がりしつつ、円安も加速すればマイニングも小遣い稼ぎにはいいかもですね。

ただし、税金が、、、