Ban commited on
Commit
e9434b3
·
verified ·
1 Parent(s): ee139d3

Update model card to English

Browse files
Files changed (1) hide show
  1. README.md +54 -61
README.md CHANGED
@@ -14,40 +14,37 @@ license: apache-2.0
14
 
15
  # Qwen3.5-122B-A10B-abliterated-FP8
16
 
17
- [wangzhang/Qwen3.5-122B-A10B-abliterated](https://huggingface.co/wangzhang/Qwen3.5-122B-A10B-abliterated)
18
- **FP8 E4M3 block-wise 양자화** 버전입니다.
19
 
20
- [Qwen/Qwen3.5-122B-A10B-FP8](https://huggingface.co/Qwen/Qwen3.5-122B-A10B-FP8)과 동일한 저장 포맷을 사용합니다.
21
 
22
- ## 모델 정보
23
 
24
- | 항목 | |
25
- |------|-----|
26
- | 원본 모델 | [wangzhang/Qwen3.5-122B-A10B-abliterated](https://huggingface.co/wangzhang/Qwen3.5-122B-A10B-abliterated) |
27
- | 양자화 | FP8 E4M3, block-wise 128×128, `weight_scale_inv` (bfloat16) |
28
- | 체크포인트 크기 | **115 GB** (원본 228 GB 대비 50% 감소) |
29
- | 활성 파라미터 | ~10B (MoE, 256 experts 10개 활성) |
30
- | 전체 파라미터 | 122B |
31
- | 최대 컨텍스트 | 32,768 tokens |
32
- | 검열 해제 | ✅ (abliterated, refusal rate 0.5%) |
33
- | Activation | Dynamic (체크포인트에 미포함) |
34
- | BF16 유지 대상 | lm_head, embed_tokens, norms, conv1d, router gate, in_proj_a/b |
35
 
36
- ## 사용법
37
 
38
- ### ⚠️ vLLM 패치 필요
39
 
40
- 모델은 `qwen3_5_moe_text` (text-only MoE) 아키텍처를 사용합니다.
41
- vLLM v0.17~v0.18에서는 이 아키텍처가 정식 지원되지 않으므로,
42
- 함께 제공되는 `vllm_patches/patch_qwen35_moe_text.py` 패치를 적용해야 합니다.
43
 
44
- ### 서빙 (vLLM)
45
 
46
  ```bash
47
- # 1. 패치 적용 (vLLM 프로세스 시작 전에 실행)
48
  python vllm_patches/patch_qwen35_moe_text.py
49
 
50
- # 2. 서빙
51
  vllm serve /path/to/Qwen3.5-122B-A10B-abliterated-FP8 \
52
  --tensor-parallel-size 2 \
53
  --trust-remote-code \
@@ -56,57 +53,47 @@ vllm serve /path/to/Qwen3.5-122B-A10B-abliterated-FP8 \
56
  --reasoning-parser qwen3
57
  ```
58
 
59
- ### Docker에서 패치 자동 적용
60
 
61
- entrypoint.sh 시작 부분에 추가:
62
  ```bash
63
  if [ -f /patches/patch_qwen35_moe_text.py ]; then
64
  python3 /patches/patch_qwen35_moe_text.py || true
65
  fi
66
  ```
67
 
68
- docker-compose.yml에 볼륨 마운트:
69
  ```yaml
70
  volumes:
71
  - ./vllm_patches:/patches:ro
72
  ```
73
 
74
- ## 패치가 해결하는 문제
75
 
76
- | 문제 | 원인 | 해결 |
77
- |------|------|------|
78
- | `Qwen3_5MoeForCausalLM` 미인식 | vLLM registry 미등록 | TextOnlyShim 등록 |
79
- | Hybrid cache page-size 에러 | text-only CausalLM 경로 버그 | multimodal wrapper 경로 재사용 |
80
- | Vision encoder 초기화 실패 | wrapper가 vision 강제 초기화 | vision encoder 스킵 |
81
- | TP2 block_k 에러 | vision hidden_size=1152 참조 | dummy vision config 주입 |
82
 
83
- vLLM `qwen3_5_moe_text`를 정식 지원하면 패치가 불필요해집니다.
84
 
85
- ## 벤치마크 (한국어 QA 12문항, DGX Spark TP=2)
86
 
87
- | 지표 | 공식 Qwen FP8 | ** 모델** | BF16+Runtime FP8 |
88
- |------|:---:|:---:|:---:|
89
- | 완답 | 12/12 | **12/12** | 11/12 |
90
- | 속도 | 20.3 tok/s | **29.6 tok/s** | 29.3 tok/s |
91
- | 크기 | 119 GB | **115 GB** | 228 GB |
92
- | Swap 필요 | No | **No** | Yes (200GB) |
93
- | 검열 해제 | ❌ | **✅** | ✅ |
94
 
95
- Runtime FP8(BF16 원본 + `--quantization fp8`)과 동일한 출력 품질이면서,
96
- 체크포인트 크기 50% 감소 + swap 불필요 + 빠른 로딩.
97
 
98
- ## 하드웨어 요구사항
99
 
100
- | 구성 | GPU 메모리 | 비고 |
101
- |------|-----------|------|
102
- | TP=1 | ~115 GB | H100 80GB 불가, GB200 등 |
103
- | **TP=2** | **~58 GB/GPU** | DGX Spark, H100×2, A100 80GB×2 |
104
- | TP=4 | ~29 GB/GPU | A100 40GB×4 |
105
-
106
- ## 양자화 방법
107
-
108
- calibration 없이 BF16 weight를 128×128 block 단위로 직접 FP8 E4M3 변환합니다.
109
- [fp8-quantizer](https://github.com/JungkwanBan/fp8-quantizer)로 생성.
110
 
111
  ```bash
112
  python convert_bf16_to_fp8.py \
@@ -114,12 +101,18 @@ python convert_bf16_to_fp8.py \
114
  --output ./Qwen3.5-122B-A10B-abliterated-FP8
115
  ```
116
 
117
- ## 원본 모델 정보
 
 
 
 
 
 
 
 
118
 
119
- [wangzhang/Qwen3.5-122B-A10B-abliterated](https://huggingface.co/wangzhang/Qwen3.5-122B-A10B-abliterated):
120
- [Prometheus](https://github.com/wuwangzhang1216/prometheus)를 사용한 검열 해제 버전.
121
- Refusal rate 0.5% (200개 테스트 중 1개), KL divergence 0.0115.
122
 
123
- ## 라이선스
124
 
125
- 원본 모델의 라이선스를 따릅니다.
 
14
 
15
  # Qwen3.5-122B-A10B-abliterated-FP8
16
 
17
+ **FP8 E4M3 block-wise quantized** version of [wangzhang/Qwen3.5-122B-A10B-abliterated](https://huggingface.co/wangzhang/Qwen3.5-122B-A10B-abliterated).
 
18
 
19
+ Same checkpoint format as [Qwen/Qwen3.5-122B-A10B-FP8](https://huggingface.co/Qwen/Qwen3.5-122B-A10B-FP8).
20
 
21
+ ## Model Details
22
 
23
+ | | |
24
+ |---|---|
25
+ | Base Model | [wangzhang/Qwen3.5-122B-A10B-abliterated](https://huggingface.co/wangzhang/Qwen3.5-122B-A10B-abliterated) |
26
+ | Quantization | FP8 E4M3, block-wise 128×128, `weight_scale_inv` (bfloat16) |
27
+ | Checkpoint Size | **115 GB** (50% of original 228 GB) |
28
+ | Active Parameters | ~10B (MoE, 10 of 256 experts active per token) |
29
+ | Total Parameters | 122B |
30
+ | Max Context | 32,768 tokens |
31
+ | Uncensored | ✅ (abliterated, 0.5% refusal rate) |
32
+ | Activation | Dynamic (not stored in checkpoint) |
33
+ | BF16 Preserved | lm_head, embed_tokens, norms, conv1d, router gate, in_proj_a/b |
34
 
35
+ ## Usage
36
 
37
+ ### ⚠️ vLLM Patch Required
38
 
39
+ This model uses the `qwen3_5_moe_text` (text-only MoE) architecture, which is not natively supported in vLLM v0.17–v0.18. You must apply the included `vllm_patches/patch_qwen35_moe_text.py` before serving.
 
 
40
 
41
+ ### Serving with vLLM
42
 
43
  ```bash
44
+ # 1. Apply patch (run before vLLM process starts)
45
  python vllm_patches/patch_qwen35_moe_text.py
46
 
47
+ # 2. Serve
48
  vllm serve /path/to/Qwen3.5-122B-A10B-abliterated-FP8 \
49
  --tensor-parallel-size 2 \
50
  --trust-remote-code \
 
53
  --reasoning-parser qwen3
54
  ```
55
 
56
+ ### Docker Entrypoint Auto-Patch
57
 
58
+ Add to the beginning of your entrypoint.sh:
59
  ```bash
60
  if [ -f /patches/patch_qwen35_moe_text.py ]; then
61
  python3 /patches/patch_qwen35_moe_text.py || true
62
  fi
63
  ```
64
 
65
+ Mount the patches volume in docker-compose.yml:
66
  ```yaml
67
  volumes:
68
  - ./vllm_patches:/patches:ro
69
  ```
70
 
71
+ ## What the Patch Does
72
 
73
+ | Issue | Cause | Fix |
74
+ |-------|-------|-----|
75
+ | `Qwen3_5MoeForCausalLM` not recognized | Not in vLLM registry | Registers TextOnlyShim class |
76
+ | Hybrid cache page-size error | Bug in text-only CausalLM path | Reuses multimodal wrapper's cache-spec |
77
+ | Vision encoder init failure | Wrapper forces vision init | Skips vision encoder |
78
+ | TP2 block_k=128 error | vision_config.hidden_size=1152 | Injects dummy vision config |
79
 
80
+ The patch will become unnecessary once vLLM adds native support for `qwen3_5_moe_text`.
81
 
82
+ ## Benchmark (Korean QA, 12 questions, DGX Spark TP=2)
83
 
84
+ | Metric | Official Qwen FP8 | **This Model** | BF16 + Runtime FP8 |
85
+ |--------|:--:|:--:|:--:|
86
+ | Completed | 12/12 | **12/12** | 11/12 |
87
+ | Speed | 20.3 tok/s | **29.6 tok/s** | 29.3 tok/s |
88
+ | Size | 119 GB | **115 GB** | 228 GB |
89
+ | Swap Required | No | **No** | Yes (200GB) |
90
+ | Uncensored | ❌ | **✅** | ✅ |
91
 
92
+ Same output quality as runtime FP8, with half the checkpoint size, no swap needed, and faster loading.
 
93
 
94
+ ## Quantization Method
95
 
96
+ Block-wise FP8 E4M3 conversion without calibration computes per-block max as scale. Built with [fp8-quantizer](https://github.com/JungkwanBan/fp8-quantizer).
 
 
 
 
 
 
 
 
 
97
 
98
  ```bash
99
  python convert_bf16_to_fp8.py \
 
101
  --output ./Qwen3.5-122B-A10B-abliterated-FP8
102
  ```
103
 
104
+ ## Hardware Requirements
105
+
106
+ | Config | GPU Memory | Notes |
107
+ |--------|-----------|-------|
108
+ | TP=1 | ~115 GB | Requires GB200 or similar |
109
+ | **TP=2** | **~58 GB/GPU** | DGX Spark, H100×2, A100 80GB×2 |
110
+ | TP=4 | ~29 GB/GPU | A100 40GB×4 |
111
+
112
+ ## Base Model
113
 
114
+ [wangzhang/Qwen3.5-122B-A10B-abliterated](https://huggingface.co/wangzhang/Qwen3.5-122B-A10B-abliterated) — uncensored via [Prometheus](https://github.com/wuwangzhang1216/prometheus) abliteration. Refusal rate 0.5% (1/200), KL divergence 0.0115.
 
 
115
 
116
+ ## License
117
 
118
+ Follows the license of the base model.