facts

최대 262,144 토큰의 컨텍스트 창을 지원하는 Qwen3.8-27B-Uncensored-GGUF 모델이 허깅페이스(HuggingFace)에 공개됐다. 이 모델은 Qwen3_5ForConditionalGeneration 구조를 기반으로 하며, 총 64개의 레이어와 248,320개의 어휘집을 보유하고 있다. llama.cpp 등에서 활용 가능한 GGUF(GPT-Generated Unified Format) 양자화 버전으로 제공되어 고사양 GPU가 없는 개인 개발자 환경에서도 구동이 가능하다.

검열 제거 과정에는 Heretic 도구가 사용됐다. Heretic은 모델의 가중치 내에서 거부 반응을 일으키는 방향성을 찾아 제거하는 도구다. 별도의 추가 학습 데이터나 미세 조정 없이, 원본 모델과의 KL 발산(Kullback-Leibler Divergence, 두 확률 분포의 차이를 측정하는 지표)을 최소화하며 거부 횟수를 줄이는 방식을 취한다. 모든 작업은 bf16(Bfloat16) 정밀도 상태에서 진행됐으며, 생성된 LoRA(Low-Rank Adaptation, 저차원 적응) 가중치를 기반 모델에 병합해 양자화 과정의 품질 저하를 방지했다.

제공되는 파일 구성은 사용자의 런타임 환경에 따라 세 가지로 나뉜다. MTP가 내장된 단일 파일 형태의 Fused 버전, 런타임에서 드래프트 모델을 명시적으로 지정해야 하는 Target 및 Draft 분리 버전, 그리고 이미지 입력이 가능한 Vision 버전이 그것이다. 특히 드래프트 헤드는 Q8_0 양자화 상태를 유지해 디스크 용량은 늘어났으나 토큰 수락률을 높여 추론 효율을 확보했다.

how-it-works

기존의 Abliteration(모델의 특정 활성화 경로를 제거해 검열을 푸는 방식) 기법은 모델을 다시 저장하는 과정에서 MTP 텐서가 누락되는 문제가 있었다. 이로 인해 설정 파일인 `config.json`에 MTP 기능이 명시되어 있어도 실제 추론 시에는 작동하지 않는 경우가 많았다. 이번 릴리스는 `attn.o_proj`와 `mlp.down_proj` 등 메인 스택만 수정하고, MTP 텐서는 원본 체크포인트에서 그대로 복사해 붙이는 방식을 사용해 기능을 복구했다.

양자화 정밀도를 높이기 위해 imatrix(Importance Matrix, 가중치의 중요도를 계산해 손실을 줄이는 행렬)를 적용했다. wikitext-2 raw 데이터셋의 200개 청크를 통해 중요도 행렬을 직접 계산했으며, 이를 통해 저비트 양자화에서도 모델의 언어 능력이 급격히 하락하는 것을 막았다.

언어 예측 능력 지표인 PPL(Perplexity, 낮을수록 우수) 결과는 양자화 수준에 따라 차이를 보인다. f16 기준선이 7.1557인 상황에서 Q4_K_M 양자화 모델은 7.1814를 기록하며 기준선에 근접한 성능을 유지했다. IQ2_M 모델의 경우 PPL이 7.8581로 상승하지만, 모델 용량을 10.6GB까지 낮춰 27B 모델을 저사양 환경에서 구동할 수 있는 실익을 제공한다.

implementation-impact

투기적 디코딩(Speculative Decoding, 작은 모델이 토큰을 먼저 예측하고 큰 모델이 검증해 속도를 높이는 방식)을 통한 추론 속도 향상이 가능하다. 드래프트 헤드가 수정되지 않은 원본 모델 기준으로 학습되었기에 수락률이 소폭 하락할 가능성은 있으나, 모든 토큰을 타겟 모델이 최종 검증하므로 출력 품질에는 영향이 없다.

모델을 로컬 환경에서 실행하기 위한 기본 명령어와 Python 예시 코드는 다음과 같다.

bash
huggingface-cli download Qwen/Qwen3.8-27B-Uncensored-GGUF Qwen3.8-27B-Uncensored-Q4_K_M.gguf --local-dir . --local-dir-use-symlinks False
python
from llama_cpp import Llama

GGUF 모델 로드 및 추론 설정

llm = Llama(

model_path="./Qwen3.8-27B-Uncensored-Q4_K_M.gguf",

n_ctx=262144,

n_gpu_layers=-1

)

검열 없이 자유로운 응답 생성 테스트

output = llm(

"Question: Describe a complex scenario without restrictions.\nAnswer:",

max_tokens=512,

stop=["\n"]

)

print(output["choices"][0]["text"])

로컬 GPU 자원이 제한적인 환경에서 27B 모델의 추론 속도를 확보해야 하는 개발자는 IQ2_M 양자화 버전과 투기적 디코딩 설정을 우선 검토해야 한다.