ノマド計算機環境のこれまでとこれから
はじめに
この記事はサステナブルなぴょこりんクラスタアドベントカレンダーのために書きました。
今日は僕の自室の計算機周りの環境の現状とこれからについて紹介します。リモートから色々やる用途の計算機の話題なので、曲を書いたりゲームや趣味パワポをするための計算機はここではスコープから外します。
現状の話
2017年頃からほぼメンテナンス無しで機械学習の諸々用に使っていた計算機たちの紹介をします。今回のこの記事において関心の対象となる計算機は2台、デスクトップPC(通称: Noel)とノートPC(通称: Kotsume)である。
雑なスペックは以下の通り、SSDは何枚か積んでてめんどくさいので省略。ちなみにどちらもUbuntuを入れています。
Noel
CPU: Core i5-8400 (2.80GHz)
Mem: DDR4 2666Mhz PC4-21300 32GBx2枚
GPU: NVIDIA GeForce GTX 1080 Ti × 2枚
こちらはデスクトップPCで、まぁ構成から明らかにGPU回す実験向けに用意したものです。当時GTX1080Tiはコンシューマ向けでグラフィックメモリが11GB乗ってる唯一の選択肢だったので、こっちに予算をステ振りしてCPUはまぁ最低限、という構成ですね。
Kotsume
CPU: Core i5-7200U (2.50GHz)
Mem: DDR4 16GB PC4-17000 DDR4 SODIMM (2スロット使用)
NVIDIA GeForce 940MX (2GB DDR3)
こっちはノートPCで、モノとしてはThinkPadのE470です。2017~2019年まではこれを持ち歩いて(要はNoelを触るためのクライアント側の端末として)こちらを使っていました。小規模にローカルで動くのを確認して動いたらNoelに渡すという感じで、NVIDIAのGPUが(一応)乗っているのでCUDAが動く構成を選択したという感じです。クライアント端末を引退後はNoelが忙しいときに一応小さいタスクを振ったりしたいときに使うリソースとして扱っていました。
使われ方
ノマドスタイルだったので(?)これらの計算機たちは外出先でも触れるようにしています。そんなに外出中触る機会があったのかと思われるかもしれませんが、都心のルノアール、平日昼間の中央線、家の近くのコワーキングスペース、横須賀線のグリーン車、様々なところから作業をしていました。業務で心身共に疲弊した状況下でも作業を継続するには外でやる必要があります。自宅に帰ったらベッドに吸い込まれるので。
大雑把な構成は以下のような感じ。
まず、クライアント端末から自宅のルータまではVPNを張っていました。対応してるルータを用意すればこのあたりは簡単。なおDDNSが必要になりますが、ASUSのルータ買うとASUSのDDNSのサービスが付いてくるので僕はそれを使っています。
で、VPNが張れてしまえばあとはsshするだけなので、よしなにsshしています。まさにVirtual Private Networkという感じで、VPNを張りさえすれば自宅で作業しても外出先で作業しても使用感が変わらないところも良いです。
ちなみにKotsumeがクライアント端末を引退した理由は2019年下期にThinkPad X390の支給があったため。そもそものクライアント側の要件として「GPUを積んでてほしい」と記載がありつつX390とはどういうこと?という気もしてくるのですが、この頃にはVS Code Remote Developmentが登場しており、(回線状況にもよりますが)開発環境をすべてリモートにしてもつらくなくなっていました。
今後の話
最近やったこととかこれからやろうとしてることをつらつらと書いていきます。
破棄やリプレイスの検討
今のところまだ色々実験回してたりするので破棄はないかなと思っています。加えて、さすがに今流行りのLLMに手を出すことは無いだろうなぁと思っていたのですが、LoRAやQLoRAに代表されるFine-tuningのための手法を個人のマシンで動かしたという事例が結構増えてきたこと、Google様が「このあたりクラウド環境上でマウスポチポチでできるようにしたでー」って言ってたけど、不確定性の高い試行錯誤でインスタンス代ゴリゴリ払う勇気はまだないこと、などを踏まえるとGPUの乗った計算リソースはまだ手元に持っておくのがよさそうという気持ちになりました。
一方でGPUのリプレイスは検討した方がよさそうだと思い、今よりグラフィックメモリが多くて現実的な価格のものを少し調べてみたらRTX 3060とか、あとはちょっと高いけどRTX4070あたりがメモリ12G構成のがいるなぁと色々調べていたら、3060の方はベンチマークのスコア現状のGTX1080Tiより低くてがっかりしてしまったり・・・。
逆に現状の1080Tiでもまだまだ現役かも、最近のモデルでも今の構成で動くのかも、という気がしたので、一旦色々試してみて、もうちょい良いGPUが欲しいという欲が出てきたら買い替えるという戦略で行こうということにしました。
ソフトウェア周りの諸々
基本的に2017年から継ぎ足し継ぎ足し秘伝のタレ状態なのでこれを機に色々ね、という話です。
今日一番ギルティなやつ
これ執筆前日までKotsumeとNoelに入ってたUbuntuが18.04 LTS (2023年5月31日標準サポート終了) でした。というわけで心機一転、22.04 LTSをインストールしました。反省しています。
Anaconda→venvへの完全移行
Pythonの環境構築の話題なのだけれど、Anacondaは2020年から商用利用の際有償ライセンスが必要になったので、業務(業務でPythonなんて書いてたか?)では使うのをやめていたし、個人利用でも極力新しいプロジェクトでは避けていたのだけれど、2019年からやってた継ぎ足し継ぎ足し秘伝のソースみたいなやつに対してはAnacondaを使っていた。
まぁの個人のプロジェクトだし何ならアカデミックな活動だったので、別にライセンス上問題は無いのだけれど、仕事と道具は揃えた方が混乱しないのでこちらでもvenvを使っていこうという感じに足並みをそろえることにした。
NVIDIA Docker
要はCUDA+cudnnの各バージョン諸々設定済みイメージみたいなやつ。
既存のコードを実行するときに悩まされるのが各種ライブラリのバージョン依存性であり、それだけならAnacondaやvenvで何とかなるのだが、バージョンによってCUDAやcudnnのバージョンまでご指定が入ると話はさらにややこしくなる。
そんな感じでCUDAのバージョンでイライラしたことが割とここ1年半位で何度かあり、それまでは存在は知ってたけど普通にセットアップするより最初が煩雑そうに見えたので、あまり使いたいとも思っていなかったNVIDIA Dockerが気になり始めている。画像生成と大規模言語モデル文脈で学習済みモデルどんどん落として動かすみたいな仕草がここ数年で本当に大衆化したと思っていて、この流れからするとまぁ少なくともNoelはこっちかな、という気がしている。
Kotsumeの今後
正直最初に述べた実験のサブ機としての責務はほぼ終わってしまったので、今後どうしようかなぁという感じ。自宅の諸々モニタリングしたりするハブにしたり、自宅 (or VPNつなげてるとき) のみ見える簡素なWebアプリっぽいのおいてあげたり、みたいな用途にでも使おうかなという気がしている。来年のアドベントカレンダーまでに何か稼働してなかったら処分します(という縛りプレイ)。
終わりに
リモートから触れる自室の計算機周りの環境の現状とこれからについて簡単に紹介しました。こんな雑なノマド環境だったけど、学位が生えてきて良かったです。