Apple Silicon MacをローカルLLMサーバとして検討
生成AI・LLMがローカルで動かせる時代が来ています。
自分用のマシンを考えた時、WindowsやLinuxのデスクトップ機を用意してNVIDIAのGPUを付けたり、あるいは普段使いのThunderbolt 4ラップトップに外付けGPUというのも少し考えました。
しかしながら、いまから暑い夏なので低消費電力と、大きめのモデルを試せる大容量VRAMを兼ね備えたApple Silicon Macが魅力的です。
LLM用途の、特に生成速度で考えた時、GPUのコア数だけでなくメモリバンド幅が大きく効いてくるようです。
Apple Siliconチップには、M1~M4の世代があり、それぞれに無印、Pro、Max、Ultraのグレードがあります。
メモリバンド幅はグレードの方で決まり、無印で100 GB/s前後、Proで200 GB/s前後、Maxが400 GB/s、Ultraが800 GB/sと倍々ゲームになっています(無印とProの古い世代はこれより遅めです)。
メモリバンド幅は世代が変わってもほぼ同じ、つまり、たとえばM1無印とM4無印、M1 MaxとM4 Maxが、ほぼ同じなのです。
型落ちや中古品も含めて、LLMのコスパをねらうのであれば、世代の新しさよりもできるだけ上位のグレードを選ぶのが優先です。
グレードと併せてあとはユニファイドメモリの容量との兼ね合いで考えることになります。
ストレージはいざとなればThuderbolt 4で外付けにすればよいので最低限で良いです。
M1世代でもM1 UltraのMac Studioはさすがに中古でも40万円超とまだまだ高いですが、M2 Max 32GBやM1 Max 64GBであれば20万以下や30万円以下のものがありそうです。
MacBook Proはディスプレイがある分だけ少し割高になりますが、流通量の面からMac Studioよりも選びやすそうです。
MacBookのスリープをクラムシェルモードでなくても解除したい
MacBookを単体で使うのであれば気にしなくてよいのですが、他のマシンからLLMサーバとして使う場合には、自動スリープが仇になります。
MacBookはディスプレイを閉じるとすぐにスリープするようになっていますが、電源・外部ディスプレイ・キーボードやマウスを接続すれば、クラムシェルモードという特別のモードになって、スリープせずに使えるようになります。
LLMサーバとして使うためだけに、この3つを常時接続しておくのは、デスクスペースを考えると勘弁してほしいところです。
そこでなにか設定がないかと探してみたところ、次の2つの方法があることが分かりました(参照サイト: macos - Prevent Mac from sleeping when lid closed on Mojave / Catalina - Ask Different https://apple.stackexchange.com/questions/361384/prevent-mac-from-sleeping-when-lid-closed-on-mojave-catalina/361398#361398 )。
pmsetコマンドでシステムレベルの自動スリープ設定を変更する方法
次のコマンドでシステムレベルのスリープ設定をOFFにできます。
$ sudo pmset -a disablesleep 1
スリープ設定を元に戻すのは次のコマンドです。
$ sudo pmset -a disablesleep 0
現在の設定値を確認するには次のようにします。
$ pmset -g | grep -i sleep ... SleepDisabled 0 ... $
なお、pmsetによる自動スリープOFFは電源につないでいなくても効きますので、バッテリの残量に注意が必要です。
バッテリ残量を見るのは次のコマンドです。
$ pmset -g ps
caffeinateコマンドで一時的に自動スリープを解除する方法(電源接続時)
こちらは電源につないでいる場合にのみ有効な方法です。
$ caffeinate -i -s &
このコマンドが実行されている間は自動スリープが禁止されます。
非特権ユーザでも実行できてしまうので、ちょっと怖いですね。
この状態はpmsetコマンドで次のように表示されます。
$ pmset -g | grep -i sleep ... sleep 0 (sleep prevented by caffeinate, caffeinate) ... $
以上、自分への備忘録も兼ねて。
この記事は人力で書きました。