tags : ComfyUI, Apple Silicon, PyTorch

概要

ComfyUI を Apple Silicon Mac(M1 Pro 32GB)でローカル実行するための構成メモ。 環境構築の「なぜそうするのか」を記録する。手順は audio-reactive-visuals-lab の docs/roadmap.md を参照。

構成図

audio-reactive-visuals-lab/              ← プロジェクトリポジトリ
├── scripts/comfyui-start.sh             ← 起動スクリプト
├── workflows/                           ← ワークフローJSON
└── experiments/                         ← 実験記録
 
$(ghq root)/github.com/
├── Comfy-Org/ComfyUI/                   ← ComfyUI 本体(ghq 管理、共有)
│   ├── .venv/                           ← Python 仮想環境(uv)
│   ├── models/                          ← モデルファイル
│   └── custom_nodes/
│       └── ComfyUI-Manager → (symlink)
└── ltdrdata/ComfyUI-Manager/            ← ghq 管理

なぜ ghq で管理するのか

ComfyUI はプロジェクト固有のツールではなく汎用の画像生成基盤。 ghq で管理することで複数プロジェクトから共有でき、ComfyUI 自体のバージョン管理も独立する。 プロジェクト固有のもの(起動スクリプト、ワークフロー、実験記録)だけをプロジェクトリポジトリに置く。

カスタムノードも同様に ghq でクローンし、custom_nodes/ にシンボリックリンクを張る。

なぜ uv + venv なのか

ComfyUI 専用の隔離された Python 環境を .venv/ に作る。 Node.js の node_modules に近い概念で、ここにインストールしたパッケージが他プロジェクトに影響しない。 uv は Rust 製で pip より高速、ロックファイル(uv.lock)による再現性もある。

Apple Silicon(MPS)固有の設定

PYTORCH_MPS_HIGH_WATERMARK_RATIO=0.0

PyTorch が MPS(Metal Performance Shaders = Apple GPU)のメモリを必要な分だけ使えるようにする。 デフォルトだとメモリ上限が保守的に設定されていて、大きなモデル読み込み時にメモリ不足になる。

PYTORCH_ENABLE_MPS_FALLBACK=1

MPS が対応していない演算(一部の複雑な計算)を自動的に CPU で代替実行する。 これがないと未対応の演算でエラーになる。

—force-fp16

16ビット浮動小数点で計算。32ビット(fp32)と比べてメモリ使用量が半分になる。 M1 Pro 32GB で AnimateDiff + IPAdapter + ControlNet の同時使用を可能にするために必須。 画質への影響は実用上無視できる。

—use-split-cross-attention

アテンション計算(画像生成の中核処理)を分割して実行する。 一度に大きなメモリを確保せず、分割して計算することでメモリ消費を抑える。

PyTorch 関連パッケージ

torch : PyTorch 本体。ComfyUI の推論エンジン。画像生成の計算はすべてこれが行う

torchvision : 画像処理ユーティリティ

torchaudio : 音声処理。Yvann-Nodes の音声解析で使用

ComfyUI-Manager

カスタムノードの管理ツール。GUI からワンクリックでカスタムノードをインストール・更新できる。 Yvann-Nodes など必要なカスタムノードを入れるときに使う。