LoginSignup
20
16

More than 1 year has passed since last update.

M1 Macでのイーサリアム GPUマイニング

Last updated at Posted at 2021-03-27

M1でのEthereum GPUマイニング

M1 Mac miniでethminerを使用してイーサリアムのGPUマイニングをしてみました。

ハッシュレートは2.1Mhぐらいで、消費電力はサンワのワットモニターで測ると8~10Wです。2021/3/27時点では1日10円程度の利益が出る計算になります。

ethminerよりUselethMinerによるマイニングの方がハッシュレートが高いようです(2022/2/1追記)

変更履歴

  • 2022/2/01 UselethMinerについて追記
  • 2021/6/10 OpenCLのオプションとDAGに関して追記
  • 2021/5/13 boostのURLの修正と1.76.0を使うように変更したパッチを追加

M1移植版ethminerのビルド

Yifan Gu氏によるM1移植版ethminerをブログに従ってビルドして実行します。

準備

ターミナルを起動してください。~/Downloads/以下で作業します。

$ cd ~/Downloads/

XcodeとCommand line tools for Xcodeが未インストールならばApp StoreからXcodeをインストールし、ターミナル上でCommand line tools for Xcodeをインストールしてください。

$ xcode-select --install

brewとcmakeが未インストールならbrewをインストールし、brew経由でcmakeをインストールしてください。

$ arch -arm64e /bin/bash -c "$(curl -fsSL $ https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
$ export PATH=/opt/homebrew/bin:$PATH
$ brew install cmake

ethminerのビルド

git経由でファイルを取得します。

$ git clone https://github.com/gyf304/ethminer-m1.git
$ cd ethminer-m1
$ git submodule update --init --recursive

2021/5/13追記

boostのURLが変更されているようなのでcmake/Hunter/config.cmakeを修正してください。ついでにboost-1.76.0が出ているようなので、1.75.0から1.76.0を使うようにしたパッチを用意しました。

$ curl -o ethminer-m1.patch https://gist.githubusercontent.com/asfdrwe/7537288d7e9816defb69e66468efbeb2/raw/c6d2baa0634ad3a47925983e1288d82edffab612/ethminer-m1.patch
$ patch -p1 < ethminer-m1.patch

cmakeでビルドします。NVIDIA用のCUDAとAMDのBINKERNを外す指定をしてださい。初回cmake実行時のみ依存関係で必要なものをビルドするのでそれなりに時間がかかります。

$ mkdir build
$ cd build
$ cmake .. -DETHASHCUDA=OFF -DBINKERN=OFF

ethminerをビルドして実行バイナリのあるフォルダに移動します。

$ make
$ cd ethminer

ethminer GPUマイニングの実行

そのまま実行しようとすると、2021/3/27時点ではcl2Metalにバグがあるようで、日本語環境下ではOpenCLコードのバックスラッシュを円記号として扱ってしまい、正常に動作しないようです。

...
cl 19:18:59 cl-0     OpenCL kernel
UNSUPPORTED (log once): buildComputeProgram: cl2Metal failed
 X 19:19:00 cl-0     OpenCL kernel build log:
Compilation failed: 

program_source:117:17: error: program scope variable must reside in constant add
ress space
    const uint2 m0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] ^ ROTL64_1(a[2] ^ a[7] 
^ a[12] ^ a[17] ^ a[22], 1);¥
                ^
program_source:117:22: error: use of undeclared identifier 'a'
    const uint2 m0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] ^ ROTL64_1(a[2] ^ a[7] 
^ a[12] ^ a[17] ^ a[22], 1);¥
                     ^
program_source:117:29: error: use of undeclared identifier 'a'
    const uint2 m0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] ^ ROTL64_1(a[2] ^ a[7] 
^ a[12] ^ a[17] ^ a[22], 1);¥
                            ^
program_source:117:36: error: use of undeclared identifier 'a'
    const uint2 m0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] ^ ROTL64_1(a[2] ^ a[7] 
^ a[12] ^ a[17] ^ a[22], 1);¥
                                   ^
...

システム環境設定の言語と地域から英語環境を入れて優先する言語を英語にして実行することもできますが、環境変数__CF_USER_TEXT_ENCODINGを英語設定にすることでも実行可能になります。

uidをidコマンドで確認し__CF_USER_TEXT_ENCODINGの内容をechoで確認してください。
uidが501(16進数で0x1F5)の場合はこうなります。

$ id
uid=501(asfdrwe) gid=20(staff) groups=20(staff),...

$ env | grep __CF_USER_TEXT_ENCODING
__CF_USER_TEXT_ENCODING=0x1F5:0x1:0xE

idが501(0x1F5)ならば__CF_USER_TEXT_ENCODINGを0x1F5:0x1:0xEから__CF_USER_TEXT_ENCODINGを0x1F5:0x0:0x0にすればcl2Metalのバグを回避できます。envコマンドを使うかexportで環境変数の値を変更してethminerを実行してください。

NiceHash poolを使用するならばこのようになります。

$ env __CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0 ./ethminer -G -P stratum2+tcp://『NiceHashの自分の報酬ビットコインアドレス』.『NiceHashの自分のWorker名(何でもいい)』@daggerhashimoto.usa.nicehash.com:3353

または

$ export __CF_USER_TEXT_ENCODING=0x1F5:0x0:0x0
$ ./ethminer -G -P stratum2+tcp://『NiceHashの自分の報酬ビットコインアドレス』.『NiceHashの自分のWorker名(何でもいい)』@daggerhashimoto.usa.nicehash.com:3353

他のpoolの場合のethminerのサンプルを参考にしてください。

実行例

ethminer 0.19.0+commit.5b9b7814
Build: darwin/release/appleclang

 i 12:09:07          Configured pool daggerhashimoto.usa.nicehash.com:3353
 i 12:09:07          Selected pool daggerhashimoto.usa.nicehash.com:3353
 i 12:09:07          Stratum mode : EthereumStratum/1.0.0 (NiceHash)
 i 12:09:07          Established connection to daggerhashimoto.usa.nicehash.com [[2606:4700:90:0:dcac:ac09:c2cf:33dc]:3353]
 i 12:09:07          Spinning up miners...
cl 12:09:07 cl-0     Using Device : Intel GPU 0.0 Apple M1 OpenCL 1.2  Memory : 5.33 GB (5726633984 B)
 i 12:09:07          Extranonce set to b22872
 i 12:09:07          Authorized worker xxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxx
 i 12:09:07          Epoch : 403 Difficulty : 848.17 Mh
 i 12:09:07          Job: fa4bd3aa… daggerhashimoto.usa.nicehash.com [[2606:4700:90:0:dcac:ac09:c2cf:33dc]:3353]
cl 12:09:08 cl-0     Generating split DAG + Light (total): 4.15 GB
cl 12:09:08 cl-0     OpenCL kernel
cl 12:09:08 cl-0     Creating DAG buffer, size: 4.15 GB, free: 1.18 GB
cl 12:09:08 cl-0     Creating light cache buffer, size: 66.37 MB
cl 12:09:08 cl-0     Loading kernels
cl 12:09:08 cl-0     Creating buffer for header.
cl 12:09:08 cl-0     Creating mining buffer
 i 12:09:10          Job: 552ccbcf… daggerhashimoto.usa.nicehash.com [[2606:4700:90:0:dcac:ac09:c2cf:33dc]:3353]
...
 m 12:10:32          0:01 A0:R1 2.20 Mh - cl0 2.20
 i 12:10:32          Job: 572392cd… daggerhashimoto.usa.nicehash.com [[2606:4700:90:0:dcac:ac09:c2cf:33dc]:3353]
 i 12:10:36          Job: 926fd047… daggerhashimoto.usa.nicehash.com [[2606:4700:90:0:dcac:ac09:c2cf:33dc]:3353]
 m 12:10:37          0:01 A0:R1 2.17 Mh - cl0 2.17
 i 12:10:40          Job: d1be8681… daggerhashimoto.usa.nicehash.com [[2606:4700:90:0:dcac:ac09:c2cf:33dc]:3353]
 m 12:10:42          0:01 A0:R1 2.18 Mh - cl0 2.18
 i 12:10:44          Job: 33c11b8d… daggerhashimoto.usa.nicehash.com [[2606:4700:90:0:dcac:ac09:c2cf:33dc]:3353]
 i 12:10:46          Job: dfeba6e0… daggerhashimoto.usa.nicehash.com [[2606:4700:90:0:dcac:ac09:c2cf:33dc]:3353]
 ...

うまく実行できていれば2.1Mh程度でマイニングできるはずです。また、NiceHashのmyページのmining rigのHISTORY & STATのActive workers に指定したWorker名で状況が表示されます。

実行オプション

ethminer -H clでOpenCL使用時のオプションがわかります。

OpenCL Extended Options :

    Use this extended OpenCL arguments to fine tune the performance.
    Be advised default values are best generic findings by developers

    --cl-devices        UINT {} Default not set
                        Space separated list of device indexes to use
                        eg --cl-devices 0 2 3
                        If not set all available CL devices will be used
    --cl-global-work    UINT Default 65536
                        Set the global work size multiplier
                        Value will be adjusted to nearest power of 2
    --cl-local-work     UINT {64,128,256} Default = 128
                        Set the local work size multiplier
    --cl-nobin          FLAG
                        Use openCL kernel. Do not load binary kernel
    --cl-noexit         FLAG
                        Don't use fast exit algorithm
現在のethminerでは[DAGサイズ](https://ethereum-japan.net/wiki/dag/)は最小4GBのようで、使用しているMac miniのメモリが8GBしかないのでそのまま実行していますが、メモリが16GBのM1 Macなら--cl-local-work 64や--cl-global-workでより大きいDAGサイズにすれば、ハッシュレートが上がるかもしれません。

--cl-local-workや--cl-global-workはOpenCLの並列度の指定です。変更してみましたがハッシュレートはほとんど同じです。ソースをいじって極端に小さくするとハッシュレートが下がります。DAGに関してもnsfminerのコードを参考にDAGの分割をやめるなど少しいじってみましたがハッシュレートが下がります(2021/6/10追記)。

まとめ

現時点(2021/3/07)では一応電気代以上に稼げるマイニングがM1 MacでのGPUマイニングで可能となっています。興味のある方は試してみてください。

参考

オリジナル版ethminerのページ

20
16
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
16