docs: update model card with v3 training data (58K SFT, 26K DPO), MLX benchmark, Markdown RT format
Browse files
README.md
CHANGED
|
@@ -12,6 +12,7 @@ tags:
|
|
| 12 |
- dpo
|
| 13 |
- gguf
|
| 14 |
- llama-cpp
|
|
|
|
| 15 |
base_model: Qwen/Qwen2.5-7B-Instruct
|
| 16 |
pipeline_tag: text-generation
|
| 17 |
---
|
|
@@ -21,16 +22,23 @@ pipeline_tag: text-generation
|
|
| 21 |
**한국 주식시장 전문 AI 애널리스트**
|
| 22 |
|
| 23 |
VELA는 한국 주식시장 뉴스 분석 및 투자 리서치를 위해 특화된 7B 파라미터 언어 모델입니다.
|
| 24 |
-
2,135개 종목에 대한 뉴스 영향 분석, 증권사 리포트 해석,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
|
| 26 |
## Model Details
|
| 27 |
|
| 28 |
| 항목 | 내용 |
|
| 29 |
|------|------|
|
| 30 |
-
| **Base Model** | Qwen/Qwen2.5-7B-Instruct |
|
| 31 |
-
| **Training** | SFT (
|
| 32 |
| **Parameters** | 7.6B |
|
| 33 |
| **Context Length** | 8,192 tokens |
|
|
|
|
| 34 |
| **Stock Coverage** | 2,135 종목 (KOSPI + KOSDAQ) |
|
| 35 |
| **License** | Apache 2.0 |
|
| 36 |
|
|
@@ -42,77 +50,176 @@ VELA는 한국 주식시장 뉴스 분석 및 투자 리서치를 위해 특화
|
|
| 42 |
| **GGUF Q8_0** | `vela-q8_0.gguf` | 7.6 GB | High quality quantized, GPU/CPU |
|
| 43 |
| **GGUF Q4_K_M** | `vela-q4_k_m.gguf` | 4.4 GB | Fast & lightweight, GPU/CPU |
|
| 44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 45 |
## Training Pipeline
|
| 46 |
|
| 47 |
```
|
| 48 |
-
Qwen2.5-7B-Instruct
|
| 49 |
-
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 66 |
```
|
| 67 |
|
| 68 |
-
|
|
|
|
|
|
|
| 69 |
|
| 70 |
-
### SFT (
|
| 71 |
|
| 72 |
| Source | Samples | Ratio | Description |
|
| 73 |
|--------|---------|-------|-------------|
|
| 74 |
-
|
|
| 75 |
-
|
|
| 76 |
-
|
|
| 77 |
-
|
|
| 78 |
-
|
|
| 79 |
-
|
|
| 80 |
-
| **
|
| 81 |
-
|
|
| 82 |
-
| **
|
| 83 |
-
| **
|
| 84 |
-
| **
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 85 |
|
| 86 |
-
|
| 87 |
|
| 88 |
-
##
|
| 89 |
|
| 90 |
-
|
| 91 |
-
|--------|-------|-------|-------------|
|
| 92 |
-
| **dpo_dedup** | 12,000 | 48.4% | 중복 제거된 기본 DPO 페어 |
|
| 93 |
-
| **multilingual_aug** | 5,997 | 24.2% | 중국어/영어 leak 보강 (rejected에 leak 삽입) |
|
| 94 |
-
| **vela_chatml** | 5,000 | 20.2% | VELA 시스템 프롬프트 정렬 |
|
| 95 |
-
| **chinese_leak_v2** | 1,216 | 4.9% | 중국어 leak 집중 교정 |
|
| 96 |
-
| **reasoning_trace_2k** | 566 | 2.3% | Reasoning Trace 형식 정렬 |
|
| 97 |
|
| 98 |
-
|
| 99 |
|
| 100 |
-
|
| 101 |
-
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
- **다중 소스 종합**: 뉴스, 시세, 수급 데이터 통합 분석
|
| 105 |
|
| 106 |
-
|
| 107 |
|
| 108 |
-
|
| 109 |
|
| 110 |
-
|
| 111 |
-
|--------|--------------|--------------|---------|
|
| 112 |
-
| **Q4_K_M** | **36 tok/s** | 0/5 CLEAN | Reasoning Trace + Report OK |
|
| 113 |
-
| **Q8_0** | 25 tok/s | 0/5 CLEAN | Reasoning Trace + Report OK |
|
| 114 |
|
| 115 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 116 |
|
| 117 |
## Usage
|
| 118 |
|
|
@@ -124,7 +231,7 @@ from llama_cpp import Llama
|
|
| 124 |
model = Llama(
|
| 125 |
model_path="vela-q4_k_m.gguf", # or vela-q8_0.gguf
|
| 126 |
n_ctx=4096,
|
| 127 |
-
n_gpu_layers=-1,
|
| 128 |
chat_format="chatml",
|
| 129 |
)
|
| 130 |
|
|
@@ -148,13 +255,13 @@ import torch
|
|
| 148 |
model = AutoModelForCausalLM.from_pretrained(
|
| 149 |
"intrect/VELA",
|
| 150 |
torch_dtype=torch.bfloat16,
|
| 151 |
-
device_map="auto"
|
| 152 |
)
|
| 153 |
tokenizer = AutoTokenizer.from_pretrained("intrect/VELA")
|
| 154 |
|
| 155 |
messages = [
|
| 156 |
{"role": "system", "content": "당신은 한국 주식 전문 애널리스트입니다."},
|
| 157 |
-
{"role": "user", "content": "삼성전자 HBM 사업 전망을 분석해주세요."}
|
| 158 |
]
|
| 159 |
|
| 160 |
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
|
|
@@ -164,7 +271,7 @@ outputs = model.generate(
|
|
| 164 |
**inputs,
|
| 165 |
max_new_tokens=1024,
|
| 166 |
temperature=0.7,
|
| 167 |
-
do_sample=True
|
| 168 |
)
|
| 169 |
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
|
| 170 |
```
|
|
@@ -177,8 +284,27 @@ from vllm import LLM, SamplingParams
|
|
| 177 |
llm = LLM(model="intrect/VELA", dtype="bfloat16")
|
| 178 |
params = SamplingParams(temperature=0.7, max_tokens=1024)
|
| 179 |
|
| 180 |
-
|
| 181 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 182 |
```
|
| 183 |
|
| 184 |
### Ollama
|
|
@@ -196,26 +322,40 @@ PARAMETER temperature 0.7
|
|
| 196 |
PARAMETER num_ctx 4096
|
| 197 |
```
|
| 198 |
|
|
|
|
|
|
|
| 199 |
## Output Format
|
| 200 |
|
| 201 |
-
VELA는 두 가지 출력 모드를 지원합니다
|
| 202 |
|
| 203 |
### 1. Reasoning Trace (분석 과정)
|
| 204 |
|
| 205 |
-
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 213 |
```
|
| 214 |
|
| 215 |
### 2. Synthesis Report (최종 리포트)
|
| 216 |
|
|
|
|
|
|
|
| 217 |
```markdown
|
| 218 |
-
#
|
| 219 |
|
| 220 |
## Executive Summary
|
| 221 |
[2-3문장 핵심 요약]
|
|
@@ -223,6 +363,9 @@ VELA는 두 가지 출력 모드를 지원합니다:
|
|
| 223 |
## Key Metrics
|
| 224 |
| 지표 | 수치 |
|
| 225 |
|------|------|
|
|
|
|
|
|
|
|
|
|
| 226 |
|
| 227 |
## 시장 동향 분석
|
| 228 |
## 수급 분석
|
|
@@ -231,19 +374,40 @@ VELA는 두 가지 출력 모드를 지원합니다:
|
|
| 231 |
## 투자 의견
|
| 232 |
```
|
| 233 |
|
| 234 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 235 |
|
| 236 |
-
-
|
| 237 |
-
- ✅ **영어 leak 감소**: 불필요한 영어 사용 최소화
|
| 238 |
-
- ✅ **형식 준수**: Reasoning Trace JSON + 7-section Report
|
| 239 |
-
- ✅ **한국어 품질**: 자연스러운 한국어 표현
|
| 240 |
|
| 241 |
## Limitations
|
| 242 |
|
| 243 |
-
- 실시간 시세 데이터 접근
|
| 244 |
-
-
|
| 245 |
-
-
|
| 246 |
-
-
|
|
|
|
|
|
|
| 247 |
|
| 248 |
## Citation
|
| 249 |
|
|
@@ -257,11 +421,14 @@ VELA는 두 가지 출력 모드를 지원합니다:
|
|
| 257 |
}
|
| 258 |
```
|
| 259 |
|
|
|
|
|
|
|
| 260 |
## Version History
|
| 261 |
|
| 262 |
-
|
|
| 263 |
-
|------|------|---------
|
| 264 |
-
| v1.
|
|
|
|
| 265 |
| v1.0 | 2026-01-28 | DPO 병합, 중국어/영어 leak 해결 |
|
| 266 |
| v0.9 | 2026-01-15 | SFT 베이스 모델 공개 |
|
| 267 |
|
|
|
|
| 12 |
- dpo
|
| 13 |
- gguf
|
| 14 |
- llama-cpp
|
| 15 |
+
- mlx
|
| 16 |
base_model: Qwen/Qwen2.5-7B-Instruct
|
| 17 |
pipeline_tag: text-generation
|
| 18 |
---
|
|
|
|
| 22 |
**한국 주식시장 전문 AI 애널리스트**
|
| 23 |
|
| 24 |
VELA는 한국 주식시장 뉴스 분석 및 투자 리서치를 위해 특화된 7B 파라미터 언어 모델입니다.
|
| 25 |
+
KOSPI/KOSDAQ 2,135개 종목에 대한 뉴스 영향 분석, 증권사 리포트 해석,
|
| 26 |
+
Reasoning Trace 기반 구조화된 투자 분석을 수행합니다.
|
| 27 |
+
|
| 28 |
+
> **58K+ SFT 샘플**과 **26K+ DPO 페어**로 학습하여,
|
| 29 |
+
> 한국어 금융 도메인에서 정확하고 구조화된 분석을 제공합니다.
|
| 30 |
+
|
| 31 |
+
---
|
| 32 |
|
| 33 |
## Model Details
|
| 34 |
|
| 35 |
| 항목 | 내용 |
|
| 36 |
|------|------|
|
| 37 |
+
| **Base Model** | [Qwen/Qwen2.5-7B-Instruct](https://huggingface.co/Qwen/Qwen2.5-7B-Instruct) |
|
| 38 |
+
| **Training** | SFT (58,206 samples) + DPO (26,421 pairs) |
|
| 39 |
| **Parameters** | 7.6B |
|
| 40 |
| **Context Length** | 8,192 tokens |
|
| 41 |
+
| **RT Format** | Markdown Reasoning Trace |
|
| 42 |
| **Stock Coverage** | 2,135 종목 (KOSPI + KOSDAQ) |
|
| 43 |
| **License** | Apache 2.0 |
|
| 44 |
|
|
|
|
| 50 |
| **GGUF Q8_0** | `vela-q8_0.gguf` | 7.6 GB | High quality quantized, GPU/CPU |
|
| 51 |
| **GGUF Q4_K_M** | `vela-q4_k_m.gguf` | 4.4 GB | Fast & lightweight, GPU/CPU |
|
| 52 |
|
| 53 |
+
> MLX 4-bit 양자화 모델도 별도 제공 예정 (Apple Silicon 최적화)
|
| 54 |
+
|
| 55 |
+
---
|
| 56 |
+
|
| 57 |
+
## What Can VELA Do?
|
| 58 |
+
|
| 59 |
+
### 1. 뉴스 영향 분석
|
| 60 |
+
주식 관련 뉴스가 주가에 미치는 영향을 단계적으로 추론합니다.
|
| 61 |
+
|
| 62 |
+
### 2. Reasoning Trace (단계별 사고 과정)
|
| 63 |
+
분석 과정을 투명하게 보여주는 Markdown Reasoning Trace를 생성합니다:
|
| 64 |
+
|
| 65 |
+
```
|
| 66 |
+
**Step 1**:
|
| 67 |
+
**Thought**: 삼성전자 3나노 양산 성공 뉴스의 기술적 의미를 파악해야 합니다.
|
| 68 |
+
**Action**: search
|
| 69 |
+
**Query**: 삼성전자 3나노 파운드리 수율 경쟁력 TSMC
|
| 70 |
+
**Confidence**: 35%
|
| 71 |
+
|
| 72 |
+
**Step 2**:
|
| 73 |
+
**Thought**: TSMC 대비 수율 격차가 핵심 변수이며, 양산 성공은 기술력 입증이나 수율 안정화까지 시간 필요.
|
| 74 |
+
**Action**: analyze
|
| 75 |
+
**Confidence**: 65%
|
| 76 |
+
|
| 77 |
+
**Step 3**:
|
| 78 |
+
**Thought**: 3나노 양산 성공은 중장기 긍정 시그널이나, 단기적으로 수율 이슈 리스크가 존재합니다.
|
| 79 |
+
**Action**: conclude
|
| 80 |
+
**Confidence**: 80%
|
| 81 |
+
```
|
| 82 |
+
|
| 83 |
+
### 3. 증권사 리포트 해석
|
| 84 |
+
애널리스트 리포트를 기반으로 핵심 포인트와 투자 시사점을 도출합니다.
|
| 85 |
+
|
| 86 |
+
### 4. 투자 리서치 리포트
|
| 87 |
+
7개 섹션으로 구조화된 투자 분석 보고서를 생성합니다:
|
| 88 |
+
Executive Summary / Key Metrics / 시장 동향 / 수급 분석 / 뉴스 영향 / 리스크 / 투자 의견
|
| 89 |
+
|
| 90 |
+
### 5. 도구 호출 (Tool Calling)
|
| 91 |
+
Search, Price, Investor 등 외부 도구와 연동하는 분석을 수행합니다.
|
| 92 |
+
|
| 93 |
+
---
|
| 94 |
+
|
| 95 |
## Training Pipeline
|
| 96 |
|
| 97 |
```
|
| 98 |
+
Qwen/Qwen2.5-7B-Instruct
|
| 99 |
+
|
|
| 100 |
+
v
|
| 101 |
+
SFT (58,206 samples)
|
| 102 |
+
├── 뉴스 분류 분석 10,830 (18.6%)
|
| 103 |
+
├── 극단 시그널 분석 9,603 (16.5%)
|
| 104 |
+
├── 증권사 리포트 (GPT-4o) 5,117 (8.8%)
|
| 105 |
+
├── 뉴스 영향 분석 4,839 (8.3%)
|
| 106 |
+
├── 멀티턴 대화 8,000 (13.8%)
|
| 107 |
+
├── Gap Fill (12 카테고리) 12,635 (21.7%)
|
| 108 |
+
│ ├── 밸류에이션 분석 2,000
|
| 109 |
+
│ ├── 수급/리스크/EOD 3,000
|
| 110 |
+
│ ├── 거절/유보 응답 1,000
|
| 111 |
+
│ ├── 간결 분석 1,000
|
| 112 |
+
│ ├── 심층 추론 (5+ steps) 1,000
|
| 113 |
+
│ └── 기타 (매크로, 섹터 등) 4,635
|
| 114 |
+
└── 기타 7,182 (12.3%)
|
| 115 |
+
|
|
| 116 |
+
v
|
| 117 |
+
DPO (26,421 pairs)
|
| 118 |
+
├── 중복 제거 기본 페어 12,000 (45.4%)
|
| 119 |
+
├── 다국어 leak 보강 5,997 (22.7%)
|
| 120 |
+
├── VELA ChatML 정렬 5,000 (18.9%)
|
| 121 |
+
├── 불충분 분석 교정 1,642 (6.2%)
|
| 122 |
+
├── 중국어 leak 교정 v2 1,216 (4.6%)
|
| 123 |
+
└── Reasoning Trace 정렬 566 (2.1%)
|
| 124 |
+
|
|
| 125 |
+
v
|
| 126 |
+
VELA v1.2
|
| 127 |
```
|
| 128 |
|
| 129 |
+
---
|
| 130 |
+
|
| 131 |
+
## Training Data Details
|
| 132 |
|
| 133 |
+
### SFT v3 (58,206 samples)
|
| 134 |
|
| 135 |
| Source | Samples | Ratio | Description |
|
| 136 |
|--------|---------|-------|-------------|
|
| 137 |
+
| `classified_news` | 10,830 | 18.6% | GPT-4o 분류된 뉴스 Reasoning Trace |
|
| 138 |
+
| `extreme_signals` | 9,603 | 16.5% | 급등/급락 시그널 뉴스 분석 |
|
| 139 |
+
| `securities_report_gpt4o` | 5,117 | 8.8% | 증권사 리포트 GPT-4o 재구성 |
|
| 140 |
+
| `analysis_news` | 4,839 | 8.3% | 일반 뉴스 영향 분석 |
|
| 141 |
+
| `multi_turn_2t` | 4,000 | 6.9% | 단일 턴 다양 종목 분석 |
|
| 142 |
+
| `multi_turn_4t` | 4,000 | 6.9% | 2턴 follow-up 대화 |
|
| 143 |
+
| **`valuation`** | **2,000** | **3.4%** | 밸류에이션 분석 (v3 Gap Fill) |
|
| 144 |
+
| `tool_calling` | 1,965 | 3.4% | Search/Price/Investor 도구 호출 |
|
| 145 |
+
| **`supply_demand_ext`** | **1,000** | **1.7%** | 수급 확장 분석 (v3) |
|
| 146 |
+
| **`risk`** | **1,000** | **1.7%** | 리스크 분석 (v3) |
|
| 147 |
+
| **`eod_report`** | **1,000** | **1.7%** | EOD 시황 리포트 (v3) |
|
| 148 |
+
| **`refusal`** | **1,000** | **1.7%** | 거절/유보 응답 (v3) |
|
| 149 |
+
| **`short_analysis`** | **1,000** | **1.7%** | 간결 분석 <500자 (v3) |
|
| 150 |
+
| **`deep_reasoning`** | **1,000** | **1.7%** | 심층 추론 5+ steps (v3) |
|
| 151 |
+
| **`low_confidence`** | **1,000** | **1.7%** | 저확신도 분석 (v3) |
|
| 152 |
+
| **`macro_impact_ext`** | **1,000** | **1.7%** | 거시경제 확장 (v3) |
|
| 153 |
+
| **`sector_theme`** | **1,000** | **1.7%** | 섹터/테마 분석 (v3) |
|
| 154 |
+
| `multi_stock_comparison` | 981 | 1.7% | 복수 종목 비교 분석 |
|
| 155 |
+
| `earnings_impact` | 971 | 1.7% | 실적 발표 영향 분석 |
|
| 156 |
+
| `risk_alert` | 948 | 1.6% | 리스크 경고 분석 |
|
| 157 |
+
| **`null_impact`** | **900** | **1.5%** | 주가 무영향 응답 (v3) |
|
| 158 |
+
| Other | 2,050 | 3.5% | batch5 fallback, 기존 수급/섹터/매크로 |
|
| 159 |
+
|
| 160 |
+
> v3에서 12개 카테고리 12,635개 샘플을 추가하여 데이터 갭을 보강했습니다.
|
| 161 |
+
> 생성 비용: Perplexity Sonar 2K ($4.60) + OpenAI gpt-4o-mini Batch API 10.6K ($2.76) = **~$7.36**
|
| 162 |
+
|
| 163 |
+
### DPO v2 (26,421 pairs)
|
| 164 |
+
|
| 165 |
+
| Source | Pairs | Ratio | Rejection Type |
|
| 166 |
+
|--------|-------|-------|----------------|
|
| 167 |
+
| `dpo_dedup` | 12,000 | 45.4% | 짧은/저품질 응답 vs 상세 분석 |
|
| 168 |
+
| `multilingual_aug` | 5,997 | 22.7% | 중국어/영어 leak, 짧은 응답, 저확신 |
|
| 169 |
+
| `vela_chatml` | 5,000 | 18.9% | 형식 오류, 짧은 응답 |
|
| 170 |
+
| `batch5_insuf_dpo` | 1,642 | 6.2% | 불충분 분석 품질 교정 |
|
| 171 |
+
| `chinese_leak_v2` | 1,216 | 4.6% | 중국어 문자 leak 집중 교정 |
|
| 172 |
+
| `reasoning_trace_2k` | 566 | 2.1% | 영어 leak, RT 형식 오류 |
|
| 173 |
+
|
| 174 |
+
### Data Version History
|
| 175 |
+
|
| 176 |
+
| Version | SFT Samples | DPO Pairs | Changes |
|
| 177 |
+
|---------|-------------|-----------|---------|
|
| 178 |
+
| v1.0 | 36,713 | 24,779 | 초기 학습 데이터 (JSON RT) |
|
| 179 |
+
| v1.1 | 36,713 | 24,779 | RT JSON → Markdown 변환 |
|
| 180 |
+
| v2.0 | 45,571 | 26,421 | +멀티턴 8K, +batch5 불충분 DPO |
|
| 181 |
+
| **v3.0** | **58,206** | **26,421** | **+Gap Fill 12개 카테고리 12,635** |
|
| 182 |
|
| 183 |
+
---
|
| 184 |
|
| 185 |
+
## Benchmarks
|
| 186 |
|
| 187 |
+
### Quantization Benchmark (GGUF)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
|
| 189 |
+
RTX 3060 12GB, llama-cpp-python, `n_gpu_layers=-1`, `n_ctx=4096`
|
| 190 |
|
| 191 |
+
| Format | Speed | Chinese Leak | Quality |
|
| 192 |
+
|--------|-------|--------------|---------|
|
| 193 |
+
| **Q4_K_M** | **36 tok/s** | 0/5 CLEAN | RT + Report OK |
|
| 194 |
+
| **Q8_0** | 25 tok/s | 0/5 CLEAN | RT + Report OK |
|
|
|
|
| 195 |
|
| 196 |
+
> Stress test 5회: Synthesis + 3K Reasoning Trace 교대 — 양쪽 모두 **Chinese leak 제로**
|
| 197 |
|
| 198 |
+
### MLX Benchmark (Apple Silicon)
|
| 199 |
|
| 200 |
+
M1 Max 32GB, MLX 4-bit 양자화
|
|
|
|
|
|
|
|
|
|
| 201 |
|
| 202 |
+
| Config | Quantization | Load Time | Speed | Memory |
|
| 203 |
+
|--------|-------------|-----------|-------|--------|
|
| 204 |
+
| **MLX 4-bit** | 4-bit (4.5 bpw) | 0.59s | **15.93 tok/s** | 4.4 GB |
|
| 205 |
+
| PyTorch (CPU) | BF16 | 0.10s | 4.93 tok/s | 0.3 GB |
|
| 206 |
+
| PyTorch + LoRA (CPU) | BF16 | 1.64s | 4.22 tok/s | 14.1 GB |
|
| 207 |
+
|
| 208 |
+
MLX 4-bit vs PyTorch CPU:
|
| 209 |
+
- **3.2x** faster inference (15.93 vs 4.93 tok/s)
|
| 210 |
+
- **73%** smaller model size (4 GB vs 15 GB)
|
| 211 |
+
- **68%** less memory (4.4 vs 14.1 GB)
|
| 212 |
+
|
| 213 |
+
### DPO Quality Improvements
|
| 214 |
+
|
| 215 |
+
| Metric | Before DPO | After DPO |
|
| 216 |
+
|--------|-----------|-----------|
|
| 217 |
+
| Chinese leak | Frequent | **0/10 CLEAN** |
|
| 218 |
+
| English leak | Occasional | Minimal |
|
| 219 |
+
| RT format compliance | ~80% | **~98%** |
|
| 220 |
+
| Korean fluency | Good | **Excellent** |
|
| 221 |
+
|
| 222 |
+
---
|
| 223 |
|
| 224 |
## Usage
|
| 225 |
|
|
|
|
| 231 |
model = Llama(
|
| 232 |
model_path="vela-q4_k_m.gguf", # or vela-q8_0.gguf
|
| 233 |
n_ctx=4096,
|
| 234 |
+
n_gpu_layers=-1,
|
| 235 |
chat_format="chatml",
|
| 236 |
)
|
| 237 |
|
|
|
|
| 255 |
model = AutoModelForCausalLM.from_pretrained(
|
| 256 |
"intrect/VELA",
|
| 257 |
torch_dtype=torch.bfloat16,
|
| 258 |
+
device_map="auto",
|
| 259 |
)
|
| 260 |
tokenizer = AutoTokenizer.from_pretrained("intrect/VELA")
|
| 261 |
|
| 262 |
messages = [
|
| 263 |
{"role": "system", "content": "당신은 한국 주식 전문 애널리스트입니다."},
|
| 264 |
+
{"role": "user", "content": "삼성전자 HBM 사업 전망을 분석해주세요."},
|
| 265 |
]
|
| 266 |
|
| 267 |
text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
|
|
|
|
| 271 |
**inputs,
|
| 272 |
max_new_tokens=1024,
|
| 273 |
temperature=0.7,
|
| 274 |
+
do_sample=True,
|
| 275 |
)
|
| 276 |
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
|
| 277 |
```
|
|
|
|
| 284 |
llm = LLM(model="intrect/VELA", dtype="bfloat16")
|
| 285 |
params = SamplingParams(temperature=0.7, max_tokens=1024)
|
| 286 |
|
| 287 |
+
outputs = llm.generate(
|
| 288 |
+
["삼성전자 HBM 시장 전망을 분석해주세요."],
|
| 289 |
+
params,
|
| 290 |
+
)
|
| 291 |
+
print(outputs[0].outputs[0].text)
|
| 292 |
+
```
|
| 293 |
+
|
| 294 |
+
### MLX (Apple Silicon)
|
| 295 |
+
|
| 296 |
+
```python
|
| 297 |
+
from mlx_lm import load, generate
|
| 298 |
+
|
| 299 |
+
model, tokenizer = load("intrect/VELA") # or local MLX 4-bit path
|
| 300 |
+
|
| 301 |
+
response = generate(
|
| 302 |
+
model,
|
| 303 |
+
tokenizer,
|
| 304 |
+
prompt="삼성전자 3나노 양산 뉴스 분석",
|
| 305 |
+
max_tokens=1024,
|
| 306 |
+
)
|
| 307 |
+
print(response)
|
| 308 |
```
|
| 309 |
|
| 310 |
### Ollama
|
|
|
|
| 322 |
PARAMETER num_ctx 4096
|
| 323 |
```
|
| 324 |
|
| 325 |
+
---
|
| 326 |
+
|
| 327 |
## Output Format
|
| 328 |
|
| 329 |
+
VELA는 두 가지 출력 모드를 지원합니다.
|
| 330 |
|
| 331 |
### 1. Reasoning Trace (분석 과정)
|
| 332 |
|
| 333 |
+
Markdown 형식으로 단계별 사고 과정을 투명하게 보여줍니다:
|
| 334 |
+
|
| 335 |
+
```markdown
|
| 336 |
+
**Step 1**:
|
| 337 |
+
**Thought**: 삼성전자 HBM3E 12단 양산 관련 뉴스를 확인합니다. 수주 현황과 시장 점유율 파악이 필요합니다.
|
| 338 |
+
**Action**: search
|
| 339 |
+
**Query**: 삼성전자 HBM3E 12단 수주 시장점유율
|
| 340 |
+
**Confidence**: 45%
|
| 341 |
+
|
| 342 |
+
**Step 2**:
|
| 343 |
+
**Thought**: SK하이닉스 대비 삼성전자의 HBM 시장 점유율 확대 추세를 분석합니다.
|
| 344 |
+
**Action**: analyze
|
| 345 |
+
**Confidence**: 70%
|
| 346 |
+
|
| 347 |
+
**Step 3**:
|
| 348 |
+
**Thought**: HBM3E 양산 성공은 긍정적이나, NVIDIA 인증 지연 리스크가 존재합니다.
|
| 349 |
+
**Action**: conclude
|
| 350 |
+
**Confidence**: 82%
|
| 351 |
```
|
| 352 |
|
| 353 |
### 2. Synthesis Report (최종 리포트)
|
| 354 |
|
| 355 |
+
7개 섹션으로 구조화된 투자 분석 보고서:
|
| 356 |
+
|
| 357 |
```markdown
|
| 358 |
+
# 분석 리포트: 삼성전자 (005930.KS)
|
| 359 |
|
| 360 |
## Executive Summary
|
| 361 |
[2-3문장 핵심 요약]
|
|
|
|
| 363 |
## Key Metrics
|
| 364 |
| 지표 | 수치 |
|
| 365 |
|------|------|
|
| 366 |
+
| 현재가 | 181,200원 |
|
| 367 |
+
| 12M FWD PER | 15.4배 |
|
| 368 |
+
| PBR | 3.13배 |
|
| 369 |
|
| 370 |
## 시장 동향 분석
|
| 371 |
## 수급 분석
|
|
|
|
| 374 |
## 투자 의견
|
| 375 |
```
|
| 376 |
|
| 377 |
+
---
|
| 378 |
+
|
| 379 |
+
## Architecture
|
| 380 |
+
|
| 381 |
+
VELA는 단독 LLM으로도 동작하지만, 에이전트 시스템과 결합하면 실시간 데이터 기반 분석이 가능합니다:
|
| 382 |
+
|
| 383 |
+
```
|
| 384 |
+
[사용자 쿼리]
|
| 385 |
+
|
|
| 386 |
+
v
|
| 387 |
+
[멀티소스 검색] ──�� DuckDuckGo (최신 뉴스)
|
| 388 |
+
| ├── 한국투자증권 KIS (현재가, PER, PBR, EPS, 수급)
|
| 389 |
+
| ├── FnGuide (사업개요, 재무정보)
|
| 390 |
+
| └── FAISS 317K (과거 유사 뉴스 + 주가 반응)
|
| 391 |
+
v
|
| 392 |
+
[컨텍스트 주입] → System Prompt + 검색 결과
|
| 393 |
+
|
|
| 394 |
+
v
|
| 395 |
+
[VELA LLM] → Reasoning Trace (Step-by-Step)
|
| 396 |
+
|
|
| 397 |
+
v
|
| 398 |
+
[리서치 리포트]
|
| 399 |
+
```
|
| 400 |
|
| 401 |
+
---
|
|
|
|
|
|
|
|
|
|
| 402 |
|
| 403 |
## Limitations
|
| 404 |
|
| 405 |
+
- **실시간 시세**: 모델 자체는 실시간 데이터에 접근하지 못합니다 (에이전트 시스템 필요)
|
| 406 |
+
- **수치 할루시네이션**: 구체적 수치(주가, PER 등)는 외부 검증이 필요합니다
|
| 407 |
+
- **컨텍스트**: 8K 토큰 제한으로 긴 문서 처리에 한계가 있습니다
|
| 408 |
+
- **투자 조언 아님**: 정보 제공 목적이며, 투자 결정은 본인의 판단과 책임입니다
|
| 409 |
+
|
| 410 |
+
---
|
| 411 |
|
| 412 |
## Citation
|
| 413 |
|
|
|
|
| 421 |
}
|
| 422 |
```
|
| 423 |
|
| 424 |
+
---
|
| 425 |
+
|
| 426 |
## Version History
|
| 427 |
|
| 428 |
+
| Version | Date | Changes |
|
| 429 |
+
|---------|------|---------|
|
| 430 |
+
| **v1.2** | **2026-02-16** | **SFT v3 (58K) Gap Fill 12카테고리, Markdown RT, 벤치마크 추가** |
|
| 431 |
+
| v1.1 | 2026-02-12 | GGUF 양자화 모델 추가 (Q4_K_M, Q8_0) |
|
| 432 |
| v1.0 | 2026-01-28 | DPO 병합, 중국어/영어 leak 해결 |
|
| 433 |
| v0.9 | 2026-01-15 | SFT 베이스 모델 공개 |
|
| 434 |
|