shikoan’s memo

プログラミング初心者のチラ裏

ぷろぐらみんぐ帳

iKoulaの専用サーバーでGPUマイニングをしてみた

以前、この記事でフランスのサーバー会社iKoulaの専用サーバーを借りた話をした。

koshian2.hatenablog.jp

ちなみに現在半額のプロモコード配布中で、初期の1~3ヶ月分がだいたいのプランで半額になる。自分が借りたE3 1220v5のプランは月額14.99€+VAT(付加価値税)。このキャンペーンは4月末までやっている。CPUは使っているのだが、これにはGeForce GT 710というGPUが申し訳ばかりについているので、そのまま眠らせておくのも勿体無いなと思って、GPUマイニングをさせてみた。

モナコインを掘る

OSはUbuntu16.04。とりあえずCUDAをインストールしておく。他いろいろ書かれているのでめんどくさいから説明はここらへん読んで。CUDAバージョンは8.0にしておいた。

そもそもこのGT710というグラフィックボード自体相当ローエンドなので、最新のCudaを使っても計算の最適化はされない。それどころかCuda9.0以降ではローエンドのGPUで使えるcompute_20というモードがサポートされていないため(Cuda8.0でビルドしていても”近々サポートされなくなります”という趣旨の警告がずらっと出てくる)、Cuda8.0にしたほうが良さそう。 別にccminerに限った話ではないが、compute_○○の設定はMakefile.amのnvcc_ARCHでする必要があり、これをうまく設定しないと十中八九ビルドでコケる(CUDAの他にもc++のビルドでコケることもあるので結構ビルドがめんどい)。

いろいろマイナーはあるが、このccminerしかビルドできなかった

github.com

ccminerもフォークがいろいろあり、例えばyescrypt対応版の改造版(調べれば出てくるので適当にググって)や、全く別のマイナーのcgminerやClaymore(全てが全てモナコインを掘れるわけではないだろうが、他のコインも掘れるかなと思って試してみた)もビルドで失敗。ccminerのインストールページより、

ccminer/INSTALL at linux · tpruvot/ccminer · GitHub

** How to compile on Ubuntu (16.04 LTS)

First, install Cuda toolkit and nVidia Driver, and type `nvidia-smi` to check if your card is detected.

Install dependencies
sudo apt-get install libcurl4-openssl-dev libssl-dev libjansson-dev automake autotools-dev build-essential

Ubuntu is now shipped with gcc 6 or 7 so please install gcc/g++ 5 and make it the default (required by the cuda toolkit)

sudo apt-get install gcc-5 g++-5
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 1

Then use the helper ./build.sh in ccminer source folder, edit configure.sh and the Makefile.am if required.

./build.sh
./ccminer --version

このへんサクッとやるのだが、そのままビルドしたらコケたので、Wikiに従ってMakefile.amの設定でアーキテクチャーの追加

Compatibility · tpruvot/ccminer Wiki · GitHub

compute_○○というのはGeForceCompute Capabilityに対応するのだと思われる。この値はここで見れる。GT710の場合はよく情報が載っていなく(GT710の公称スペックではメモリは2GBのはずだが、サーバーで提供していたGPUが1GBしかなかったのでん?ちょっとよくわからないなー…まあいいやという感)、710MならCC2.1なのだが、ググってるとCC3.5という情報もあったのでこうしてみた。

#nvcc_ARCH += -gencode=arch=compute_61,code=\"sm_61,compute_61\"
#nvcc_ARCH += -gencode=arch=compute_52,code=\"sm_52,compute_52\"
#nvcc_ARCH += -gencode=arch=compute_50,code=\"sm_50,compute_50\"
nvcc_ARCH += -gencode=arch=compute_35,code=\"sm_35,compute_35\"
nvcc_ARCH += -gencode=arch=compute_30,code=\"sm_30,compute_30\"
nvcc_ARCH += -gencode=arch=compute_20,code=\"sm_21,compute_20\"

これでCC3.5~2.1のアーキテクチャー全てに対応できる。実際compute20だけの場合と、compute30と35を含めた場合だと、含めた場合のほうがハッシュレートが15%ほど向上していたので、多分CC3.5なんじゃないかなと思われる。このMakefile.amを更新したらビルドできた。CUDAを使ってビルドするのでこれがえらく時間かかる(5分はかかった)。ここらへんのビルドがくっそ面倒くさいのがGPGPU特有の現象で面白い。

プールの登録はVIP poolを使ってサクッと。バックグラウンド+ログアウトしても動かすようにするには、(nohup.outへの出力がウザければ > /dev/nullとかで捨てちゃえばいい)

nohup ./ccminer -a lyra2v2 -f 0.1 -o stratum+tcp://vippool.net:8888 -u [username].[worker] -p [password] -t 1 &

ハッシュレートは580kH/s程度。メガ乗らなかった残念。流石にこんだけローエンドなモデルではクソ雑魚だった(ですよねー)。半日放置してなんと1万分の2.5モナコインが生成された。ちなみに現在1モナコイン=350円程度なので、1日放置して0.2円行くか行かないかぐらい。ハハッ、ワロス(死語)

ちなみに、CPUとGPUの同時マイニングできる。フランスの専用サーバーを借りて同時マイニングとかネタ以外の何者でもない。

MinerGateを使って採掘

さすがにこれでは引き下がれないので、MinerGateも試してた。こっちはビルド簡単でした。結果だけ。

CPU:E3 1220v5 @3.0GHz 4Core GPU:GeForce GT 710 1GB

モネロもバイトコインも同じCryptoNightアルゴリズムなのでほぼ同じ結果。

CPU4コア:160H/s GPU:30H/s

まさかGPUよりCPUのほうがハッシュレートが上とは。CryptoNight自体がメモリ依存のアルゴリズムなので、GPUのメモリが1GBなのがきっと悪いのだろうね。ちなみにこんなアルゴリズムの概要。日本語記事だとろくな解説ないから英語記事を当たろう。英語版Wikipediaには詳細な解説あり。

Principles
CryptoNight relies on random access to the slow memory and emphasizes latency dependence. Each new block depends on all the previous blocks (unlike, for example, scrypt). The algorithm requires about 2 Mb per instance:

  1. It fits in the L3 cache (per core) of modern processors.
  2. A megabyte of internal memory is almost unacceptable for the modern ASICs.
  3. GPUs may run hundreds of concurrent instances, but they are limited in other ways. GDDR5 memory is slower than the CPU L3 cache and remarkable for its bandwidth, not random access speed.
  4. Significant expansion of the scratchpad would require an increase in iterations, which in turn implies an overall time increase. "Heavy" calls in a trustless p2p network may lead to serious vulnerabilities, because nodes are obliged to check every new block's proof-of-work. If a node spends a considerable amount of time on each hash evaluation, it can be easily DDoSed by a flood of fake objects with arbitrary work data (nonce values).

ただ、MinerGateの計算機で計算すると、1週間で0.00002 BTC。1BTC=70万円で計算しても、1週間で14円。これでもモナコインの10倍近い効率は出ている。

サーバーの余剰な計算資源を走らせておくならこんなものだろう。もちろんiKoulaにはマイニングに特化した専用サーバーもあって(iKoulaの公式Wikiを見てるとわざわざ「マイニングにおすすめ」と書いてある)、

Intel® Xeon® E3 1230v5 1 CPU (4C/8T) @3.4 GHz
16 GB DDR4
1 TB SATA
Nvidia GeForce GTX1070 8 GB GDDR5 / 1920 Core セットアップ費なし、月額€139.99

適当にハッシュレートを探して計算してると、イーサリアムあたりなら週に1000円ぐらいになるらしい。ちなみに140€は19000円程度なので、普通に赤字になると思う。ネタ的には美味しいので誰か勇者借りてみて(丸投げ)

GPUならまだしも、ASICがボロボロ出てくると(CryptoNight対応のASICが最近出てきたらしいという噂)もはや大人の殴り合いで個人は蚊帳の外なので、GPUというかCPUでマイニングしているような牧歌的な原風景が好き。そういう点では国産コインはASIC耐性ありでまだまだGPUの魔の手が及んでいないものも多い(おそらく上に挙げたように国産より流動性がよく、GPUでできてまだ黒字のやつがあるからそっちに行っているのだと思う)ので、面白いジャンルではあると思う。scryptの例であるが、GPU耐性についてはこの記事が面白かった。

blog.visvirial.com

がっつりと仮想通貨の話を書いてしまったが、儲かる儲からないだけではなく仮想通貨の面白い話をするならこのぐらい突っ込んで書かないと物足りない。