File size: 4,227 Bytes
97548e6
 
 
 
 
 
 
 
 
 
215ef1e
 
 
 
 
 
 
 
 
 
 
474a908
215ef1e
 
 
 
 
 
 
 
 
 
 
474a908
215ef1e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
474a908
215ef1e
 
 
 
 
 
 
 
 
 
 
 
 
474a908
215ef1e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
license: apache-2.0
language:
- ru
- en
base_model:
- Qwen/Qwen3-8B
pipeline_tag: text-generation
---

Avibe-eagle — это реализация спекулятивного декодинга на основе алгоритма EAGLE-3 для модели [Avibe](https://huggingface.co/AvitoTech/avibe).
Модель создана командой Авито Тех для ускорения генерации базовой 8B модели без потери качества. 

Для обучения драфт-модели мы использовали около 100 млн токенов из SFT-датасета, который использовался для обучения исходной модели avibe. Примеры были выбраны преимущественно на русском языке, с сохранением доменной и стилевой близости к основной модели. 

Результаты внутренних замеров показали, что использование eagle-3 через sglang в различных сетапах (разное количество предсказываемых токенов, разные top-k и т.д) на разовых запросах дают ускорение до 2.7х, которое постепенно снижается и становится нулевым при batch_size = 64.

Модель можно запускать с использованием популярных движков vllm и sglang

### Пример запуска vllm-сервера

```sh
vllm serve AvitoTech/avibe \
    --host 0.0.0.0 \
    --port 8000 \
    --seed 42 \
    --served-model-name Avibe-8B-eagle3 \
    --dtype float16 \
    --speculative-config '{"model": "AvitoTech/avibe-eagle", "num_speculative_tokens": 5, "method":"eagle3"}'
```

Пример запроса 

```py
import openai

client = openai.Client(
    base_url="http://0.0.0.0:8000/v1",
    api_key=None
)

messages = [
    {"role": "system", "content": "Ты полезный ассистент"},
    {"role": "user", "content": "Напиши рецепт борща"}
]

response = client.chat.completions.create(
    model="Avibe-8B-eagle3",
    messages=messages,
    max_tokens=256,
    temperature=0.7
)

print(response.choices[0].message.content)

import time
start = time.perf_counter()
response = client.chat.completions.create(
    model="Avibe-8B",
    messages=messages,
    max_tokens=256,
    temperature=0.7
)

elapsed = time.perf_counter() - start
tokens = response.usage.completion_tokens

print(f"\nСтатистика:")
print(f"- Токенов сгенерировано: {tokens}")
print(f"- Время: {elapsed:.2f}s")
print(f"- Скорость: {tokens/elapsed:.1f} токенов/сек")
```

### Пример запуска sglang-сервера

```sh
python3 -m sglang.launch_server --model AvitoTech/avibe \
--served_model_name Avibe-8B-eagle3 \
--speculative-algorithm EAGLE3  \
--speculative-draft-model-path AvitoTech/avibe-eagle \
--speculative-num-steps 5 \
--speculative-eagle-topk 1 \
--dtype float16 \
--host 0.0.0.0 \
--port 8000
```

Пример запроса с использованем OpenAI-API точно такой же как и для vllm 

```py
import openai

client = openai.Client(
    base_url="http://0.0.0.0:8000/v1",
    api_key=None
)

messages = [
    {"role": "system", "content": "Ты полезный ассистент"},
    {"role": "user", "content": "Напиши рецепт борща"}
]

response = client.chat.completions.create(
    model="Avibe-8B-eagle3",
    messages=messages,
    max_tokens=256,
    temperature=0.7
)

print(response.choices[0].message.content)

import time
start = time.perf_counter()
response = client.chat.completions.create(
    model="Avibe-8B",
    messages=messages,
    max_tokens=256,
    temperature=0.7
)

elapsed = time.perf_counter() - start
tokens = response.usage.completion_tokens

print(f"\nСтатистика:")
print(f"- Токенов сгенерировано: {tokens}")
print(f"- Время: {elapsed:.2f}s")
print(f"- Скорость: {tokens/elapsed:.1f} токенов/сек")
```