GLM-5.2를 로컬에서 실행하는 방법
2 hours ago
1
- Z.ai의 새 오픈 모델 GLM-5.2는 744B 파라미터, 40B 활성 파라미터, 1M 컨텍스트 윈도를 갖춘 대형 모델을 로컬에서 다루는 사례라는 점이 핵심임
- Unsloth는 Dynamic GGUF로 로컬 실행 경로를 제공하며, 권장 2-bit UD-IQ2_M quant는 239GB 디스크와 최소 245GB RAM급 환경을 요구함
- Dynamic 1-bit는 약 76.2% top-1 accuracy와 86% 크기 감소, Dynamic 2-bit는 약 82% accuracy와 84% 크기 감소를 보여 “작아진 비율만큼 성능이 나빠진다”는 해석과 다름
- 실행 방법은 Unsloth Studio와 llama.cpp 두 갈래이며, Studio는 MacOS·Windows·Linux에서 모델 검색·다운로드·실행, RAM offloading, multiGPU 감지를 지원함
- 긴 컨텍스트를 실제로 쓰려면 llama.cpp의 KV cache quantization으로 메모리를 줄여야 하며, q4_0는 약 3.5배, q4_1은 약 3.2배 긴 컨텍스트를 가능하게 함
GLM-5.2 모델 개요
- GLM-5.2는 Z.ai의 새 오픈 모델이며, Unsloth Dynamic GGUF를 통해 로컬 하드웨어에서 실행할 수 있음
- 모델 사양은 다음과 같음
- 전체 파라미터: 744B
- 활성 파라미터: 40B
- 최대 컨텍스트 윈도: 1,048,576
- long-horizon coding, reasoning, agentic tasks에서 SOTA 성능을 제공한다고 소개됨
- Artificial Analysis와 여러 벤치마크 기준으로 Claude 4.8 Opus, GPT-5.5, Gemini 3.1 Pro와 동급 성능을 보인다고 함
- Unsloth는 Z.ai로부터 day-zero access를 제공받았다고 밝힘
- GLM-5.2용 GGUF 모델 파일은 Hugging Face의 GLM-5.2-GGUF에서 받을 수 있음
권장 quant와 메모리 요구사항
- 접근성과 정확도 균형을 위해 2-bit dynamic quant인 UD-IQ2_M 사용을 안내함
- 디스크 사용량: 239GB
- 256GB unified memory Mac에 직접 들어감
- MoE offloading을 쓰면 1x24GB GPU + 256GB RAM에서도 잘 동작한다고 함
- 1-bit quant는 223GB RAM에 들어가며, 8-bit는 810GB RAM이 필요함
- 추론 하드웨어 요구사항 표에서 총 메모리는 RAM + VRAM 또는 unified memory를 뜻함
- 표시된 총 메모리 수치: 223GB, 245GB, 290–360GB, 372–475GB, 570GB, 810GB
- 최적 성능을 내려면 VRAM과 시스템 RAM을 합친 사용 가능 메모리가 quantized model file size를 충분히 넘어야 함
Thinking 모드와 샘플링 설정
- GLM-5.2는 3개의 thinking mode를 제공함
- non-thinking
- thinking High
- thinking Max
- 복잡한 작업에는 Max Thinking 사용을 권장함
- Unsloth Studio에서는 UI로 High/Max Thinking과 non-Thinking을 토글할 수 있음
- 대부분의 사용 사례용 설정은 다음과 같음
- temperature = 1.0
- top_p = 0.95
- 다른 모드에서는 top_p = 1.0
- GLM-5.2는 기본적으로 reasoning을 사용하며, reasoning_effort는 "high", "max" 또는 비활성화를 선택할 수 있음
- thinking 비활성화 예시는 다음과 같음
- 일반 셸: --chat-template-kwargs '{"enable_thinking":false}'
- Windows PowerShell: --chat-template-kwargs "{\"enable_thinking\":false}"
- llama.cpp에서도 --reasoning on 또는 --reasoning off를 사용할 수 있음
- reasoning effort 설정 예시는 다음과 같음
- --chat-template-kwargs '{"reasoning_effort":"max"}'
- --chat-template-kwargs '{"reasoning_effort":"high"}'
- --chat-template-kwargs '{"enable_thinking":false}'
Dynamic GGUF 정확도와 KLD 해석
- Unsloth는 GLM-5.2-GGUF quantization 정확도를 평가하기 위해 KLD(KL Divergence) 벤치마크를 사용함
- Dynamic 4-bit UD-Q4_K_XL과 Dynamic 5-bit UD-Q5_K_XL은 대부분 lossless라고 안내됨
- 더 작은 quant도 중요한 레이어는 higher precision으로, 덜 중요한 레이어는 low bits로 두는 동적 정밀도 배치 방식으로 동작함
- pure top-1% accuracy 기준 수치는 다음과 같음
- Dynamic 1-bit: 약 76.2% accuracy, 86% size reduction
- Dynamic 2-bit: 약 82% accuracy, 84% size reduction
- 정확도 비교: {b:76,82}
- 86% 작다는 말은 86% 나쁘다는 뜻이 아니며, Dynamic 1-bit는 전체 1.5TB 모델보다 약 24% 낮은 정확도라는 해석이 붙음
- “76% accuracy”는 “The capital of France is” 같은 질문에서 Paris 76%, Sydney 24%를 고른다는 뜻이 아님
- 해당 예시에서는 Paris가 항상 100%, Sydney가 0%라고 함
- 76% 수치는 전체 corpus의 filler words와 stop words 분포 변화까지 포함함
- “Create a novel” 프롬프트처럼 여러 올바른 시작이 가능한 경우에는 baseline과 quantized 모델의 토큰 분포가 달라질 수 있음
- baseline이 [I]를 100% 선택할 수 있고, quantized 모델이 [I] 76%, [The] 24%처럼 분포를 나눌 수 있음
- 이 수치는 24% 확률로 gibberish나 잘못된 출력을 낸다는 뜻이 아님
- KLD는 baseline인 BF16 또는 Q8_0 확률과 quantized version 확률 사이의 거리임
- quantization의 목표는 f(q(W))와 f(W) 사이의 KL divergence 평균을 최소화하는 것임
- f는 language model forward, q는 quantization operation, W는 모델 파라미터 또는 weights임
- KLD가 0이면 모델을 완벽히 재구성한 것임
- 전체 학습 corpus 예시인 15T tokens 전체에 대해 KLD를 실행하는 것은 비용이 커서, Unsloth는 mean KLD와 작은 대표 subset sampling으로 최적화함
- 99.9% KLD도 일반적으로 좋다고 하며, 4bit 이상부터 더 큰 uplift가 있어 massive out-of-distribution tasks에는 Dynamic 4-bit가 아마 가장 적합하다고 함
Unsloth Studio로 실행하기
- Unsloth Studio는 local AI용 오픈소스 web UI이며 GLM-5.2 실행을 지원함
- 주요 기능은 다음과 같음
- MacOS, Windows, Linux에서 로컬 모델 실행
- GGUF와 safetensor 모델 검색, 다운로드, 실행
- RAM offloading과 multiGPU setup 자동 감지
- llama.cpp를 통한 빠른 CPU + GPU inference
- 설치 명령은 다음과 같음
- 실행 명령은 다음과 같음
- HTTPS로 Studio를 안전하게 실행하는 방법도 제공됨
- Windows, Mac, Linux에서 unsloth studio --secure
- 무료 Cloudflare tunnel을 사용함
- 첫 실행 시 계정 보안을 위해 password를 만들고 이후 다시 sign in해야 함
- Studio Chat 탭에서 검색창에 GLM-5.2를 검색한 뒤 원하는 model과 quant를 다운로드함
- 모델 실행 전 충분한 compute가 있는지 확인해야 함
- Studio에서는 inference parameters가 자동 설정되어야 하지만, 사용자가 context length, chat template, 기타 설정을 수동으로 바꿀 수 있음
- 추가 정보는 Unsloth Studio inference guide에 있음
llama.cpp로 실행하기
- llama.cpp 튜토리얼은 UD-IQ2_M quant 실행을 다루며, 최소 245GB RAM이 필요함
- 빠른 로컬 inference를 위해 llama.cpp를 사용함
- GPU가 없거나 CPU inference만 원하면 -DGGML_CUDA=ON을 -DGGML_CUDA=OFF로 바꿈
- Apple Mac / Metal 기기는 -DGGML_CUDA=OFF로 진행하면 되며, Metal support는 기본 활성화되어 있음
- 빌드 절차는 다음 흐름임
- apt-get update
- apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y
- git clone https://github.com/ggml-org/llama.cpp
- cmake ... -DGGML_CUDA=ON
- cmake --build ... --target llama-cli llama-mtmd-cli llama-server llama-gguf-split
- cp llama.cpp/build/bin/llama-* llama.cpp
- llama.cpp는 ollama run처럼 모델을 직접 load 및 download하는 데 사용할 수 있음
- 원하는 quantization type 예시로 UD-IQ2_M을 선택하고, export LLAMA_CACHE="unsloth/GLM-5.2-GGUF"로 저장 위치를 강제할 수 있음
- llama.cpp의 직접 다운로드 과정은 매우 느릴 수 있어 수동 다운로드 방식이 더 낫다고 안내함
수동 다운로드와 실행 예시
- 더 빠른 수동 다운로드에는 huggingface_hub를 사용함
- pip install huggingface_hub
- hf download unsloth/GLM-5.2-GGUF --local-dir unsloth/GLM-5.2-GGUF --include "*UD-IQ2_M*"
- near full precision용으로는 --include "*UD-Q8_K_XL*"을 사용할 수 있음
- 다운로드가 멈추면 Hugging Face Hub, XET debugging을 확인하라고 안내함
- Dynamic 1-bit 다운로드 명령은 다음과 같음
- hf download unsloth/GLM-5.2-GGUF --local-dir unsloth/GLM-5.2-GGUF --include "*UD-IQ1_S*"
- conversation mode의 모델 경로는 다음과 같음
- 2-bit: unsloth/GLM-5.2-GGUF/UD-IQ2_M/GLM-5.2-UD-IQ2_M-00001-of-00006.gguf
- 1-bit: unsloth/GLM-5.2-GGUF/UD-IQ1_S/GLM-5.2-UD-IQ1_S-00001-of-00006.gguf
- llama-cli 실행 예시는 2-bit GGUF 첫 shard를 --model에 지정하고 다음 파라미터를 사용함
- --temp 1.0
- --top-p 0.95
- --min-p 0.01
- 직접 실행 예시에는 -hf unsloth/GLM-5.2-GGUF:UD-IQ2_M도 사용됨
생성 예시로 확인한 동작
- 문서에는 2-bit GLM-5.2가 tool-calling과 SVG generation을 수행하는 예시가 포함됨
- llama-cli 실행 후 “short Flappy Bird game” 생성을 요청한 결과가 이어짐
- 생성된 단일 HTML/JavaScript 게임은 Sunset Flier라는 이름을 사용함
- canvas, 시작 화면, 게임 오버 화면, HUD 점수, NEW BEST!, RETRY 버튼을 포함함
- 외부 자산 없이 Web Audio API로 flap, score, hit, die 효과음을 생성함
- 게임 상태는 READY, PLAYING, DYING, OVER 네 단계로 관리됨
- 최고 점수는 localStorage.getItem('sunsetFlierBest')와 localStorage.setItem()으로 저장됨
- 게임 로직에는 중력, 플랩 임펄스, 무작위 파이프, 충돌, 파티클, 화면 흔들림, 메달 시스템이 포함됨
- GRAVITY = 0.42
- MAX_FALL = 9
- PIPE_W = 68
- PIPE_GAP = 180
- PIPE_SPEED = 2.6
- PIPE_SPACING = 220
- 입력은 마우스, 터치, 키보드 Space, ArrowUp, Enter를 지원함
- 이 게임 예시는 1-bit quantization에서도 잘 작동했고 소리도 정상적으로 동작했다는 맥락으로 제시됨
긴 컨텍스트와 KV cache quantization
- llama.cpp에서 긴 컨텍스트를 활용하려면 KV cache quantization으로 메모리 사용량을 줄여야 함
- llama.cpp는 최근 KV cache quantization에 더 높은 정확도를 위한 기법을 추가했으며, 관련 PR은 https://github.com/ggml-org/llama.cpp/pull/21038임
- 지원되는 KV cache dtype은 다음과 같음
- f32
- f16
- bf16
- q8_0
- q4_0
- q4_1
- iq4_nl
- q5_0
- q5_1
- 기본값은 f16임
- q4_0는 weight당 약 4.5비트이므로 컨텍스트 길이를 16 / 4.5, 약 3.5배 늘릴 수 있음
- 예시로 기존에 10K를 지원하던 모델은 35K까지 가능 범위에 들어올 수 있음
- q4_1은 shifting parameter가 추가되어 더 나을 가능성이 있고, weight당 5비트라 약 3.2배 긴 컨텍스트를 제공함
- KV cache quantization 실행 예시는 GLM-5.2 GGUF 모델과 샘플링 파라미터를 지정함
- 모델 경로: unsloth/GLM-5.2-GGUF/UD-IQ2_M/GLM-5.2-UD-IQ2_M-00001-of-00006.gguf
- --temp 1.0
- --top-p 0.95
- --min-p 0.01
- --cache-type-k q4_1
- --cache-type-v q4_1
벤치마크 표에서 확인 가능한 수치
- 문서에는 GLM-5.2 벤치마크 표가 이어지지만, 제공된 내용에는 열 헤더가 없어 각 숫자가 어떤 모델 또는 설정에 대응하는지는 확인할 수 없음
- Reasoning 벤치마크에는 다음 행과 수치가 포함됨
- HLE: 40.5, 49.8*, 41.4*, 45, 31, 41.4, 37, 37.7
- AIME 2026: 99.2, 95.7, 98.3, 98.2, 95.3, 97, -, 94.6
- GPQA-Diamond: 91.2, 93.6, 93.6, 94.3, 86.2, 90, 93, 90.1
- Coding 벤치마크에는 다음 행과 수치가 포함됨
- SWE-bench Pro: 62.1, 69.2, 58.6, 54.2, 58.4, 60.6, 59, 55.4
- NL2Repo: 48.9, 69.7, 50.7, 33.4, 42.7, 47.2, 42.1, 35.5
- Terminal Bench 2.1 (Terminus-2): 81.0, 85, 84, 74, 63.5, 75, 65, 64
- Agentic 벤치마크에는 다음 행과 수치가 포함됨
- MCP-Atlas (Public Set): 76.8, 77.8, 75.3, 69.2, 71.8, 76.4, 74.2, 73.6
- Tool-Decathlon: 48.2, 59.9, 55.6, 48.8, 40.7, -, -, 52.8
-
Homepage
-
Tech blog
- GLM-5.2를 로컬에서 실행하는 방법