ローカルLLM 2.0

ローカルLLM 2.0
Devin と遊ぶ機会があり、コレは体験としてヤバい!!!! となったので久々にローカルLLM環境をちゃんと整備する機運が高まった
Devin のワークフローとして、指示を出したらしばらくはほっとけばいいので、token/sec はあまり気にしなくてよいのでそういう意味で不用意にエージェントにAPIキーを渡してAI破産するよりは「妙に電気代たけえな?」の方がマシかなと
command-r-plus あたりの時分は、メモリマシマシの mac を買うのがいいのかなあ、などと考えていたのだけど https://github.com/exo-explore/exo ていうのがあって、家のあらゆるマシンをクラスタリングできるぞってことで試してみることに
現代の Pythonrye ってやつで管理するのがモダンらしいので rye で最新ぐらいの Python をいれておく
venv ってやつを使うと仮想環境?みたいのを作れるらしいので一応 venv で環境を切っておく
あとは exo の README の通りやると mac 複数台のクラスタリングっぽいものは動いてる感じがした
Windows のマシンにはそれなりの Nvidia のグラボが刺さってるわけなので、それはさすがに Windows のマシンも参加させたいぞってことで Windows からもプールに参加しようとしたんだけど、これがなかなか沼だった
そもそも exo が Windows のネイティブサポートを諦めていて、wsl 経由で使ってな、とのことで wsl の中に環境を作らないといけない
で、まず wsl を最新にしとかないといけなかった(1敗)
wsl2 だし問題ないだろ、とおもってたけど自分が前に wsl 触ってた時から大幅にいろいろと変更があったようだ
wsl の中に CUDA やらなんやらのドライバをインストールしてはいけない(2敗)
wsl では Windows 側のドライバを使うようになってるそうで、素朴な linux だとおもって CUDA まわりのドライバをいれると so が読めなかったりなんだりで死ぬ
開けるポートの問題(3敗)
コードを読むと(w/ copilot)、デフォルトでは UDP のディスカバリのポートが5678になっているので、5678が開いていればいいのだろう、と Windows の firewall の設定を変更するのだが、Windows のマシンからは mac たちが見えているものの mac から Windows が見えねえになってしまう
DEBUG フラグをつけて、挙動を確認していると、どうやら SingletonDownloader? というものが起動時に適当なポートを選んで何やら通信に使っているらしい
mac 側のログをみて、どのポートにアクセスしようとしているのか確認して、windows 側で当該ポートを開けると mac からも healthy node として認識されてトポロジーに追加されるようになった
晴れて我が家の持てる力を全て振り絞ったコンピューティングリソースで計算できるようにはなったのだが、薄々勘付いていたコトとして mac のノードでは MLX のモデルをダウンロードしていて、wsl のノードでは Llama のモデルをダウンロードしていて、コレって相互に補完するようなレイヤーがあったりするのかしら?と一縷の望みをかけて「hello」って送ってみたらぶっ壊れたレスポンスが延々返ってきて終わった
一旦 mac だけのクラスターに戻して、でっかいモデルはど〜よ?と試しに Llama 3.3 70B なるものをロードしてみるとさすがに全然無理だった
他のクラスタリングソリューションをみてみると、Ollamak8s でクラスタリングできる helm はあるみたい
家のサーバは Proxmox で管理しているのだけど、k8s とまではいかずとも k3sk0s の環境を構築してもいいのかもなあ....