TOTORONG commited on
Commit
a96ee01
·
verified ·
1 Parent(s): ad7eb30

Upload howtorun.md

Browse files
Files changed (1) hide show
  1. vllm/howtorun.md +94 -0
vllm/howtorun.md ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Solon-MoE vLLM 실행 상세 가이드 (한글)
2
+
3
+
4
+ ## 0. 사전 조건
5
+
6
+ - merged 모델 디렉토리 (예: `/media/models/solon_moe_p6/merged`) — 안에 `modeling_solon_moe.py`와 `config.json`(auto_map 포함)이 있어야 합니다
7
+ - **`generation_config.json`에 eos_token_id 106 포함** (이미 패치하셨지만, 새 merge마다 재확인):
8
+
9
+ ```bash
10
+ grep 106 /media/models/solon_moe_p6/merged/generation_config.json
11
+ # 안 나오면: eos_token_id 리스트에 106(<turn|>) 추가 — 없으면 응답이 멈추지 않고 퇴행 반복
12
+ ```
13
+
14
+ ## 1. 서빙 플러그인 설치 (최초 1회)
15
+
16
+ vLLM은 커스텀 아키텍처(`SolonMoEForCausalLM`)를 모르므로, 층 선택 shim을 entry-point로 등록해야 `vllm serve`가 자동 인식합니다:
17
+
18
+ ```bash
19
+ mkdir -p ~/solon_vllm_plugin && cd ~/solon_vllm_plugin
20
+ cp /media/models/layer_exp3/vllm_solon_moe.py . # 신식 서명 최종본이어야 함
21
+ # pyproject.toml 작성 (릴리즈 패키지 vllm/pyproject.toml 그대로)
22
+ pip install -e .
23
+ ```
24
+
25
+ 설치 확인:
26
+
27
+ ```bash
28
+ python3 -c "from vllm import ModelRegistry; import vllm_solon_moe; vllm_solon_moe.register(); print('SolonMoEForCausalLM' in ModelRegistry.get_supported_archs())"
29
+ # True 나와야 정상
30
+ ```
31
+
32
+ ## 2. 서버 기동
33
+
34
+ ```bash
35
+ SOLON_LAMBDA=0.10 CUDA_VISIBLE_DEVICES=0 \
36
+ vllm serve /media/models/solon_moe_p6/merged \
37
+ --trust-remote-code \
38
+ --max-model-len 8192 \
39
+ --gpu-memory-utilization 0.85 \
40
+ --max-num-seqs 32 \
41
+ --attention-backend TRITON_ATTN \
42
+ --port 8000
43
+ ```
44
+
45
+ 각 인자의 이유:
46
+
47
+ | 인자 | 이유 |
48
+ |---|---|
49
+ | `SOLON_LAMBDA=0.10` | 체크포인트의 λ는 학습값 0.15 — 추론 규약 0.10을 로드 시점에 덮어씀 (사본 생성 불필요). **빼먹으면 0.15로 돌아 품질 열화** |
50
+ | `--trust-remote-code` | modeling shim 로드에 필수 |
51
+ | `--attention-backend TRITON_ATTN` | Blackwell(sm120)에서 FlashInfer decode 커널이 이 head 구성 미지원(`max_mma_kv: 0` 크래시). 환경변수 `VLLM_ATTENTION_BACKEND`는 현 버전에서 **제거됨** — CLI 인자만 유효 |
52
+ | `--max-num-seqs 32` | FlashInfer workspace 한계(394MiB) 회피 + 개인 서빙 적정 동시성 |
53
+ | `CUDA_VISIBLE_DEVICES=0` | 단일 GPU 원칙 (듀얼 풀부하 금지 규칙) |
54
+
55
+ ## 3. 기동 로그 검증 3종
56
+
57
+ 1. `SolonMoEForCausalLM` 인식 — "old-style model class" 경고가 **없어야** 함 (뜨면 구버전 shim — 신식 서명본으로 교체)
58
+ 2. 가중치 786텐서 로드 완료 (~42.5GiB)
59
+ 3. **`[solon_moe] SOLON_LAMBDA=0.1 applied to 15 layer(s)`** — 이 줄이 λ 적용 증거. 없으면 학습값으로 돌고 있는 것
60
+
61
+ 첫 기동은 torch.compile 워밍업으로 몇 분 걸리고, 이후엔 캐시로 빨라집니다.
62
+
63
+ ## 4. 호출
64
+
65
+ ```bash
66
+ curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{
67
+ "model": "/media/models/solon_moe_p6/merged",
68
+ "messages": [{"role": "user", "content": "질문 내용"}],
69
+ "max_tokens": 2048,
70
+ "temperature": 0,
71
+ "stop_token_ids": [106]
72
+ }'
73
+ ```
74
+
75
+ - `stop_token_ids: [106]`은 generation_config에 106이 있으면 생략 가능하지만, **보험으로 넣기를 권장**합니다. 문자열 `"stop": ["<turn|>"]`은 특수 토큰이 텍스트에서 벗겨져 매칭이 빗나갈 수 있으니 토큰 ID 방식이 확실합니다.
76
+ - 정상 응답 판정: `"finish_reason": "stop"`, `"stop_reason": 106` — 이 둘이 찍히면 첫 블록에서 깔끔하게 종결된 것입니다. `finish_reason: "length"`가 나오면 stop 설정이 안 먹은 것(0장의 grep부터 재확인).
77
+ - OpenAI SDK 사용 시에도 동일: `extra_body={"stop_token_ids": [106]}`.
78
+
79
+ ## 5. 자주 만나는 문제
80
+
81
+ | 증상 | 원인 → 조치 |
82
+ |---|---|
83
+ | `missing argument: vllm_config` | shim이 구버전(투과 서명) → 신식 서명본으로 교체 후 `~/solon_vllm_plugin`에도 복사 |
84
+ | `Unsupported max_mma_kv: 0` | FlashInfer 경로로 돎 → `--attention-backend TRITON_ATTN` 확인 (env 아닌 CLI) |
85
+ | workspace 버퍼 에러 (394MiB 초과) | `--max-num-seqs 32` 확인, 그래도 나면 더 축소 |
86
+ | 응답이 반복·폭주 | stop 미설정 → generation_config 106 + 요청 stop_token_ids |
87
+ | 응답에 "thought" 낱말이 섞임 | 정상 현상의 흔적 — 모델이 새 턴을 시작한 것, stop만 잡으면 사라짐 |
88
+ | unknown architecture | plugin 미설치/미등록 → 1장 재수행 |
89
+
90
+ ## 6. 운영 메모
91
+
92
+ - λ 값을 바꿔 실험하려면 서버 재시작 시 `SOLON_LAMBDA`만 바꾸면 됩니다 (0.10 외 값은 검증상 비권장).
93
+ - 응답에는 thought 채널 내용(추론 과정)이 포함됩니다 — 사용자에게 결론만 보여주려면 클라이언트에서 마지막 정형 결론부(`**정답**`, `\boxed{}` 등)를 파싱하는 후처리를 붙이세요.
94
+ - 장시간 운용 중 이상(응답 정지, CUDA 에러) 시 `dmesg | grep -i xid` 확인 — Xid 8이면 하드웨어 규칙(§6) 참조.