ClipProj: ComfyUIでMiniMax H3の32Bテキストエンコーダーを4Bに交換

ComfyUI Wikinews

ComfyUIのカスタムノードがMiniMax H3の15.7 GBのQwen3-VL-32Bテキストエンコーダーを、学習済みプロジェクション付きのQwen3-VL-4Bに置き換え、条件付けのVRAM使用量を4.5 GBに削減します。

ComfyUI-ClipProjは、MiniMax H3のQwen3-VL-32Bテキストエンコーダーを、はるかに小さいQwen3-VL-4Bと学習済みのリニアプロジェクションに置き換える新しいカスタムノードです。条件付けのVRAM使用量を15.7 GBから4.5 GBに削減します(プロジェクション行列はHugging Faceで公開)。DiT、VAE、サンプラーは変更されません。このノードは公式CLIPと同様に動作するオブジェクトを返すため、配線をやり直すことなく既存のclip入力にそのまま接続できます。

プロジェクション適用済みのQwen3-VL-4Bによって条件付けされた完全なMiniMax H3 pipeline

完全なpipeline: エンコーダー、プロジェクション、条件付け、サンプリング、デコード、ビデオ出力(examples/minimax_h3_clipproj.json)。

VRAMを大幅に節約できる理由

MiniMax H3は、プロンプトを[seq, 5120]の条件付けtensorに変換するためだけに、50レイヤーに切り詰められたQwen3-VL-32B(NVFP4で15.7 GB)を使用します。ClipProjはこれをQwen3-VL-4B(2560次元)と、DiTが期待する5120次元空間への学習済みリニアマップに置き換えます:

cond = ((h - mean_in) / std_in) @ W * std_out + mean_out

エンコーダーメモリの測定結果:

エンコーダー構成VRAM
オリジナルのQwen3-VL-32B(NVFP4)15.7 GB
Qwen3-VL-4B + ClipProj(bf16)8.3 GB
Qwen3-VL-4B + ClipProj(fp8)5.2 GB
Qwen3-VL-4B + ClipProj(int8_convrot)4.5 GB

プロジェクションの学習方法

4Bと32Bのエンコーダーは同じtokenizer(151,936トークン)を共有しているため、プロンプトは両方で同じ位置に同じトークンを生成します。これにより、位置ごとのマッピングを学習できます。キャリブレーションはトレーニングではなくリッジ回帰です。両方のモデルでN個のプロンプトをエンコードし、XᵀXXᵀYをストリーミング方式で蓄積(メモリは一定)してから解を求めます。勾配もエポックも学習率もありません。

作者の測定結果(MEASUREMENTS.md)では、2,000プロンプトのコーパスでプロンプト間コサイン類似度は約0.71と報告されています。実際の生成では、このプロジェクションは単純なプロンプト、構造化されたマルチショットプロンプト(subject_definitions、タイムコード付きショット、overall_soundscape)、最初と最後のフレームを使ったfl2vaでも十分に機能します。また、エンコーダーの重みを交換しても堅牢です。bf16でキャリブレーションされたプロジェクションは、アブリテーション済みのfp8バリアントやint8_convrotでも動作します。

ComfyUIでの使用方法

ノードをインストール:

cd ComfyUI/custom_nodes
git clone https://github.com/nicolab28/ComfyUI-ClipProj

ComfyUIを再起動します。requirements.txtはありません。ノードがインポートするのはtorchとComfyUI自身のモジュールのみです。初回起動時にComfyUI/models/clip_projections/フォルダーが作成されるので、プロジェクション行列(mmh3-4b-ClipProj*.safetensorsmmh3-8b-ClipProj*.safetensors)をそこに置きます。サンプルワークフローはexamples/にあります。minimax_h3_clipproj.jsonをキャンバスにドラッグしてください。

ClipProjのプロンプト書き換え例

小さなエンコーダーと構造化されたH3プロンプト書き換えを組み合わせたサンプルワークフロー(examples/rewrite_h3_prompt.json)。

ステータス

ノードのバージョン0.1.4では、置き換え用エンコーダーの読み込み前にGPUカードのメモリを解放します(2つのエンコーダーが同時に常駐することで発生するOOMスパイクを修正)。また、リロード時にプロジェクションキャッシュを解放し、残差ネットワークを保存時の精度に維持します。-mlp行列はfp16になり、サイズが半分になりました(4Bで240 MB、8Bで288 MB)。

このプロジェクトは明示的に**概念実証(proof of concept)**です。単一の環境(Windows 11、NVIDIA RTX 3090 / 4070 / 3060、ComfyUI 0.31.0)で構築・テストされており、意図的に探索範囲を限定しています。荒削りな部分や破壊的変更があることを想定してください。

入手方法

コメント

GitHubでサインインしてディスカッションに参加しましょう。

コメントを読み込み中…
ClipProj: ComfyUIでMiniMax H3の32Bテキストエンコーダーを4Bに交換 | ComfyUI Wiki