모델별 실행 레시피

Qwen-Image 2.1 GGUF 실행: Unsloth 파일 3개부터 맞추기

Q4 파일이 4.2GB라면 꽤 가볍게 느껴집니다. 그런데 실행기를 열면 인코더와 VAE1를 또 고르라고 합니다. 받은 파일이 잘못된 것은 아닙니다. 그림을 만드는 본체, 문장을 읽는 인코더, 마지막 이미지를 복원하는 VAE가 따로 있기 때문입니다. 여기서는 Unsloth 배포본을 기준으로 서로 맞는 파일부터 준비해봅니다.

먼저 3개의 역할을 나눠두면 덜 헤맵니다

Unsloth Qwen-Image-2.1-GGUF2 저장소의 파일은 노이즈에서 이미지를 만들어가는 생성 본체입니다. 프롬프트를 읽는 역할은 별도의 Qwen3-VL-8B 인코더가 맡습니다.

VAE는 생성 과정에서 쓰던 압축 표현을 실제 픽셀로 바꿉니다. 본체가 정상이어도 다른 세대의 인코더나 VAE를 연결하면 로딩 오류가 나거나 결과가 깨질 수 있습니다.

파일이 작다는 이유보다 서로 맞는 조합인지가 먼저입니다.

Qwen-Image 2.1에서는 qwen_image_2.1_vae_bf16.safetensors를 사용합니다. 기존 Qwen-Image나 Wan 2.2에서 쓰던 VAE를 재활용하는 구성이 아닙니다.

인코더의 UD-Q4_K_XL도 생성 본체의 Q4_K_M과 다른 파일입니다. 이름 앞의 모델명과 파일 역할을 함께 적어두면 다음에 실행기를 바꿀 때 같은 파일을 중복해서 받는 일을 줄일 수 있습니다.

Unsloth GGUF 구성에 필요한 파일
역할 구분받을 파일파일 용량
생성 본체 Q4qwen-image-2.1-Q4_K_M.gguf4.2GB
텍스트 인코더 Q4Qwen3-VL-8B-Instruct-UD-Q4_K_XL.gguf5.15GB
이미지 복원 VAEqwen_image_2.1_vae_bf16.safetensors0.68GB

Unsloth GGUF 구성에 필요한 파일

생성 본체 Q4

받을 파일
qwen-image-2.1-Q4_K_M.gguf
파일 용량
4.2GB

텍스트 인코더 Q4

받을 파일
Qwen3-VL-8B-Instruct-UD-Q4_K_XL.gguf
파일 용량
5.15GB

이미지 복원 VAE

받을 파일
qwen_image_2.1_vae_bf16.safetensors
파일 용량
0.68GB
세 개의 모듈을 별도 받침에 나눠 놓은 작업대
본체, 인코더, VAE는 서로 다른 역할을 맡습니다.

Q4로 시작하되, 메모리가 남으면 Q8도 비교하세요

Q4_K_M은 생성 본체를 약 4.2GB로 줄여 여러 장비에서 시도하기 좋은 선택입니다. Q5_K_M은 약 5.39GB, Q6_K는 6.27GB, Q8_0은 7.64GB입니다. 작은 파일은 저장 공간과 가중치 메모리를 아끼지만, 양자화3를 풀어 계산하는 비용까지 없어지는 것은 아닙니다. 낮은 비트 수가 언제나 더 빠르고 품질도 그대로라는 뜻으로 받아들이지 않는 것이 좋습니다.

Unsloth의 방식은 민감한 부분에 더 높은 정밀도를 남기는 양자화입니다. 그래도 원본과 픽셀까지 같다는 보장은 없습니다. 내가 자주 쓰는 프롬프트와 seed를 고정한 뒤 작은 글자, 얼굴 윤곽, 반복 무늬를 비교해보세요. Mac 공개 기록에서는 1K에서 Q8이 Q4보다 빨랐던 조합도 있습니다. RAM4이 충분하면 파일 크기만 보고 Q4로 고정할 이유는 없습니다.

파일을 받을 때는 전체 저장소 대신 필요한 것만

아래 명령은 Hugging Face의 hf 도구가 설치된 환경에서 실행합니다. 모델 저장소 전체를 받지 않고 본체 Q4, 인코더 Q4, VAE만 받아 models 폴더 아래에 둡니다. 인증이나 라이선스 동의가 요구되면 해당 저장소 화면에서 먼저 처리하세요. 이미 받은 파일이 있다면 다시 받을 필요 없이 다음 실행 명령의 경로를 실제 저장 위치로 바꾸면 됩니다.

이 세 파일의 디스크 용량을 합치면 약 10GB입니다. 다운로드에 필요한 공간과 실행 중 필요한 메모리는 다르므로, 디스크에 10GB가 남아 있다고 곧바로 실행 가능한 것은 아닙니다. 압축 파일을 풀거나 변환본을 추가할 계획이라면 저장 공간도 더 남겨두세요. Mac에서는 시스템과 다른 앱도 같은 통합 메모리5를 사용한다는 점을 함께 봐야 합니다.

필요한 세 파일 받기
hf download unsloth/Qwen-Image-2.1-GGUF qwen-image-2.1-Q4_K_M.gguf --local-dir models
hf download unsloth/Qwen3-VL-8B-Instruct-GGUF Qwen3-VL-8B-Instruct-UD-Q4_K_XL.gguf --local-dir models
hf download unsloth/Qwen-Image-2.1-FP8 vae/qwen_image_2.1_vae_bf16.safetensors --local-dir models
VAE는 models/vae 하위 폴더에 저장됩니다.

stable-diffusion.cpp에서 첫 한 장 만들기

sd-cli6는 stable-diffusion.cpp의 실행 파일입니다. Qwen-Image 2.1 지원이 들어간 버전과 장비에 맞는 CUDA7 또는 Metal 빌드를 준비하고, 아래에서는 sd-cli가 명령 경로에 있다고 가정합니다.

Windows에서는 받은 sd-cli.exe의 실제 경로로 바꾸세요. 다운로드한 models 폴더가 있는 위치에서 실행하면 파일 경로를 덜 헷갈립니다.

이 명령은 로컬 파일을 만들며 외부 공개 서버를 열지 않습니다.

설정은 Unsloth 모델 카드의 20단계, CFG 6.0, Euler, 1024 정사각형을 출발점으로 삼았습니다. 이것은 sd.cpp용 예제이지 모든 실행기의 최적값은 아닙니다. Diffusers나 LightX2V의 40단계 결과와 시간을 직접 나란히 비교하려면 설정부터 맞춰야 합니다. 처음에는 한 장이 정상적으로 나오는지 확인하고, 그다음 단계 수나 해상도를 하나씩 바꿔보세요.

Q4 텍스트→이미지 실행
sd-cli --diffusion-model models/qwen-image-2.1-Q4_K_M.gguf \
  --vae models/vae/qwen_image_2.1_vae_bf16.safetensors \
  --llm models/Qwen3-VL-8B-Instruct-UD-Q4_K_XL.gguf \
  -p "A green ceramic teapot on an oak table, soft window light, simple cream background" \
  --steps 20 --cfg-scale 6.0 --sampling-method euler \
  -W 1024 -H 1024 --diffusion-fa -o qwen21-first.png
메모리가 부족하면 sd.cpp의 --offload-to-cpu 경로를 확인하고, 먼저 해상도를 낮춰보세요.
블록을 넣고 빈 공간을 남겨둔 서랍과 컴퓨터
파일이 들어간 뒤에도 작업할 공간이 남아야 합니다.

12~16GB에서 시작할 때, 줄이는 순서가 중요합니다

처음부터 2K 출력이나 여러 장 동시 생성을 선택하지 마세요. 한 장, 1024 이하, Q4와 오프로딩8으로 시작하고 다른 GPU9 작업은 잠시 멈추는 편이 낫습니다. 그래도 메모리가 부족하면 본체 비트 수만 더 낮추기 전에 인코더가 어디에 올라가는지 확인하세요. 본체를 줄여도 큰 인코더가 같은 GPU에 남아 있으면 기대한 만큼 여유가 생기지 않습니다.

오프로딩은 부족한 메모리를 다른 곳으로 옮겨 실행 가능성을 넓히는 방식이지 무료 가속 기능이 아닙니다. CPU10 RAM 용량과 전송 속도 때문에 대기가 늘 수 있습니다. 특히 Mac에서 스왑이 늘어나면 SSD11 공간이 충분해도 체감이 나빠집니다. 사이트가 낮은 메모리 조합에 시간을 표시하지 않는 경우는 실행 불가능을 단정해서가 아니라, 그 스왑 시간을 일정한 숫자로 약속하기 어렵기 때문입니다.

편집을 추가한다면 비전 파일까지 맞춰야 합니다

텍스트 생성이 성공한 뒤 사진을 넣었는데 오류가 난다면 비전 프로젝터를 확인하세요. sd.cpp 문서는 GGUF 인코더로 편집할 때 별도의 mmproj 파일을 --llm_vision으로 전달하도록 안내합니다. 텍스트 인코더와 같은 모델용 프로젝터를 선택해야 하며, 배포처마다 파일명이 다를 수 있습니다. 생성 본체 GGUF를 다시 받는 것만으로 해결되는 문제가 아닙니다.

참조 사진은 -r로 전달하고 여러 장이면 -r을 반복합니다. 우선 한 장에서 배경만 바꾸는 요청으로 실행 경로를 확인하세요. 투명 이미지는 알파 채널을 남기는 PNG나 WebP로 저장해야 합니다. 사용 중인 ComfyUI 노드나 데스크톱 앱이 같은 기능을 아직 제공하지 않으면, 모델 지원과 앱 지원을 구분해서 해당 버전의 워크플로를 기다리거나 지원되는 실행기를 선택해야 합니다.

찻주전자 이미지와 출력물이 놓인 노트북 책상
먼저 한 장을 완성하고 조건을 하나씩 바꿔봅니다.

잘 돌아가면 설정을 남기고, 그다음 장비를 비교하세요

첫 실행에서는 모델을 읽고 메모리에 올리는 시간이 섞입니다. 가능하면 같은 앱에서 두 번째 이후의 생성 시간을 세 번 이상 기록하고 중앙값을 보세요. 명령마다 프로그램을 종료하는 sd-cli의 전체 실행 시간과, 모델이 올라간 서버에서 한 장을 만드는 시간은 구분해야 합니다. 로그에 나오는 생성 구간을 따로 기록하면 다음 업데이트가 빨라졌는지 비교하기 쉽습니다.

모델 파일명, 실행기 버전, 인코더, VAE, 해상도, 단계 수, seed와 오프로딩 여부를 같이 남겨두세요. 느린 이유가 GPU인지 설정인지 구분하지 못한 채 장비를 바꾸면 비슷한 문제를 다시 만날 수 있습니다. 이 글은 설치 경로를 안내하며 직접 측정한 성능을 주장하지 않습니다. 라이선스는 원본과 같은 연구용 조건이므로, 상업 작업이라면 별도 허가 여부도 먼저 확인해야 합니다.

용어 각주

  1. VAEVariational Autoencoder의 약자입니다. 입력을 압축된 잠재 표현으로 바꾸거나, 그 표현에서 결과를 복원하는 데 쓰입니다.

    본문으로 돌아가기
  2. GGUF모델 정보를 담는 파일 형식으로 llama.cpp 계열 도구에서 널리 사용됩니다. 파일 형식만으로 특정 하드웨어 호환성이나 속도가 보장되지는 않습니다.

    본문으로 돌아가기
  3. 양자화모델의 수치를 더 적은 비트로 표현하는 방법입니다. 메모리 사용량과 함께 정확도나 실행 속도도 달라질 수 있으며, 영향은 형식과 구현에 따릅니다.

    본문으로 돌아가기
  4. 시스템 RAM프로그램이 실행되는 동안 데이터를 임시로 보관하는 시스템 메모리입니다. 저장장치나 독립 GPU의 VRAM과는 다릅니다.

    본문으로 돌아가기
  5. 통합 메모리CPU와 GPU가 같은 물리 메모리 풀을 공유하는 구조입니다. 메모리 용량이 자동으로 늘어나는 것은 아니며, 실제 사용 가능량은 시스템에 따라 다릅니다.

    본문으로 돌아가기
  6. CLICommand-Line Interface의 약자입니다. 터미널에 명령어를 입력해 프로그램을 조작하는 방식입니다.

    본문으로 돌아가기
  7. CUDANVIDIA GPU에서 범용 계산을 실행하기 위한 소프트웨어 플랫폼입니다. CUDA용으로 만든 프로그램은 다른 GPU에서 그대로 동작한다고 보장되지 않습니다.

    본문으로 돌아가기
  8. 오프로딩메모리가 부족할 때 모델 데이터 일부를 GPU 메모리에서 시스템 RAM이나 저장장치로 옮겨 처리하는 방식입니다. 데이터 이동이 추가됩니다.

    본문으로 돌아가기
  9. GPU많은 계산을 병렬로 처리하는 프로세서입니다. AI 모델 실행에서는 모델 계산을 맡습니다.

    본문으로 돌아가기
  10. CPU컴퓨터에서 일반적인 프로그램 명령을 실행하는 중앙 처리 장치입니다. AI 작업에서는 GPU 등 다른 프로세서와 역할을 나누기도 합니다.

    본문으로 돌아가기
  11. SSD플래시 메모리를 사용하는 데이터 저장 장치입니다. 전원이 꺼져도 데이터가 보존되며, 시스템 메모리와는 용도가 다릅니다.

    본문으로 돌아가기