File size: 4,240 Bytes
97548e6
 
 
 
 
 
 
 
278885f
 
97548e6
 
215ef1e
 
 
 
 
 
 
 
 
 
 
a4e1913
215ef1e
 
 
 
 
 
 
 
 
 
 
a4e1913
215ef1e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a4e1913
215ef1e
 
 
 
 
 
 
 
 
 
 
 
 
a4e1913
215ef1e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
278885f
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
---
license: apache-2.0
language:
- ru
- en
base_model:
- Qwen/Qwen3-8B
pipeline_tag: text-generation
tags:
- Eagle
---

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} токенов/сек")
```