입출력 토큰 제한 적용 (Ollama + MLX 모두)
- MLX: --use-paged-cache + --max-cache-blocks로 입력 8192 토큰 제한 - MLX: --kv-cache-quantization 기본 적용 - Ollama: Modelfile로 num_ctx(입력), num_predict(출력) 설정 - SETUP_MLX.md에 토큰 제한 설명 추가 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
ce0233985f
commit
bcd17b2951
20
SETUP_MLX.md
20
SETUP_MLX.md
@ -156,11 +156,23 @@ docker compose -f docker-compose.mlx.yml up -d
|
||||
|
||||
## 서버 시작 플래그
|
||||
|
||||
### 토큰 제한
|
||||
|
||||
| 구분 | 의미 | 설정 방법 |
|
||||
|------|------|-----------|
|
||||
| **max_tokens (출력)** | 모델이 생성하는 최대 토큰 수 | `--max-tokens 8192` |
|
||||
| **context length (입력)** | 모델이 받을 수 있는 최대 입력 토큰 수 | 모델 자체 설정 (Qwen3.5: 최대 262K) |
|
||||
|
||||
> 입력 길이를 제한하려면 `--use-paged-cache`와 `--max-cache-blocks`를 조합합니다.
|
||||
> `max-cache-blocks × 64(블록 사이즈) = 최대 입력 토큰 수`
|
||||
>
|
||||
> 예: 입력 8192 토큰 제한 → `--use-paged-cache --max-cache-blocks 128`
|
||||
|
||||
### 생성 파라미터
|
||||
|
||||
| 플래그 | 기본값 | 설명 |
|
||||
|--------|--------|------|
|
||||
| `--max-tokens` | 32768 | 최대 생성 토큰 수 (thinking + 응답 합산) |
|
||||
| `--max-tokens` | 32768 | 최대 **출력** 토큰 수 (thinking + 응답 합산) |
|
||||
| `--default-temperature` | 모델 기본값 | Temperature (0.0~2.0) |
|
||||
| `--default-top-p` | 모델 기본값 | Nucleus Sampling |
|
||||
| `--reasoning-parser qwen3` | off | thinking 내용을 별도 필드로 추출 |
|
||||
@ -226,14 +238,16 @@ docker compose -f docker-compose.mlx.yml up -d
|
||||
- `0.9` → 희귀한 토큰 배제, 안정적
|
||||
- `1.0` → 필터 없음
|
||||
|
||||
### `--max-tokens`
|
||||
### `--max-tokens` (출력 토큰 제한)
|
||||
|
||||
한 요청에서 생성할 최대 토큰 수입니다.
|
||||
한 요청에서 모델이 **생성(출력)**할 수 있는 최대 토큰 수입니다.
|
||||
|
||||
- Qwen3.5는 **thinking 토큰 + 응답 토큰이 합산**됩니다
|
||||
- 너무 크면 thinking이 끝없이 돌 수 있음
|
||||
- **8192 권장**
|
||||
|
||||
> 입력 토큰 제한(context length)은 별도 플래그가 없으며, 모델의 context window(Qwen3.5: 최대 262K)를 따릅니다. 메모리가 부족하면 `--kv-cache-quantization`이나 `--cache-memory-mb`로 간접 제한하세요.
|
||||
|
||||
### `--mllm`
|
||||
|
||||
멀티모달 모드를 활성화합니다. 이 플래그가 없으면 텍스트만 처리합니다.
|
||||
|
||||
@ -12,6 +12,7 @@ MODEL="mlx-community/Qwen3.5-35B-A3B-4bit"
|
||||
PORT=8090
|
||||
WEBUI_PORT=3000
|
||||
MAX_TOKENS=8192
|
||||
MAX_INPUT_TOKENS=8192
|
||||
TEMPERATURE=0.7
|
||||
TOP_P=0.9
|
||||
|
||||
@ -205,18 +206,24 @@ echo "[6/6] vllm-mlx 서버 시작 (백그라운드)..."
|
||||
echo ""
|
||||
echo " 모델: $MODEL"
|
||||
echo " 포트: $PORT"
|
||||
echo " max_tokens: $MAX_TOKENS"
|
||||
echo " max_tokens (출력): $MAX_TOKENS"
|
||||
echo " max_input (입력): $MAX_INPUT_TOKENS"
|
||||
echo " temperature: $TEMPERATURE"
|
||||
echo " top_p: $TOP_P"
|
||||
echo " 모드: 멀티모달 (이미지 + 텍스트)"
|
||||
echo ""
|
||||
|
||||
# 백그라운드 실행, 로그는 파일로
|
||||
MAX_CACHE_BLOCKS=$((MAX_INPUT_TOKENS / 64))
|
||||
|
||||
nohup vllm-mlx serve "$MODEL" \
|
||||
--port "$PORT" \
|
||||
--max-tokens "$MAX_TOKENS" \
|
||||
--default-temperature "$TEMPERATURE" \
|
||||
--default-top-p "$TOP_P" \
|
||||
--kv-cache-quantization \
|
||||
--use-paged-cache \
|
||||
--max-cache-blocks "$MAX_CACHE_BLOCKS" \
|
||||
--timeout 600 \
|
||||
$MLLM_FLAG > "$LOG_FILE" 2>&1 &
|
||||
|
||||
|
||||
@ -7,8 +7,13 @@ set -e
|
||||
#====================================================================
|
||||
|
||||
PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
MODEL="qwen3.5:35b"
|
||||
BASE_MODEL="qwen3.5:35b"
|
||||
CUSTOM_MODEL="qwen3.5-custom"
|
||||
WEBUI_PORT=3000
|
||||
MAX_TOKENS=8192
|
||||
CONTEXT_LENGTH=8192
|
||||
TEMPERATURE=0.7
|
||||
TOP_P=0.9
|
||||
|
||||
echo "============================================"
|
||||
echo " Qwen3.5 + Open WebUI (Ollama) 셋업"
|
||||
@ -18,7 +23,7 @@ echo ""
|
||||
#--------------------------------------------------------------------
|
||||
# 1. 사전 요구사항 확인
|
||||
#--------------------------------------------------------------------
|
||||
echo "[1/5] 사전 요구사항 확인..."
|
||||
echo "[1/6] 사전 요구사항 확인..."
|
||||
|
||||
if ! command -v brew &>/dev/null; then
|
||||
echo "❌ Homebrew가 설치되어 있지 않습니다."
|
||||
@ -42,7 +47,7 @@ echo ""
|
||||
#--------------------------------------------------------------------
|
||||
# 2. Ollama 설치 및 시작
|
||||
#--------------------------------------------------------------------
|
||||
echo "[2/5] Ollama 설치..."
|
||||
echo "[2/6] Ollama 설치..."
|
||||
|
||||
if ! command -v ollama &>/dev/null; then
|
||||
brew install ollama
|
||||
@ -64,18 +69,43 @@ echo ""
|
||||
#--------------------------------------------------------------------
|
||||
# 3. 모델 다운로드
|
||||
#--------------------------------------------------------------------
|
||||
echo "[3/5] 모델 다운로드 ($MODEL)..."
|
||||
echo "[3/6] 모델 다운로드 ($BASE_MODEL)..."
|
||||
echo " (네트워크 속도에 따라 시간이 걸릴 수 있습니다)"
|
||||
|
||||
ollama pull "$MODEL"
|
||||
ollama pull "$BASE_MODEL"
|
||||
echo " ✓ 모델 다운로드 완료"
|
||||
|
||||
echo ""
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# 4. Docker Compose 설정 및 실행
|
||||
# 4. 커스텀 모델 생성 (파라미터 설정)
|
||||
#--------------------------------------------------------------------
|
||||
echo "[4/5] Open WebUI 실행..."
|
||||
echo "[4/6] 파라미터 설정..."
|
||||
|
||||
MODELFILE="$PROJECT_DIR/Modelfile"
|
||||
cat > "$MODELFILE" << EOF
|
||||
FROM $BASE_MODEL
|
||||
|
||||
PARAMETER num_ctx $CONTEXT_LENGTH
|
||||
PARAMETER num_predict $MAX_TOKENS
|
||||
PARAMETER temperature $TEMPERATURE
|
||||
PARAMETER top_p $TOP_P
|
||||
EOF
|
||||
|
||||
ollama create "$CUSTOM_MODEL" -f "$MODELFILE" 2>&1 | grep -v "^$"
|
||||
|
||||
echo " ✓ 커스텀 모델 생성: $CUSTOM_MODEL"
|
||||
echo " 입력 컨텍스트: $CONTEXT_LENGTH 토큰"
|
||||
echo " 출력 토큰: $MAX_TOKENS"
|
||||
echo " temperature: $TEMPERATURE"
|
||||
echo " top_p: $TOP_P"
|
||||
|
||||
echo ""
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# 5. Docker Compose 설정 및 실행
|
||||
#--------------------------------------------------------------------
|
||||
echo "[5/6] Open WebUI 실행..."
|
||||
|
||||
if [ ! -f "$PROJECT_DIR/docker-compose.yml" ]; then
|
||||
cat > "$PROJECT_DIR/docker-compose.yml" << EOF
|
||||
@ -106,12 +136,18 @@ echo " ✓ Open WebUI 실행 중"
|
||||
echo ""
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# 5. 완료
|
||||
# 6. 완료
|
||||
#--------------------------------------------------------------------
|
||||
echo "[5/5] 셋업 완료!"
|
||||
echo "[6/6] 셋업 완료!"
|
||||
echo ""
|
||||
echo "============================================"
|
||||
echo " 브라우저에서 http://localhost:${WEBUI_PORT} 접속"
|
||||
echo " (첫 접속 시 회원가입 → 첫 계정이 admin)"
|
||||
echo " 모델 선택: $MODEL"
|
||||
echo ""
|
||||
echo " 모델 선택: $CUSTOM_MODEL"
|
||||
echo " (파라미터가 적용된 커스텀 모델)"
|
||||
echo " 또는: $BASE_MODEL"
|
||||
echo " (기본 설정 모델)"
|
||||
echo ""
|
||||
echo " 종료: ./stop-ollama.sh"
|
||||
echo "============================================"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user