--- base_model: wangzhang/Qwen3.5-122B-A10B-abliterated pipeline_tag: text-generation tags: - qwen3.5 - moe - fp8 - quantized - abliterated - uncensored - block-wise-fp8 license: apache-2.0 --- # Qwen3.5-122B-A10B-abliterated-FP8 [wangzhang/Qwen3.5-122B-A10B-abliterated](https://huggingface.co/wangzhang/Qwen3.5-122B-A10B-abliterated)의 **FP8 E4M3 block-wise 양자화** 버전입니다. [Qwen/Qwen3.5-122B-A10B-FP8](https://huggingface.co/Qwen/Qwen3.5-122B-A10B-FP8)과 동일한 저장 포맷을 사용합니다. ## 모델 정보 | 항목 | 값 | |------|-----| | 원본 모델 | [wangzhang/Qwen3.5-122B-A10B-abliterated](https://huggingface.co/wangzhang/Qwen3.5-122B-A10B-abliterated) | | 양자화 | FP8 E4M3, block-wise 128×128, `weight_scale_inv` (bfloat16) | | 체크포인트 크기 | **115 GB** (원본 228 GB 대비 50% 감소) | | 활성 파라미터 | ~10B (MoE, 256 experts 중 10개 활성) | | 전체 파라미터 | 122B | | 최대 컨텍스트 | 32,768 tokens | | 검열 해제 | ✅ (abliterated, refusal rate 0.5%) | | Activation | Dynamic (체크포인트에 미포함) | | BF16 유지 대상 | lm_head, embed_tokens, norms, conv1d, router gate, in_proj_a/b | ## 사용법 ### ⚠️ vLLM 패치 필요 이 모델은 `qwen3_5_moe_text` (text-only MoE) 아키텍처를 사용합니다. vLLM v0.17~v0.18에서는 이 아키텍처가 정식 지원되지 않으므로, 함께 제공되는 `vllm_patches/patch_qwen35_moe_text.py` 패치를 적용해야 합니다. ### 서빙 (vLLM) ```bash # 1. 패치 적용 (vLLM 프로세스 시작 전에 실행) python vllm_patches/patch_qwen35_moe_text.py # 2. 서빙 vllm serve /path/to/Qwen3.5-122B-A10B-abliterated-FP8 \ --tensor-parallel-size 2 \ --trust-remote-code \ --enable-chunked-prefill \ --max-model-len 32768 \ --reasoning-parser qwen3 ``` ### Docker에서 패치 자동 적용 entrypoint.sh 시작 부분에 추가: ```bash if [ -f /patches/patch_qwen35_moe_text.py ]; then python3 /patches/patch_qwen35_moe_text.py || true fi ``` docker-compose.yml에 볼륨 마운트: ```yaml volumes: - ./vllm_patches:/patches:ro ``` ## 패치가 해결하는 문제 | 문제 | 원인 | 해결 | |------|------|------| | `Qwen3_5MoeForCausalLM` 미인식 | vLLM registry 미등록 | TextOnlyShim 등록 | | Hybrid cache page-size 에러 | text-only CausalLM 경로 버그 | multimodal wrapper 경로 재사용 | | Vision encoder 초기화 실패 | wrapper가 vision 강제 초기화 | vision encoder 스킵 | | TP2 block_k 에러 | vision hidden_size=1152 참조 | dummy vision config 주입 | vLLM이 `qwen3_5_moe_text`를 정식 지원하면 패치가 불필요해집니다. ## 벤치마크 (한국어 QA 12문항, DGX Spark TP=2) | 지표 | 공식 Qwen FP8 | **본 모델** | BF16+Runtime FP8 | |------|:---:|:---:|:---:| | 완답 | 12/12 | **12/12** | 11/12 | | 속도 | 20.3 tok/s | **29.6 tok/s** | 29.3 tok/s | | 크기 | 119 GB | **115 GB** | 228 GB | | Swap 필요 | No | **No** | Yes (200GB) | | 검열 해제 | ❌ | **✅** | ✅ | Runtime FP8(BF16 원본 + `--quantization fp8`)과 동일한 출력 품질이면서, 체크포인트 크기 50% 감소 + swap 불필요 + 빠른 로딩. ## 하드웨어 요구사항 | 구성 | GPU 메모리 | 비고 | |------|-----------|------| | TP=1 | ~115 GB | H100 80GB 불가, GB200 등 | | **TP=2** | **~58 GB/GPU** | DGX Spark, H100×2, A100 80GB×2 | | TP=4 | ~29 GB/GPU | A100 40GB×4 | ## 양자화 방법 calibration 없이 BF16 weight를 128×128 block 단위로 직접 FP8 E4M3 변환합니다. [fp8-quantizer](https://github.com/JungkwanBan/fp8-quantizer)로 생성. ```bash python convert_bf16_to_fp8.py \ --model wangzhang/Qwen3.5-122B-A10B-abliterated \ --output ./Qwen3.5-122B-A10B-abliterated-FP8 ``` ## 원본 모델 정보 [wangzhang/Qwen3.5-122B-A10B-abliterated](https://huggingface.co/wangzhang/Qwen3.5-122B-A10B-abliterated): [Prometheus](https://github.com/wuwangzhang1216/prometheus)를 사용한 검열 해제 버전. Refusal rate 0.5% (200개 테스트 중 1개), KL divergence 0.0115. ## 라이선스 원본 모델의 라이선스를 따릅니다.