> For the complete documentation index, see [llms.txt](https://docs.clore.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.clore.ai/guides/guides_v2-ru/yazykovye-modeli/powerinfer.md).

# PowerInfer

**Гибридный вывод LLM на CPU/GPU, использующий локальность активации** — запускайте модели с 70 млрд параметров на одном потребительском GPU, интеллектуально распределяя вычисления между CPU и GPU.

> 🌟 **8 000+ звезд на GitHub** | Разработано в SJTU IPADS | Лицензия MIT

***

## Что такое PowerInfer?

PowerInfer — это высокопроизводительный движок вывода для больших языковых моделей, использующий ключевое наблюдение: **LLM демонстрируют сильную локальность активации** — небольшая подмножество нейронов («горячие нейроны») постоянно активируется на большинстве шагов вывода, тогда как большинство остаются неактивными.

PowerInfer использует это свойство, чтобы:

1. **Оставлять горячие нейроны на GPU** для быстрого вычисления
2. **Выгружать холодные нейроны на CPU/RAM** без существенной потери качества
3. **Динамически направлять** вычисления между CPU и GPU на основе шаблонов активации

Итог: вы можете запускать модель 70B всего с **16 ГБ VRAM** вместо требования 140+ ГБ, полностью размещенных на GPU.

### Ключевые возможности

* **Поддержка потребительских GPU** — RTX 3090/4090 могут запускать модели 70B
* **Планирование с учетом нейронов** — предиктор определяет маршрутизацию на CPU или GPU для каждого запуска вывода
* **Минимальное ухудшение качества** — сохраняет >95% качества полной точности
* **Совместимость с llama.cpp** — поддержка формата GGUF
* **Выгрузка на CPU с учетом NUMA** — оптимизировано для CPU с большим числом ядер

### Зачем использовать PowerInfer на Clore.ai?

Clore.ai сдает GPU в аренду значительно дешевле, чем облачные альтернативы. С PowerInfer:

* Запускайте **Llama 2 70B** на **одном RTX 4090** (24 ГБ VRAM)
* Сократите расходы на аренду GPU по сравнению с многопроцессорными конфигурациями
* Обрабатывайте длинные окна контекста, используя RAM CPU как буфер переполнения
* Запускайте модели, для которых раньше требовались дорогие инстансы A100/H100

***

## Требования к оборудованию

| Размер модели | Мин. VRAM | Рекомендуемая RAM | Производительность |
| ------------- | --------- | ----------------- | ------------------ |
| 7B            | 4 ГБ      | 16GB              | Отлично            |
| 13B           | 6 ГБ      | 32GB              | Очень хорошо       |
| 34B           | 12GB      | 64GB              | Хорошо             |
| 70B           | 16GB      | 128 ГБ            | Умеренная          |

{% hint style="info" %}
**CPU имеет значение:** PowerInfer выгружает холодные нейроны на CPU. CPU с большим числом ядер (AMD EPYC, Intel Xeon) и высокой пропускной способностью памяти значительно повышает производительность для больших моделей.
{% endhint %}

***

## Быстрый старт на Clore.ai

### Шаг 1: выберите ваш сервер

На [маркетплейсе clore.ai](https://clore.ai) отфильтруйте по:

* **GPU NVIDIA** с 16 ГБ+ VRAM (RTX 3090, RTX 4090, A100)
* **Высокое число ядер CPU** (идеально 16+ ядер)
* **64 ГБ+ RAM** для моделей 70B, 32 ГБ для моделей 13B

### Шаг 2: создайте собственный Docker-образ

PowerInfer требует собственной настройки Docker. Используйте этот `Dockerfile`:

```dockerfile
FROM nvidia/cuda:12.8.1-devel-ubuntu22.04

# Установить зависимости
RUN apt-get update && apt-get install -y \\
    git \\
    cmake \\
    build-essential \\
    python3 \\
    python3-pip \\
    curl \\
    wget \\
    openssh-server \\
    && rm -rf /var/lib/apt/lists/*

# Настройка SSH
RUN mkdir /var/run/sshd && \\
    echo 'root:powerinfer' | chpasswd && \\
    sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

# Клонируем и собираем PowerInfer
RUN git clone https://github.com/SJTU-IPADS/PowerInfer.git /app/PowerInfer
WORKDIR /app/PowerInfer

RUN mkdir build && cd build && \\
    cmake .. -DLLAMA_CUBLAS=ON && \\
    cmake --build . --config Release -j$(nproc)

# Установка зависимостей Python для solver
RUN pip3 install torch numpy scipy

EXPOSE 22

CMD ["/bin/bash", "-c", "service ssh start && tail -f /dev/null"]
```

Соберите и отправьте в Docker Hub или используйте встроенно с Clore.ai:

```bash
docker build -t yourname/powerinfer:latest .
docker push yourname/powerinfer:latest
```

### Шаг 3: разверните на Clore.ai

В вашем заказе на Clore.ai укажите:

* **Docker-образ:** `yourname/powerinfer:latest`
* **Порты:** `22` (SSH)
* **Окружение:** `NVIDIA_VISIBLE_DEVICES=all`

***

## Сборка PowerInfer из исходного кода

Если предпочитаете собирать внутри контейнера:

```bash
# Подключитесь по SSH к вашему серверу Clore.ai
ssh root@<clore-node-ip> -p <ssh-port>

# Установите необходимые пакеты
apt-get update && apt-get install -y git cmake build-essential python3 python3-pip

# Клонируйте PowerInfer
git clone https://github.com/SJTU-IPADS/PowerInfer.git
cd PowerInfer

# Сборка с поддержкой CUDA
mkdir build && cd build
cmake .. -DLLAMA_CUBLAS=ON -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release -j$(nproc)

echo "Сборка завершена!"
ls -la bin/
```

### Проверка сборки

```bash
./build/bin/main --help
# Должна выводиться справка CLI PowerInfer
```

***

## Получение моделей

### Скачайте модели GGUF

PowerInfer использует формат GGUF (тот же, что и llama.cpp):

```bash
# Установите CLI HuggingFace
pip3 install huggingface_hub

# Скачайте Llama 2 7B Q4 (рекомендуется для тестирования)
huggingface-cli download TheBloke/Llama-2-7B-Chat-GGUF \\
  llama-2-7b-chat.Q4_K_M.gguf \\
  --local-dir ./models

# Скачайте Llama 2 70B Q4 (требуется 16 ГБ+ VRAM)  
huggingface-cli download TheBloke/Llama-2-70B-Chat-GGUF \\
  llama-2-70b-chat.Q4_K_M.gguf \\
  --local-dir ./models
```

### Создание предиктора нейронов (требуется для PowerInfer)

PowerInfer нужен предиктор активации нейронов для каждой модели. Это ключевое отличие от llama.cpp:

```bash
# Установите зависимости Python для solver
pip3 install torch numpy scipy

# Сгенерируйте предиктор для вашей модели
python3 PowerInfer/solver/solve.py \\
  --model ./models/llama-2-7b-chat.Q4_K_M.gguf \\
  --output ./predictors/llama-2-7b-chat \\
  --target-gpu-layers 20 \\
  --gpu-memory-gb 16

# Это создает файлы предиктора в ./predictors/
ls ./predictors/llama-2-7b-chat/
```

{% hint style="warning" %}
**Время генерации предиктора:** Создание предиктора нейронов может занять 30–60 минут в зависимости от размера модели. Это одноразовая операция — предиктор используется повторно при последующих запусках.
{% endhint %}

***

## Запуск вывода

### Базовый вывод (без предиктора)

Для тестирования без генерации предиктора (стандартное разделение на GPU/CPU):

```bash
./build/bin/main \\
  -m ./models/llama-2-7b-chat.Q4_K_M.gguf \\
  --gpu-layers 20 \\
  -p "Расскажите мне о квантовых вычислениях" \\
  -n 256
```

### Режим PowerInfer (с предиктором)

Полный режим PowerInfer с маршрутизацией с учетом нейронов:

```bash
./build/bin/main \\
  -m ./models/llama-2-7b-chat.Q4_K_M.gguf \\
  --predictor-path ./predictors/llama-2-7b-chat \\
  --gpu-layers 20 \\
  --n-gpu-layers 20 \\
  -p "В чем смысл жизни?" \\
  -n 512 \\
  --ctx-size 4096
```

### Интерактивный режим чата

```bash
./build/bin/main \\
  -m ./models/llama-2-7b-chat.Q4_K_M.gguf \\
  --predictor-path ./predictors/llama-2-7b-chat \\
  --gpu-layers 20 \\
  -i \\
  --ctx-size 4096 \\
  --temp 0.7 \\
  --top-p 0.9 \\
  --repeat-penalty 1.1 \\
  --color
```

### Режим сервера (API, совместимый с OpenAI)

```bash
./build/bin/server \\
  -m ./models/llama-2-7b-chat.Q4_K_M.gguf \\
  --predictor-path ./predictors/llama-2-7b-chat \\
  --gpu-layers 20 \\
  --host 0.0.0.0 \
  --port 8080 \\
  --ctx-size 4096
```

***

## Оптимизация разделения слоев на GPU

Параметр `--gpu-layers` определяет, сколько слоев трансформера держать на GPU. Настраивайте это в зависимости от вашей VRAM:

```bash
# Проверьте доступную VRAM
nvidia-smi --query-gpu=memory.free,memory.total --format=csv

# Правило грубой оценки для моделей Q4:
# 7B:  ~0.13 ГБ на слой  → карта 24 ГБ = ~184 слоя (все)
# 13B: ~0.18 ГБ на слой  → карта 24 ГБ = ~133 слоя
# 70B: ~0.23 ГБ на слой  → карта 24 ГБ = ~104 слоя (из 80 всего)
```

**Руководство по распределению слоев:**

| VRAM GPU | Модель 7B | Модель 13B | Модель 34B | Модель 70B |
| -------- | --------- | ---------- | ---------- | ---------- |
| 8 ГБ     | Все (32)  | 20 слоев   | 10 слоев   | 4 слоя     |
| 16GB     | Все (32)  | Все (40)   | 25 слоев   | 10 слоев   |
| 24 ГБ    | Все (32)  | Все (40)   | Все (60)   | 20 слоев   |
| 48 ГБ    | Все (32)  | Все (40)   | Все (60)   | Все (80)   |

***

## Бенчмарки производительности

### Сравнение пропускной способности (Llama 2 70B, RTX 3090)

| Движок                 | Слои GPU              | Токенов/сек  |
| ---------------------- | --------------------- | ------------ |
| llama.cpp (только GPU) | 20/80                 | \~4 t/s      |
| llama.cpp (только CPU) | 0/80                  | \~1 t/s      |
| **PowerInfer**         | **20/80 + предиктор** | **\~12 t/s** |

{% hint style="success" %}
**Ускорение в 3 раза** по сравнению со стандартным llama.cpp при выводе больших моделей на потребительских GPU — типичный результат благодаря планированию PowerInfer с учетом нейронов.
{% endhint %}

***

## Запуск как службы

Создайте systemd-службу для постоянного обслуживания API:

```bash
cat > /etc/systemd/system/powerinfer.service << 'EOF'
[Unit]
Описание=Сервер LLM PowerInfer
After=network.target

[Service]
Type=simple
WorkingDirectory=/app/PowerInfer
ExecStart=/app/PowerInfer/build/bin/server \\
  -m /models/llama-2-13b-chat.Q4_K_M.gguf \\
  --predictor-path /predictors/llama-2-13b-chat \\
  --gpu-layers 30 \\
  --host 0.0.0.0 \
  --port 8080 \\
  --ctx-size 4096
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable powerinfer
systemctl start powerinfer
systemctl status powerinfer
```

***

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

После запуска сервера используйте любой клиент, совместимый с OpenAI:

```python
from openai import OpenAI

client = OpenAI(
    base_url="http://<clore-node-ip>:<port>/v1",
    api_key="none"
)

response = client.chat.completions.create(
    model="local-model",
    messages=[
        {"role": "user", "content": "Объясни нейросети простыми словами"}
    ],
    max_tokens=256
)
print(response.choices[0].message.content)
```

***

## Устранение неполадок

### Недостаточно памяти CUDA

```bash
# Сократите число слоев на GPU
./build/bin/main -m model.gguf --gpu-layers 10  # Уменьшите с 20

# Проверьте, что использует VRAM
nvidia-smi

# Освободите память GPU
sudo fuser -v /dev/nvidia*  # Посмотреть процессы
```

### Медленный вывод на CPU

```bash
# Включите оптимизацию потоков CPU
./build/bin/main -m model.gguf --threads $(nproc) --gpu-layers 20

# Проверьте топологию NUMA
numactl --hardware

# Привяжите к NUMA-узлу, ближайшему к GPU
numactl --cpunodebind=0 --membind=0 ./build/bin/main -m model.gguf
```

### Сборка не удается

```bash
# Убедитесь, что установлен CUDA Toolkit
nvcc --version

# Проверьте версию CMake (нужна 3.14+)
cmake --version

# Чистая сборка
rm -rf build && mkdir build
cd build && cmake .. -DLLAMA_CUBLAS=ON -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda
```

{% hint style="danger" %}
**Распространенная проблема:** Если `cmake` не может найти CUDA, задайте `переменную окружения CUDA_HOME` следующим образом: `export CUDA_HOME=/usr/local/cuda` до запуска cmake.
{% endhint %}

***

## Рекомендации по GPU для Clore.ai

Гибридная CPU/GPU-конструкция PowerInfer меняет экономику запуска больших моделей. Серверы Clore.ai с GPU с большим объемом VRAM И быстрыми CPU — идеальный вариант.

| GPU        | VRAM  | Цена Clore.ai                               | Макс. модель (Q4)                     | Пропускная способность (Llama 2 70B Q4) |
| ---------- | ----- | ------------------------------------------- | ------------------------------------- | --------------------------------------- |
| RTX 3090   | 24 ГБ | $0.07–0.21/ч                                | 70B (с 64 ГБ+ RAM)                    | \~8–12 ток/с                            |
| RTX 4090   | 24 ГБ | $0.14–0.42/ч                                | 70B (более быстрое выгружение на CPU) | \~12–18 ток/с                           |
| A100 40 ГБ | 40 ГБ | [голое железо](https://clore.ai/bare-metal) | 70B (минимальная выгрузка)            | \~35–45 ток/с                           |
| A100 80 ГБ | 80 ГБ | [голое железо](https://clore.ai/bare-metal) | 70B в полной точности                 | \~50–60 ток/с                           |

{% hint style="info" %}
**Оптимальная точка PowerInfer:** RTX 3090 за $0.07–0.21/час при запуске Llama 2 70B Q4 — это прорыв для пользователей с ограниченным бюджетом. Вы получаете модель 70B в 10–12 раз дешевле, чем аренда A100. Пропускная способность ниже (\~10 ток/с), но для исследований или вывода при низкой нагрузке это непревзойденная ценность.
{% endhint %}

**CPU важен не меньше, чем GPU:** PowerInfer выгружает «холодные» нейроны на CPU. Серверы Clore.ai с процессорами AMD EPYC или Intel Xeon (много ядер, высокая пропускная способность памяти) будут значительно превосходить односокетные потребительские CPU. Перед арендой для работы с большими моделями проверьте характеристики сервера.

**Узкое место пропускной способности памяти:** Для моделей 70B пропускная способность RAM CPU является ограничивающим фактором во время вычисления холодных нейронов. Серверы с DDR5 ECC RAM или архитектурами, близкими к HBM, покажут лучшую производительность.

***

## Ресурсы

* 🐙 **GitHub:** [github.com/SJTU-IPADS/PowerInfer](https://github.com/SJTU-IPADS/PowerInfer)
* 📄 **Научная статья:** [PowerInfer: Fast Large Language Model Serving with a Consumer-grade GPU](https://arxiv.org/abs/2312.12456)
* 🤗 **Модели GGUF:** [huggingface.co/TheBloke](https://huggingface.co/TheBloke)
* 🧩 **Лаборатория SJTU IPADS:** [ipads.se.sjtu.edu.cn](https://ipads.se.sjtu.edu.cn)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.clore.ai/guides/guides_v2-ru/yazykovye-modeli/powerinfer.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
