distributed.netな日々:2017年7月

2017年7月12日:AWSでdnetc

今年も暑い季節がやってきましたね。我々牛飼いは特に暑くなると困ります。部屋はPCの廃熱で猛烈に暑くなりますし、それを押さえ込む為のエアコンの電気代もうなぎ登り。正直、夏の間だけはdnetcを止めたいところですが、そういえば今時ならクラウド化も可能なんじゃないかと今更ながらに思いつきました。dnetcをクラウドに逃がせれば、廃熱もファンの騒音も自宅からは追っ払えますよね。

パブリッククラウドと言えばAWSでしょ。ということで早速AWSのアカウント作成。が、ここでびっくり。すでにそのメールアドレスは使われていますって。なんでやーと思って調べたところ、AWSのアカウントってamazon.comのアカウントと共通なんですね。新戦力追加!でdnet wareを購入したときにamazon.comを選択したので、そのときにアカウントも作ったのでした。そんなことすっかり忘れてましたよ。

ということで無事にAWSが使えるようになりました。早速、無料枠のあるt2.microでインスタンスを立ててベンチマークをとってみたところ、以下のようになりました。

$ ./dnetc -benchmark

distributed.net client for Linux Copyright 1997-2016, distributed.net
Please visit http://www.distributed.net/ for up-to-date contest information.
Start the client with '-help' for a list of valid command line options.


dnetc v2.9112-521-CFR-16020313 for Linux (Linux 4.9.32-15.41.amzn1.x86_64).
Please provide the *entire* version descriptor when submitting bug reports.
The distributed.net bug report pages are at http://bugs.distributed.net/

[Jul 05 14:42:59 UTC] Automatic processor type detection found
                      an Intel Xeon Ex v3 (Haswell EX) processor.
[Jul 05 14:42:59 UTC] OGR-NG: using core #2 (cj-asm-sse2).
[Jul 05 14:43:18 UTC] OGR-NG: Benchmark for core #2 (cj-asm-sse2)
                      0.00:00:16.17 [61,826,415 nodes/sec]
[Jul 05 14:43:18 UTC] RC5-72: using core #4 (YK AVX2).
[Jul 05 14:43:37 UTC] RC5-72: Benchmark for core #4 (YK AVX2)
                      0.00:00:16.15 [33,049,529 keys/sec]
[Jul 05 14:43:37 UTC] Compare and share your rates in the speeds database at
                      http://www.distributed.net/speed/
                      (benchmark rates are for a single processor core)

これくらいの速度がでるのなら、OGRについては十分に戦力になりますね。心配なお値段ですが、最安リージョンのオハイオなら月に7ドルくらいで済むようなので、それくらいなら十分です。自宅でPCを運用することに比べたら、電気代よりも安いんじゃないですかね。PC本体の値段は事実上ただ?だとしたら、AWS上にdnetcファームを構築したくなりますねぇ。

AWSの場合、リージョンによって値段が違うわけで、通常ならネットワーク的に近い東京リージョンを使いたいところです。が、dnetcの場合は正直どこでもいい。ネットワーク速度なんて関係ないですから。ということで最安のオハイオを選択しました。アイ・ラブ・オハイオ!

あと、最大でx1.32xlargeの128コアまでスケールできますが、値段はt2.nanoの128倍を遙かに越えます。ということは、AWSでファームを構築するならt2.nanoを大量に作った方がいいってことですねぇ。dnetcの場合はメモリとかは全くと言っていいほどパフォーマンスに影響しませんから。

ということで、早速t2.nanoでインスタンスを立てて常時稼働を開始しました。これで今晩から少し静かに寝れる(^^)。

2017年7月13日:GPUなAWSでdnetc

AWS EC2にはマルチコアなもの以外にも様々なインスタンスタイプが用意されています。そして、その中にはGPUを搭載したものがあります。具体的には、p2シリーズとかですね。GPUが使えるとなると、dnetcでどれくらいの速度が出るのか気になりますので、早速試してみました。

p2で一番安いp2.xlargeでインスタンスを立てようとしたのですが、あなたの権限では無理と言われてしまいました。どうやらAWSではあらかじめ申請しておかないと高度なインスタンスタイプは利用できないようです。ならばということでサポートに許可を申請。しばらくして許可が下りたので、再度インスタンスを構築してみました。ちなみに、AMIはGPUドライバをインストールしたものを選択した方がいいっぽいです。最初、普通のAmazon Linuxで立ち上げたんですが、ドライバが無くてdnetcが動きませんでした。あとからドライバを入れる方法もあるのでしょうが、今回はプリインストールされているAMIであるBitfusion Ubuntu 14 TensorFlowを利用しました。

インスタンスが立ち上がったので、早速ベンチマーク。OpenCLとCUDA-6.0が動作しました。CUDA-7.0は残念ながらドライバが入ってなかった模様。

$ ./dnetc -benchmark
./dnetc: /usr/local/cuda/lib64/libOpenCL.so.1: no version information available (required by ./dnetc)

distributed.net client for OpenCL on Linux Copyright 1997-2016, distributed.net
Please visit http://www.distributed.net/ for up-to-date contest information.
Start the client with '-help' for a list of valid command line options.


dnetc v2.9112-521-CTR-16021317 for OpenCL on Linux (Linux 3.13.0-105-generic).
Please provide the *entire* version descriptor when submitting bug reports.
The distributed.net bug report pages are at http://bugs.distributed.net/

[Jul 13 13:25:33 UTC] Automatic processor type detection did not
                      recognize the processor (tag: "Tesla K80 ")
[Jul 13 13:25:34 UTC] RC5-72: Running micro-bench to select fastest core...
[Jul 13 13:25:52 UTC] RC5-72: using core #2 (CL 2-pipe).
[Jul 13 13:25:56 UTC] RC5-72: Benchmark for core #2 (CL 2-pipe)
                      0.00:00:02.05 [2,185,325,280 keys/sec]
[Jul 13 13:25:56 UTC] Compare and share your rates in the speeds database at
                      http://www.distributed.net/speed/
                      (benchmark rates are for a single processor core)
$ ./dnetc -benchmark

distributed.net client for CUDA on Linux Copyright 1997-2014, distributed.net
Please visit http://www.distributed.net/ for up-to-date contest information.
Start the client with '-help' for a list of valid command line options.


dnetc v2.9111-520-CTR-14081118 for CUDA on Linux (Linux 3.13.0-105-generic).
Please provide the *entire* version descriptor when submitting bug reports.
The distributed.net bug report pages are at http://bugs.distributed.net/

[Jul 13 13:28:31 UTC] Automatic processor type detection found
                      a Tesla K80 (13 MPs - ? SPs) processor.
[Jul 13 13:28:31 UTC] RC5-72: using core #0 (CUDA 1-pipe 64-thd).
[Jul 13 13:28:36 UTC] RC5-72: Benchmark for core #0 (CUDA 1-pipe 64-thd)
                      0.00:00:02.37 [1,843,293,984 keys/sec]
[Jul 13 13:28:36 UTC] Compare and share your rates in the speeds database at
                      http://www.distributed.net/speed/
                      (benchmark rates are for a single processor core)

ということで、約2GKeys/secという結構な速度が得られました。それは素晴らしいのですが、残念ながらp2.xlargeは値段も素晴らしい。オハイオリージョンでも$0.9/時。一か月動かしっぱなしなら$648。うーん、これは流石に払えません。残念。

2017年7月22日:AWSでdnetcファームの夢破れる

AWSでdnetcを動かし始めたのですが、statsにはその成果が出ているように見えない。まさかメールアドレスの設定を間違えたかと思って確認したけど、そんなことは無い。念のためにログを確認してみたところ、こんなことになってました。

$ grep Mnodes dnetc.log
[Jul 09 14:45:35 UTC] OGR-NG #b: Saved 28/1-26-15-16-44-3* (906.15 Mnodes done)
[Jul 09 14:45:35 UTC] OGR-NG #a: Saved 28/1-26-15-16-43-4* (892.38 Mnodes done)
[Jul 09 14:45:36 UTC] OGR-NG: Loaded 28/1-26-15-16-43-4* (892.38 Mnodes done)
[Jul 10 19:23:35 UTC] OGR-NG: Loaded 28/1-26-15-16-44-3* (906.15 Mnodes done)
                      1.04:37:58.00 - [4.33 Mnodes/s]
                      2.23:55:25.18 - [3.65 Mnodes/s]
                      4.16:51:59.50 - [3.48 Mnodes/s]
                      6.03:09:55.87 - [3.40 Mnodes/s]
                      7.12:37:18.02 - [3.35 Mnodes/s]
                      8.17:54:51.75 - [3.31 Mnodes/s]
                      9.17:00:10.05 - [3.29 Mnodes/s]
                      10.13:02:21.36 - [3.27 Mnodes/s]
                      11.07:33:45.80 - [3.26 Mnodes/s]
                      12.01:25:45.82 - [3.25 Mnodes/s]
                      12.09:57:58.89 - [3.25 Mnodes/s]
                      12.17:55:42.60 - [3.25 Mnodes/s]

がーん。なんじゃそりゃ。ベンチマークなら60Mnodes/sくらい出すのに、長期的には3Mnodes/sって。そりゃあきまへんなぁ。しくしく。

これでは意味がないので、インスタンスは停止に。AWSでdnetcファームを構築しようと思ってたのになぁ。残念無念。

(2018/1/11追記)

この件ですが、T2インスタンス調査結果という記事を見つけました。要するにクレジットという概念があって、それがないとフルパワーで動作しないのですね。そうだったのか。残念だけど、理屈がわかってすっきりしました。