Flux2 Klein은 Qwen3 텍스트 인코더의 세 개의 은닉층(9, 18 및 27)만 읽지만, 표준 로더들은 전체 36개 레이어 모델과 최종 정규화(final norm), 그리고 LM head를 구축하고 실행합니다. 게다가 ComfyUI-GGUF는 GGUF를 로드할 때 전체 토큰 임베딩 테이블을 fp16으로 양자화 해제(dequantizes)합니다.
저는 Klein이 실제로 사용하는 부분만 구축하는 작은 로더를 만들었습니다: 36개 대신 27개 레이어, 최종 정규화 없음, LM head 없음. GGUF 토큰 임베딩은 양자화된 상태로 유지됩니다: 프롬프트의 행(rows)만 양자화 해제됩니다.
동일한 조건화(Same conditioning), 비트 단위 비교 (CLIPLoader (GGUF) 대비 최대 절대 차이 0.0).
숫자 (Qwen3-8B Q4_K_M, Klein 9B, RTX 4090, 512 토큰 프롬프트):
| CLIPLoader (GGUF) | Klein CLIP Loader (Pruned) |
|---|
| TE weights on GPU | 5.51 GB | 3.20 GB |
| Peak VRAM during encode | 5.97 GB | 3.62 GB |
이것은 DiT, LoRA 스택 또는 ComfyUI 옆에서 실행되는 LLM에 약 2.3 GB를 절약해줍니다. 8GB 카드에서는 오프로딩(offloading) 여부를 결정하는 차이가 될 수 있습니다.
설치 방법:
cd ComfyUI/custom_nodes
git clone https://github.com/dchatel/comfyui_davcha_flux2klein
그런 다음 텍스트 인코더 로더를 Klein CLIP Loader (Pruned) (카테고리 davcha/flux2klein)로 교체하세요. GGUF 파일은 ComfyUI-GGUF가 설치되어 있어야 합니다. 다른 의존성은 없습니다.
Qwen3-8B Q4_K_M (Klein 9B)으로 테스트했습니다. Qwen3-4B (Klein 4B) 및 safetensors 경로는 동일한 설정을 사용하지만, 제가 아직 직접 검증하지는 않았습니다. 보고서 환영합니다.
저장소: https://github.com/dchatel/comfyui_davcha_flux2klein
참고 사항: 이 과정을 프로파일링하는 동안 ComfyUI가 모델을 언로드할 때 재로딩 시간보다는 참조 횟수와 크기를 기준으로 선택한다는 것을 알게 되었습니다. 대신 측정된 재로딩 시간을 기준으로 언로드 후보를 순위 매기는 PR을 열었습니다 (Klein + 로컬 LLM 워크플로우에서 실행당 13.6초 → 6.7초): https://github.com/Comfy-Org/ComfyUI/pull/17363 (아직 병합되지 않았으며, 피드백 환영합니다).
제출자: /u/Occsan [링크] [댓글]