ClipProj : remplacer l'encodeur 32B de MiniMax H3 par un 4B

ComfyUI Wikinews

Un nœud ComfyUI remplace l'encodeur Qwen3-VL-32B (15,7 Go) de MiniMax H3 par un Qwen3-VL-4B avec projection apprise, réduisant la VRAM à 4,5 Go.

ComfyUI-ClipProj est un nouveau nœud personnalisé qui remplace l'encodeur de texte Qwen3-VL-32B de MiniMax H3 par un Qwen3-VL-4B beaucoup plus compact, accompagné d'une projection linéaire apprise, ce qui réduit l'empreinte VRAM du conditionnement de 15,7 Go à 4,5 Go (matrices de projection sur Hugging Face). Le DiT, les VAE et l'échantillonneur restent inchangés : le nœud renvoie un objet qui se comporte comme le CLIP officiel, et s'insère donc directement dans l'entrée clip existante, sans recâblage.

Pipeline MiniMax H3 complet conditionné par un Qwen3-VL-4B projeté

Le pipeline complet : encodeur, projection, conditionnement, échantillonnage, décodage et sortie vidéo (examples/minimax_h3_clipproj.json).

Pourquoi cela économise autant de VRAM

MiniMax H3 utilise un Qwen3-VL-32B tronqué à 50 couches (15,7 Go en NVFP4), uniquement pour transformer un prompt en tenseur de conditionnement [seq, 5120]. ClipProj le remplace par un Qwen3-VL-4B (2 560 dimensions) plus une application linéaire apprise vers l'espace à 5 120 dimensions attendu par le DiT :

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

Mémoire de l'encodeur mesurée :

Configuration de l'encodeurVRAM
Qwen3-VL-32B d'origine (NVFP4)15,7 Go
Qwen3-VL-4B + ClipProj (bf16)8,3 Go
Qwen3-VL-4B + ClipProj (fp8)5,2 Go
Qwen3-VL-4B + ClipProj (int8_convrot)4,5 Go

Comment la projection est apprise

Les encodeurs 4B et 32B partagent le même tokenizer (151 936 tokens), donc un prompt produit des tokens identiques aux mêmes positions dans les deux. Cela rend une correspondance position par position apprenable. La calibration est une régression ridge, pas un entraînement : il s'agit d'encoder N prompts avec les deux modèles, d'accumuler XᵀX et XᵀY en streaming (mémoire constante), puis de résoudre. Pas de gradients, pas d'epochs, pas de taux d'apprentissage.

Les mesures de l'auteur (MEASUREMENTS.md) font état d'un cosinus inter-prompts d'environ 0,71 avec un corpus de 2 000 prompts. En génération réelle, la projection tient la route pour les prompts simples, les prompts multi-plans structurés (subject_definitions, plans avec timecode, overall_soundscape), et fl2va avec première et dernière image. Elle est également robuste au remplacement des poids de l'encodeur : une projection calibrée en bf16 fonctionne sur une variante fp8 abliterée et sur int8_convrot.

Utilisation dans ComfyUI

Installer le nœud :

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

Redémarrer ComfyUI. Il n'y a pas de requirements.txt : les nœuds n'importent que torch et les modules de ComfyUI lui-même. Au premier lancement, le dossier ComfyUI/models/clip_projections/ est créé ; déposez-y les matrices de projection (mmh3-4b-ClipProj*.safetensors, mmh3-8b-ClipProj*.safetensors). Des exemples de flux de travail se trouvent dans examples/ : faites glisser minimax_h3_clipproj.json sur la toile.

Exemple de réécriture de prompt avec ClipProj

Un exemple de flux de travail associant le petit encodeur à la réécriture structurée de prompts H3 (examples/rewrite_h3_prompt.json).

Statut

La version 0.1.4 du nœud libère la carte GPU avant de charger un encodeur de remplacement (ce qui corrige les pics de OOM lorsque deux encodeurs seraient sinon résidents simultanément), libère les caches de projection au rechargement et conserve les réseaux résiduels dans leur précision d'origine. Les matrices -mlp sont désormais en fp16 et deux fois plus légères (240 Mo pour la 4B, 288 Mo pour la 8B).

Le projet est explicitement une preuve de concept : construit et testé sur une seule configuration (Windows 11, NVIDIA RTX 3090 / 4070 / 3060, ComfyUI 0.31.0) avec une exploration volontairement limitée. Attendez-vous à des imperfections et à des changements non rétrocompatibles.

Disponibilité

Commentaires

Connectez-vous avec GitHub pour rejoindre la discussion.

Chargement des commentaires…
ClipProj : remplacer l'encodeur 32B de MiniMax H3 par un 4B | ComfyUI Wiki