Flux 2 Klein 순수 C 기반 추론

1 day ago 5

  • FLUX.2-klein-4B 모델을 이용해 텍스트나 이미지를 입력으로 이미지를 생성하는 순수 C 구현체
  • 외부 의존성 없이 동작하며, 선택적으로 BLAS 또는 Metal 가속을 통해 최대 30배 속도 향상 가능
  • Qwen3-4B 텍스트 인코더가 내장되어 별도의 임베딩 계산 과정이 필요 없음
  • 텍스트-이미지이미지-이미지 변환을 모두 지원하며, 명령행 인터페이스와 C 라이브러리 API 제공
  • Python 런타임이나 PyTorch 없이도 실행 가능해, 경량 추론 환경과 오픈소스 AI 접근성 확대에 의미

프로젝트 개요

  • FLUX.2-klein-4B는 Black Forest Labs의 이미지 생성 모델로, 텍스트 프롬프트나 기존 이미지를 입력받아 새로운 이미지를 생성
  • 전체 코드가 표준 C 라이브러리만으로 작성되어 있으며, MPS(Apple Metal)BLAS(OpenBLAS) 가속을 선택적으로 지원
  • 모델은 HuggingFace에서 약 16GB 용량으로 다운로드 가능하며, 구성 요소는 VAE(300MB) , Transformer(4GB) , Qwen3-4B 인코더(8GB) , Tokenizer로 구성

주요 기능

  • Zero dependencies: 외부 라이브러리 없이 독립 실행 가능
    • BLAS 사용 시 약 30배 속도 향상, macOS에서는 Apple Accelerate, Linux에서는 OpenBLAS 사용 가능
  • Metal GPU acceleration: Apple Silicon 환경에서 자동 활성화
  • Text-to-image: 텍스트 프롬프트로 이미지 생성
  • Image-to-image: 기존 이미지를 프롬프트에 따라 변환
  • Integrated text encoder: Qwen3-4B 인코더 내장, 외부 임베딩 불필요
  • Memory efficient: 인코딩 후 자동으로 인코더 메모리 해제, 약 8GB 절감

사용 예시

  • 텍스트에서 이미지 생성 ./flux -d flux-klein-model -p "A fluffy orange cat sitting on a windowsill" -o cat.png
  • 이미지 변환 ./flux -d flux-klein-model -i photo.png -o painting.png -p "oil painting style" -t 0.7
    • -t 값은 변환 강도를 제어하며, 0.0은 원본 유지, 1.0은 완전 재생성

모델 구조 및 성능

  • Transformer: 5개의 더블 블록과 20개의 싱글 블록, 3072 히든 차원, 24 어텐션 헤드
  • VAE: AutoencoderKL, 128 잠재 채널, 8배 공간 압축
  • Text Encoder: Qwen3-4B, 36층, 2560 히든 차원
  • 추론 단계: 4단계 샘플링으로 고품질 결과 생성
  • 메모리 요구량
    • 텍스트 인코딩: 약 8GB
    • 디퓨전: 약 8GB
    • 최대 피크: 16GB (인코더 해제 전)
  • 성능 벤치마크 (Apple M3 Max, 128GB RAM)
    • 512×512: MPS 49.6초, BLAS 51.9초, PyTorch MPS 5.4초
    • 256×256: MPS 32.4초, BLAS 29.7초, PyTorch MPS 3.0초
    • 64×64: MPS 25.0초, BLAS 23.5초, PyTorch MPS 2.2초
    • 순수 C 백엔드는 매우 느리며 테스트용으로만 적합

빌드 및 실행

  • 백엔드 선택
    • make mps: macOS Apple Silicon (가장 빠름)
    • make blas: Intel Mac 또는 Linux (OpenBLAS 필요)
    • make generic: 순수 C, 의존성 없음 (느림)
  • 모델 다운로드 pip install huggingface_hub python download_model.py
  • 출력 해상도는 최대 1024×1024, 최소 64×64, 16의 배수 권장

C 라이브러리 API

  • 모델 로드 및 해제
    • flux_load_dir(path) / flux_free(ctx)
  • 이미지 생성 및 변환
    • flux_generate(ctx, prompt, params)
    • flux_img2img(ctx, prompt, input, params)
  • 이미지 입출력
    • flux_image_load(path) / flux_image_save(img, path)
  • 유틸리티
    • flux_set_seed(seed)로 재현성 확보
    • flux_get_error()로 오류 메시지 확인
    • flux_release_text_encoder(ctx)로 메모리 수동 해제 가능

라이선스 및 기타 정보

  • MIT 라이선스로 공개
  • 저장소 언어 구성: C 93.9% , Objective-C 3.5% , Makefile 1.7% , Python 0.9%
  • 별점 446개, 포크 20개로 활발한 커뮤니티 관심 확보

Read Entire Article