格安で機械学習環境(物理)を構築する方法 #1

序論

今まで生化学を専攻してきたというのに仕事で突然CUDAを使う機械学習OSSのソフトが動く環境を構築しろと言われたら、あなたはどうしますか?

しかもその会社で支給されるPCはmem 8GBのLet's Noteで込み入った日常業務すら厳しい始末で、当然GPUなんぞ積んでいない。GPUが載ったサーバーへのアクセス権限はなく他の人も使っていて自由に弄れる環境ではないし、AWSのようなクラウドサービスを使おうにも何枚の申請書が待ち受けているのかわかったものではない。

欲しい……自由に使える機械学習環境が。

しかし筆者は6年の自作歴だが生粋のAMD派。R9 290→R9 390X→RX 590→RX VEGA 56と爆熱轟音割安の系譜を渡り歩いてきた私はCUDAの実行環境なんぞ持ち合わせておらぬ。

そこで仕方なく会社の本番環境を模した機械学習用サーバーを作ることとした。しかしお金がないのでなるべく安く!

最終的に出来上がったもの

合計 35522円

これでGoogle ColabolatoryでハズレGPU を引いたときと同じような機械学習用サーバーが完成しました!やったね!!

……個人的に楽しそうだから作ったのはいいが、正直コスト、性能、メンテの面倒くささ含めて一つもGoogle Colabに勝てない。こんなものを自前で作ろうというのが時代錯誤な話なのかもしれない(作ってしまった後の感想)

唯一のメリットは自分でハード構成やOS、ドライバのセットアップをする羽目になるということ。つまり言ってしまえば苦しんで学ぶ以上の意味合いはないでしょう。

しかし、昔あんだけ高かったTeslaを自分の手中に収める所有欲やなんかよくわからないものを作っている楽しさは何事にも代えがたい!なので後悔はない。

パーツの仕入

ということで、途中で出てくるよく分からないBiostarマザーボードやら$表記の価格やら謎のcardboard cooling solutionといった不可思議な点に迫り、この圧倒的低価格の納得の理由を解き明かしていきたいと思う。

  • CPU/MB/メモリ

    まずCPU/MB/メモリの3点セットについてだが、これはいわゆるマイニング落ちのPCパーツである。

    BiostarのマザーボードのTBxxx-BTC型番のものはマイニングの定番品であり、ブームが過ぎ去った今では大変安価に購入することができる。多少の癖はあるものの、自分もかつてTB350-BTCというマザーでRyzen1700Xを動かしていた経験がありそのへんは熟知し ているため、今回の用途でもこのマイニングマザーで十分と考えてこの3点セットをメルカリで購入した。

    ちなみにマイニングマザーのよくある注意点を下に列記しておく。これらが許容できる場合、普通の自作用途でも格安のマザーボードとして選択肢に入ると思う。

  • ATXなのにメモリスロットが2本

  • IOポートは最低限。画像出力はDVI-IだしUSBの数も少ない
  • M.2はついてない
  • PCIeはx16一本を除き全部x1で、複数GPU指したければx1→x16のライザーが必要
  • PCIeの給電のためにペリフェラルを2本余計にマザーに指す必要があり配線が煩雑

    また、機械学習用途だと、CPUにも注意が必要である。実はマイニングなどに用いられるCeleronPentiumみたいな低価格帯のCPUだと、最近のバージョンのTensorflowで使用される命令セットであるAVXに対応していないらしい。こうなると古いTensorflow(1.5.0以前)しか動かないという不都合な事態が生じうる。ここまで書いといてなんだが、これは大変面倒になることが多く、できればi3やi5といったAVXに対応のCPUを買うことをおすすめしたい。

  • ケース代わりのマウンタ

    続いてマウンタについて。今回作る機械学習用サーバーでは、パッシブクーリングのTeslaを載せる予定だったので、ケースは買うつもりがなく、いわゆるこういうまな板を使う予定だった。

    しかし丁度買おうとしたとき品切れで、そもそも唯の金属板ごときにこんなにカネを出す必要があるのかという気持ちが拭いきれず、結局下のようなマザボのスペーサーを使うこととした。スイッチ類については、いつぞや買った福袋で変換名人の検証スイッチセットを手に入れていたのでそれを使う。

    多少安定性は悪いが、バラックで組むには正直これで十分な気がする。

  • 電源とSSD

    電源とSSDはめぼしい特価もなかったし普通にAmazonで買った。電源は特にみんなコロナの自宅待機で自作PCでも作っているのか売り切れが目立ち、多少割高なものを買ってしまった。

    Tesla K40M一本を動かすなら500Wもあれば十分なので、ここはもっとコストカットできる部分かと思う。

  • アクセラレータ

    そしていよいよ今回のメインであるTesla K40Mのお話。

    もちろん中古の商品だが、購入場所はeBayである。セカイモンとかでnvidia Teslaと検索してみると、日本で販売されているのとは比べ物にならないくらいたくさんの出品が確認できる。

    今回狙うのは、VRAMが8GB以上でCUDAが使えるKepler以降のものなので、コストとの兼ね合いを考えるとK40がいい感じであった。クーラー付きのK40Cは意外と値が張り普通に日本で中古のGTX1070とか買ったほうが良さそうな値段になるので、パッシブクーリングのK40Mを買うことにした。

    多分送料込み16000円くらいで普通に買えると思うので、これなら割安感がある。 ちなみに競合しそうな同じ価格帯のグラボと比較した表が以下のとおりです。

    T4は価格帯違いますがGCPAWSでお安く使えることも多いので載せてあります。

    - GTX1070 RTX2070 K40M M40 T4
    CUDA Core 1920 2304 2880 3072 2560
    Clock MHz 1683 1620 875 1114 1590
    単精度 Tflops 6.46 7.5 5.0 6.8 8.1
    倍精度 Tflops 0.20 0.23 1.43 0.21 0.25
    VRAM GB 8 8 12 12 16
    TDP W 150 175 235 250W(最大消費電力) 70W(最大消費電力)
    参考価格 20000円(中古) 40000円(中古) 17000円(ebay中古) 45000円(ebay中古) 300000円(新品)

    Clockや計算能力はBoostの値。ソースはWikipediaかTechPowerUPのデータベース、ELSAの製品ページ。

    まあ結論1070のほうが単精度は流石に良いですが、倍精度やVRAM量はK40Mが勝っており、今でも十分戦える能力を持つアクセラレータであるといえるでしょう。電気代を除けば。

    さて物が使えるのはわかりましたが、問題は冷却をどうするか?ということです。

    こういうパッシブクーリングのTeslaはブレードサーバなどエアフローがきちんと別に考えられている環境で使われるものであり、何かしらの手段で空気をヒートシンク内に流して上げる必要があります。

    そこでこういう記事を参考にしまして、オリジナルの"cardboard cooling solution”を作成しました!

    f:id:hashicco:20200531140043j:plain
    こんな感じのクーラーに

    ...まあなんとも貧相な出来ではありますが、結果的にこれで冷やせてるので良しとします。 学習中のフルロード時でもMax 53 ℃までしか上がりませんので、手作りとしては十分でしょう。

    しかし、用いているファンが8cm角で4000rpmですのでなんせうるさい!

    寝ているときに学習かけて、起きたらモデルチェックみたいな運用はとても無理。可変速ファンを使うとかもっと本当は工夫できると良いですが。

    参考になるかはわかりませんが、工作の過程も上げておきます。それっぽいパーツを作り、テープでつないで、テープで固定するだけです。

    f:id:hashicco:20200531140619j:plainf:id:hashicco:20200531140049j:plainf:id:hashicco:20200531140045j:plain
    製作工程

    ファンを囲むようにダンボールを両面テープで貼り付け→カードとファンを挟むように長めの長方形のダンボール2枚を接着→しゃもじみたいにダンボールを切り取って空いた面に貼り付け→隙間をテープで埋めて固定

組み立て

ただ組み立てるだけ。とってもかんたん。なぜならケースがないからね!

ケーブルを決まったところに挿していくと動きます。完成図がこちら!

f:id:hashicco:20200531140040j:plain
これが3万5千円の機械学習用サーバー!

感想

見た目はあれで本当にうるさいですが、作ってよかったとは思う。AWSのようにお金に追われることもなく、Google Colabとは違いOS構成から自由に弄れるものが3万弱で手に入るのはそれなりに満足です。ちなみにAWSを少し弄ってDeepLabCutという動物の動画解析ソフトを動かすまでの四苦八苦もいつか書きたいと思います。

つらつらと書いていたらかなり長くなってしまったので。こっから先の話はまた気が向いたら!

#2 OSインストール編に続く!