これまでに組んだLinux自作PC(Debian Stretch 9.3.0)とGeforce 1070環境において、Nvidia-dokcerを用いたマイニング環境の構築を行ってみます。

Linux+Geforceにおけるマイニング

現在、巷に多くあるマイニング環境の構築ではWindowsかマイニング専用OSを使った構築が多く、Linux(Debian)を使った構築は少ないように思えます。

現在私が構築したLinux自作PC(Debian Stretch 9.3.0)とGeforce 1070による環境は、ディープラーニング使用も想定しているため、LinuxかつGeforce(CUDA)は必須条件でした。ディープラーニングに使っていない時間がもったいないので、同じ環境でマイニングをさせるため、必要な設定を行っていきましょう。

採掘コインの選定

GPUマイニングは基本的にRadeon優勢みたいですが、Geforceに適した仮想通貨もいくつか存在しています。 今回は、WatToMineというサイトを使って、Geforce1070で効率のいい仮想通貨を探してみます。

Geforce 1070で調査してみると、MonaCoin、BitcoinGold、Vivo、LBRY、Zcashあたりがリストアップされました。 今回は日本の取引所でも扱いのあるMonacoinを試しに採掘してみましょう。

ウォレットの用意

今回はBitflyerのMonacoinウォレットを送付先としました。以前の経営破たんしたMtGoxとは異なり、現在の国内取引所は正式に認可を受けているところであれば即座に資産が消し飛ぶ可能性は低そうに見えます。

とはいえ、完全に安全とはいいがたいので、気になる方はローカルウォレットの使用がよいでしょう。

bitFlyer ビットコインを始めるなら安心・安全な取引所で

採掘所の登録

今回はVip Poolという採掘所に登録して、マイニングツール用のワーカーの登録も行います。

MonacoinのLyra2REv2のハッシュレートは1070で35.88MH/sとなっています。 Difficultyは16で指定しておくことにします。

マイニングツールはプール推奨のccminerを使います。

Nvidia-Docker

dockerを使ったコンテナ化により、マイニングツールに悪意あるプログラム紛れていた時の簡易対策と、環境構築の再現性の高さを両立させます。

Dockerfileの作成

Dockerfileという名前で以下のようなファイルを作成します。 ユーザー名のminerとパスワードは適宜置き換えてください。

From nvidia/cuda:8.0-devel

LABEL maintainer "xxxx"

# install packages
RUN apt-get update
RUN apt-get install -y wget libssl-dev libcurl4-nss-dev automake git build-essential vim sudo

# add user with sudo
RUN groupadd -g 1000 miner && \
    useradd -g miner -G sudo -m -s /bin/bash miner && \
    echo "miner:xxxx" | chpasswd

RUN echo 'Defaults visiblepw' >> /etc/sudoers
RUN echo 'miner ALL=(ALL) ALL' >> /etc/sudoers

USER miner

記述が完了したら、Dockerfileの存在するディレクトリで以下のコマンドを用いてイメージを作成します。

$ sudo docker build -t local:gpuminer ./

minerのbinディレクトリの同期

dockerコンテナは終了時に初期化されるため、makeしたバイナリを保存する必要があります。

dockerでホストとゲストでディレクトリの共有を行うには、-v /host/path:/container/pathで同期が可能です。

ホスト側で/home/xxxx/cryptcurrency/volumeとでもしておき、コンテナ側は/home/volumeとしておきました。 /home/volume/bin/以下にmakeしたバイナリを置いていくことにします。

起動シェルスクリプトの作成

dockerの起動には必要なオプションが多いので、次のように起動用のシェルスクリプトrun-docker.shを用意した。

#!/bin/bash
docker run --runtime=nvidia --rm -it \
    -v /home/xxxx/cryptocurrency/volume:/home/volume \
    local:gpuminer \
    /bin/bash

イメージの起動とccminerのビルド

docker環境下でccminerをcloneしてビルドを行います。

$ sudo bash run-docker.sh
$ git clone https://github.com/djm34/ccminer-lyra.git
$ CUDA=/usr/local/cuda
$ export PATH=$PATH:$CUDA/bin
$ cd ccminer-lyra
$ bash autogen.sh
$ ./configure LDFLAGS="-L/usr/local/cuda/lib64"
$ make

作成したバイナリファイルccminerを/home/volume/bin/に配置します。

ccminerの起動

VIP Poolで作成したWorker情報を用いて、ccminerを起動します。

$ ccminer -a lyra2v2 -o stratum+tcp://stratum1.vippool.net:8888 -u Weblogin.WorkerName -p WorkerPassword

これで正常な動作を確認できました。

動作モニタ

動作時のハッシュレートは大体14MH/sくらいでした。 nvidia-smiも見るとファンも動いて70℃前後です。 GPUメモリ8Gのうち1Gしか使っていないのはもったいない気もします。

ただ、1070の推定ハッシュレートは35.88MH/sなので、理論値には届いていません。 速いバージョンのものを使ったりチューニングする必要がありそうです。

$ nvidia-smi
Wed Dec 20 xx:xx:xx 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 375.82                 Driver Version: 375.82                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1070    Off  | 0000:01:00.0     Off |                  N/A |
| 23%   67C    P2   127W / 185W |   1137MiB /  8114MiB |     99%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID  Type  Process name                               Usage      |
|=============================================================================|
|    0      4695    C   ./ccminer                                     1135MiB |
+-----------------------------------------------------------------------------+

チューニング

ccminerのオプションでintensityの設定を-i 21で設定したところGPU使用メモリ4.2Gに上がり、ハッシュレートも15MH/s程度とわずかに上昇しました。 これでも理論値は程遠いものがあります。

参考

次の記事を参考に設定しました。

今後

ccminerのハッシュレートが想定より低かったので、この解決を行いたいと思います。