2025-06-19

MacBookをサーバ的に使うためにスリープを禁止したい

Apple Silicon MacをローカルLLMサーバとして検討

生成AI・LLMがローカルで動かせる時代が来ています。
WindowsやLinuxのデスクトップ機を用意してNVIDIAのGPUを付けたり、あるいは普段使いのThunderbolt 4ラップトップに外付けGPUというのも少し考えました。
しかしながら、いまから夏を迎えると考えるとApple Silicon Macの低消費電力と大容量VRAMが魅力的です。

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のコスパをねらうのであれば、世代の新しさよりもグレードの高さが優先です。
それと併せてユニファイドメモリの容量との兼ね合いで考えればよいことになります。
さすがに中古でもM1 UltraのMac Studioは40万円超とまだまだ高いですが、M2 Max 32GBやM1 Max 64GBであれば20万以下や30万円以下のものがありそうです。
ディスプレイの分だけ少し割高になりますがMac StudioよりもMacBook Proの方が流通量が豊富なので選びやすそうです。

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 sleep
...
  sleep      0 (sleep prevented by caffeinate, caffeinate)
...
$

以上、自分への備忘録も兼ねて書きました。