File size: 5,513 Bytes
ca31cf2
 
 
 
 
 
 
49e7958
 
299677b
49e7958
299677b
49e7958
299677b
49e7958
299677b
 
 
 
 
 
 
 
 
 
 
 
 
 
49e7958
9deeb46
49e7958
9deeb46
 
 
49e7958
299677b
49e7958
299677b
 
 
 
 
49e7958
299677b
9deeb46
299677b
 
 
9deeb46
299677b
 
 
 
 
 
 
 
 
 
 
 
 
 
9deeb46
 
299677b
 
 
 
 
9deeb46
 
 
299677b
 
 
9deeb46
 
299677b
 
49e7958
 
299677b
 
 
 
 
49e7958
 
9deeb46
49e7958
299677b
9deeb46
49e7958
299677b
 
 
9deeb46
299677b
 
 
49e7958
 
299677b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49e7958
9deeb46
 
299677b
9deeb46
 
299677b
9deeb46
299677b
9deeb46
299677b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49e7958
299677b
49e7958
ca31cf2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
---
license: mit
language:
- en
base_model:
- levossadtchi/QED-75M
---
# QED-75M Web (ONNX)

QED-75M — языковая модель (384 hidden, 32 слоя, 75M параметров), оптимизированная для веб-деплоя.

**Репозиторий:** https://huggingface.co/levossadtchi/QED-75M_web

---

## 📁 Файлы

| Файл | Описание | Размер |
|------|----------|--------|
| `model.onnx` | Веса модели (FP32) | ~365 MB |
| `tokenizer.json` | Словарь токенизатора | ~3 MB |
| `tokenizer_config.json` | Конфиг токенизатора | <1 KB |
| `config.json` | Архитектура модели | <1 KB |
| `generation_config.json` | Параметры генерации | <1 KB |
| `index.html` | Демо-плейграунд | <10 KB |

---

## 💬 Формат промптов

Модель обучена на чат-формате. Для лучших результатов используйте:

```
<|user|>ваш вопрос<|assistant|>
```

**Примеры:**

| Промпт | Ожидаемый ответ |
|--------|-----------------|
| `<|user|>What is 2+2?<|assistant|>` | "The answer is 2 + 2 = 4." |
| `<|user|>Explain gravity in one sentence.<|assistant|>` | "Gravity is a fundamental force..." |
| `<|user|>Write a haiku about cats.<|assistant|>` | Стихотворение про котов |

---

## 🚀 Использование

### Вариант 1: Transformers.js (рекомендуется)

```bash
npm install @xenova/transformers
```

```javascript
import { AutoTokenizer, AutoModelForCausalLM } from '@xenova/transformers';

// Загрузка модели
const tokenizer = await AutoTokenizer.from_pretrained('levossadtchi/QED-75M_web');
const model = await AutoModelForCausalLM.from_pretrained('levossadtchi/QED-75M_web', {
    quantized: true,  // Использовать int8 квантование
    dtype: 'q8',
    device: 'webgpu',  // или 'wasm' для CPU
});

// Генерация
const prompt = '<|user|>What is 2+2?<|assistant|>';
const inputs = await tokenizer(prompt, { return_tensors: 'pt' });

const outputs = await model.generate({
    ...inputs,
    max_new_tokens: 128,
    temperature: 0.7,
    top_k: 40,
    do_sample: true,
    eos_token_id: tokenizer.eos_token_id,
    pad_token_id: tokenizer.pad_token_id,
});

const text = tokenizer.decode(outputs[0], { skip_special_tokens: false });
console.log(text);
```

### Вариант 2: ONNX Runtime Web (низкоуровневый)

```bash
npm install onnxruntime-web
```

```javascript
import * as ort from 'onnxruntime-web';

// Загрузка
const session = await ort.InferenceSession.create('model.onnx');

// Инференс
const inputIds = [1, 15826, 15, 638]; // токены
const tensor = new ort.Tensor('int64', BigInt64Array.from(inputIds.map(BigInt)), [1, inputIds.length]);
const { logits } = await session.run({ input_ids: tensor });

// Greedy decoding
const nextToken = logits.data.reduce((maxIdx, val, idx) => val > logits.data[maxIdx] ? idx : maxIdx, 0);
```

### Вариант 3: Готовый HTML

Откройте `index.html` в браузере или задеплойте на Vercel/Netlify.

---

## ⚙️ Параметры генерации

| Параметр | По умолчанию | Описание |
|----------|--------------|----------|
| `max_new_tokens` | 128 | Макс. количество новых токенов |
| `temperature` | 0.7 | Креативность (0 = greedy, >1 = хаос) |
| `top_k` | 40 | Сэмплирование из top-k токенов |
| `top_p` | 0.9 | Nucleus sampling (альтернатива top_k) |
| `repetition_penalty` | 1.1 | Штраф за повторы |

**Рекомендации:**
- Для фактов: `temperature=0.5, top_k=30`
- Для креатива: `temperature=0.8, top_k=50`
- Для кода: `temperature=0.2, top_k=20`

---

## 🏗 Архитектура

| Параметр | Значение |
|----------|----------|
| Vocabulary | 49,152 токенов |
| Hidden dim | 384 |
| Layers | 32 |
| Attention heads | 6 |
| FFN dim | 1,024 |
| Max length | 8,192 токена |
| RoPE θ | 10,000 |
| RMSNorm ε | 1e-5 |

---

## 📦 Квантование

Для уменьшения размера модели используйте int8 квантование:

```bash
pip install onnxruntime-tools

python -c "
from onnxruntime.quantization import quantize_dynamic, QuantType
quantize_dynamic('model.onnx', 'model_quantized.onnx', weight_type=QuantType.QUInt8)
"
```

**Размеры:**
- Оригинал (FP32): ~365 MB
- Квантованная (INT8): ~95 MB (−74%)

---

## 🌐 Браузерная поддержка

| Технология | Поддержка | Размер | Скорость |
|------------|-----------|--------|----------|
| **WebGPU** | Chrome 113+, Edge | ~100 MB | ⚡⚡⚡ Быстро |
| **WASM** | Все браузеры | ~100 MB | ⚡⚡ Средне |
| **CPU** | Резервный режим | ~365 MB | ⚡ Медленно |

---

## 🔧 Локальный запуск

```bash
# Клонировать репозиторий
git lfs install
git clone https://huggingface.co/levossadtchi/QED-75M_web

# Запустить локальный сервер
cd QED-75M_web
python -m http.server 8000

# Открыть в браузере
open http://localhost:8000/index.html
```

---

## 📝 Лицензия

MIT