ClipProj: замена текстового энкодера MiniMax H3 с 32B на 4B в ComfyUI

ComfyUI Wikinews

Пользовательская нода ComfyUI заменяет энкодер Qwen3-VL-32B (15,7 ГБ) из MiniMax H3 на Qwen3-VL-4B с обученной проекцией, снижая расход VRAM до 4,5 ГБ.

Новая пользовательская нода ComfyUI-ClipProj заменяет текстовый энкодер Qwen3-VL-32B из MiniMax H3 на гораздо меньший Qwen3-VL-4B с обученной линейной проекцией, сокращая объём VRAM, занимаемый условием, с 15,7 ГБ до 4,5 ГБ (матрицы проекций на Hugging Face). DiT, VAE и сэмплер остаются нетронутыми: нода возвращает объект, который ведёт себя как официальный CLIP, поэтому она подключается к существующему входу clip без перекоммутации.

Полный pipeline MiniMax H3, формирующий условие через проекцию Qwen3-VL-4B

Полный pipeline: энкодер, проекция, условие, сэмплирование, декодирование и вывод видео (examples/minimax_h3_clipproj.json).

Почему это экономит так много VRAM

MiniMax H3 использует Qwen3-VL-32B, усечённый до 50 слоёв (15,7 ГБ в NVFP4), только для того, чтобы превратить промпт в tensor условия размерности [seq, 5120]. ClipProj заменяет его на Qwen3-VL-4B (2560 измерений) с обученным линейным отображением в 5120-мерное пространство, которое ожидает DiT:

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

Замеры памяти энкодера:

Конфигурация энкодераVRAM
Оригинальный Qwen3-VL-32B (NVFP4)15,7 ГБ
Qwen3-VL-4B + ClipProj (bf16)8,3 ГБ
Qwen3-VL-4B + ClipProj (fp8)5,2 ГБ
Qwen3-VL-4B + ClipProj (int8_convrot)4,5 ГБ

Как обучается проекция

Энкодеры 4B и 32B используют один и тот же tokenizer (151 936 токенов), поэтому промпт даёт одинаковые токены на одинаковых позициях в обеих моделях. Это делает попозиционное отображение обучаемым. Калибровка выполняется с помощью гребневой регрессии, а не обучения: закодируйте N промптов обеими моделями, накопите XᵀX и XᵀY в потоковом режиме (с постоянным расходом памяти), затем решите систему. Никаких градиентов, эпох и скорости обучения.

Измерения автора (MEASUREMENTS.md) показывают косинусное сходство между промптами ~0,71 на корпусе из 2 000 промптов. В реальной генерации проекция хорошо показывает себя на простых промптах, структурированных многосегментных промптах (subject_definitions, кадры с таймкодами, overall_soundscape) и fl2va с первым и последним кадром. Она также устойчива к замене весов энкодера: проекция, откалиброванная на bf16, работает с abliterated 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*.safetensors, mmh3-8b-ClipProj*.safetensors). Примеры рабочих процессов находятся в examples/: перетащите minimax_h3_clipproj.json на холст.

Пример переписывания промпта в ClipProj

Пример рабочего процесса, в котором маленький энкодер сочетается со структурированным переписыванием H3-промптов (examples/rewrite_h3_prompt.json).

Статус

Версия 0.1.4 ноды освобождает видеокарту перед загрузкой заменяющего энкодера (исправляя скачки OOM, когда два энкодера иначе находились бы в памяти одновременно), очищает кэши проекций при перезагрузке и сохраняет остаточные сети в их исходной точности. Матрицы -mlp теперь хранятся в fp16 и вдвое меньше по размеру (240 МБ для 4B, 288 МБ для 8B).

Проект прямо заявлен как доказательство концепции: он создан и протестирован на одной конфигурации (Windows 11, NVIDIA RTX 3090 / 4070 / 3060, ComfyUI 0.31.0) при намеренно ограниченном объёме экспериментов. Ожидайте шероховатостей и ломающих изменений.

Доступность

Комментарии

Войдите через GitHub, чтобы участвовать в обсуждении.

Загрузка комментариев…
ClipProj: замена текстового энкодера MiniMax H3 с 32B на 4B в ComfyUI | ComfyUI Wiki