Развернуть Qwen2.5 бесплатно на CPU: гайд с Gradio и Hugging Face | AiManual
AiManual Logo Ai / Manual.
05 Фев 2026 Гайд

Заберите свой бесплатный AI-ассистент: Qwen2.5 на CPU за 15 минут

Пошаговый гайд по запуску AI-ассистента Qwen2.5-3B на CPU без GPU. Бесплатный хостинг на Hugging Face Spaces, квантование, Gradio интерфейс. Работает даже на Ra

Почему все гонятся за GPU, когда CPU хватает?

Каждый второй гайд по запуску LLM начинается с "возьмите RTX 4090" или "арендуйте A100". Это смешно. Большинству не нужны 70 миллиардов параметров и генерация со скоростью света. Нужен рабочий инструмент, который отвечает на вопросы, помогает с кодом и не требует ипотеки на видеокарту.

Qwen2.5-3B-Instruct - это как раз такая модель. 3 миллиарда параметров, качество ответов на уровне GPT-3.5, и самое главное - она отлично работает на обычном процессоре. Особенно если применить квантование.

На февраль 2026 года Qwen2.5-3B остается одной из лучших маленьких моделей для CPU. Разработчики из Alibaba добавили улучшенное понимание контекста (до 32K токенов) и оптимизировали архитектуру для эффективного вывода на слабом железе.

Магия квантования: как 12 ГБ превращаются в 2 ГБ

Оригинальная модель Qwen2.5-3B весит около 12 ГБ в формате FP16. На обычном ноутбуке это уже проблема. Но есть трюк - квантование Q4_K_M.

Что это значит простыми словами? Мы уменьшаем точность чисел с 16 бит до 4 бит. Вместо 65,536 возможных значений оставляем 16. Потеря качества? Минимальная. Выигрыш в памяти? В 3-4 раза.

Формат Размер Качество Скорость на CPU
FP16 (оригинал) ~12 ГБ 100% 1-2 токена/сек
Q4_K_M (квантованная) ~2.1 ГБ 95-98% 10-15 токенов/сек

Разница в 10 раз по скорости - это не опечатка. Квантованная модель не только меньше, но и быстрее, потому что процессору проще работать с 4-битными числами.

Hugging Face Spaces: бесплатный хостинг с подвохом

Можно запустить модель на своем компьютере. Но зачем, если есть Hugging Face Spaces? Бесплатно, всегда онлайн, можно делиться ссылкой.

Подвох в одном: на бесплатном тарифе вам дают 2 CPU ядра и 16 ГБ RAM. Этого хватит для Qwen2.5-3B в квантованном виде, но придется оптимизировать.

Важно: бесплатные Spaces "засыпают" после 48 часов неактивности. Первый запрос после пробуждения займет 30-60 секунд (модель загружается в память). Если нужен 24/7 онлайн - рассмотрите Oracle Cloud или другой облачный провайдер.

1 Готовим рабочее пространство

Первое - создаем новый Space на Hugging Face:

  1. Зайдите на huggingface.co/spaces
  2. Нажмите "Create new Space"
  3. Выберите "Gradio" как SDK
  4. Название: qwen2.5-assistant (или свое)
  5. Visibility: Public (если хотите делиться)
  6. Нажмите "Create Space"

Теперь у вас есть пустой репозиторий с тремя файлами: README.md, app.py, requirements.txt. Последние два - наше все.

2 Пишем requirements.txt: что НЕЛЬЗЯ ставить

Самая частая ошибка - пытаться установить torch с CUDA. На Spaces нет GPU, только CPU. Вот правильный requirements.txt:

llama-cpp-python==0.2.77
gradio==4.31.0
huggingface-hub==0.24.0
numpy==1.26.4

Обратите внимание на версии. На февраль 2026 llama-cpp-python 0.2.77 - самая стабильная для CPU. Более новые версии могут иметь проблемы совместимости.

3 Сердце системы: app.py с оптимизациями

Вот полный код app.py с комментариями, где я объясняю каждый важный момент:

import os
import gradio as gr
from huggingface_hub import hf_hub_download
from llama_cpp import Llama
import time

# Константы - не меняйте без понимания последствий
MODEL_REPO = "Qwen/Qwen2.5-3B-Instruct-GGUF"
MODEL_FILE = "qwen2.5-3b-instruct-q4_k_m.gguf"

# Кэш для модели - чтобы не скачивать каждый раз
MODEL_PATH = hf_hub_download(
    repo_id=MODEL_REPO,
    filename=MODEL_FILE,
    cache_dir="./model_cache"
)

def load_model():
    """Загружаем модель с оптимизациями для CPU"""
    print(f"Загрузка модели из {MODEL_PATH}...")
    
    # Критические параметры для работы на 2 CPU ядрах
    n_threads = max(1, os.cpu_count() - 1)  # Оставляем одно ядро системе
    n_gpu_layers = 0  # Ноль! У нас нет GPU на Spaces
    
    llm = Llama(
        model_path=MODEL_PATH,
        n_ctx=4096,           # Контекст 4K - оптимально для памяти
        n_threads=n_threads,
        n_gpu_layers=n_gpu_layers,
        n_batch=512,          # Уменьшаем batch для CPU
        verbose=False,        # Убираем логи в продакшене
    )
    
    print(f"Модель загружена. Потоков: {n_threads}")
    return llm

# Глобальная переменная - модель загружается один раз
llm_instance = None

def generate_response(message, history):
    """Генерация ответа с системным промптом"""
    global llm_instance
    
    # Ленивая загрузка модели при первом запросе
    if llm_instance is None:
        llm_instance = load_model()
    
    # Системный промпт - можно кастомизировать
    system_prompt = "Ты - полезный AI ассистент. Отвечай подробно и вежливо."
    
    # Форматируем историю диалога для Qwen2.5
    messages = [
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": message}
    ]
    
    # Если есть история диалога, добавляем ее
    if history:
        for human, assistant in history[-3:]:  # Берем только последние 3 обмена
            messages.insert(-1, {"role": "user", "content": human})
            messages.insert(-1, {"role": "assistant", "content": assistant})
    
    start_time = time.time()
    
    # Генерация с ограничениями для CPU
    response = llm_instance.create_chat_completion(
        messages=messages,
        max_tokens=512,          # Не генерируем романы
        temperature=0.7,         # Баланс креативности и точности
        top_p=0.9,
        stop=["<|im_end|>", "\n\n"],  # Стоп-токены Qwen
        stream=False
    )
    
    elapsed = time.time() - start_time
    answer = response['choices'][0]['message']['content']
    
    # Добавляем метрики в ответ (опционально)
    tokens_used = response['usage']['total_tokens']
    speed = tokens_used / elapsed if elapsed > 0 else 0
    
    print(f"Сгенерировано {tokens_used} токенов за {elapsed:.2f}с ({speed:.1f} токенов/сек)")
    
    return answer

# Создаем Gradio интерфейс - простой и функциональный
demo = gr.ChatInterface(
    fn=generate_response,
    title="Qwen2.5-3B AI Assistant",
    description="Бесплатный AI ассистент на CPU. Модель: Qwen2.5-3B-Instruct (Q4_K_M)",
    examples=[
        "Напиши Python функцию для сортировки списка",
        "Объясни квантовую запутанность простыми словами",
        "Помоги составить план тренировок на неделю"
    ],
    cache_examples=False  # Не кэшируем - мало памяти
)

if __name__ == "__main__":
    # Запускаем с ограничениями для Spaces
    demo.launch(
        server_name="0.0.0.0",
        server_port=7860,
        share=False,           # Не создаем публичную ссылку - Spaces делает это сам
        max_threads=1          # Важно! Не создаем много потоков
    )
💡
Ключевой момент: n_gpu_layers=0. Если поставить любое число больше нуля, llama.cpp попытается найти CUDA и упадет с ошибкой. На Spaces нет GPU, только CPU.

4 Файл конфигурации: Space должен знать свои ограничения

Создайте файл Dockerfile (да, Spaces использует Docker под капотом):

FROM python:3.10-slim

WORKDIR /app

# Устанавливаем системные зависимости минимально
RUN apt-get update && apt-get install -y \
    build-essential \
    && rm -rf /var/lib/apt/lists/*

# Копируем requirements первыми для кэширования Docker
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# Копируем весь код
COPY . .

# Запускаем приложение
CMD ["python", "app.py"]

И файл README.md для описания:

---
title: Qwen2.5-3B AI Assistant
emoji: 🤖
colorFrom: blue
colorTo: purple
sdk: gradio
sdk_version: 4.31.0
app_file: app.py
pinned: false
---

# Бесплатный AI ассистент на CPU

Запуск Qwen2.5-3B-Instruct на Hugging Face Spaces без GPU.

## Технические детали
- Модель: Qwen2.5-3B-Instruct (Q4_K_M квантование)
- Размер: ~2.1 ГБ
- Контекст: 4096 токенов
- Скорость: 10-15 токенов/сек на CPU

## Использование
Просто введите вопрос в чат и нажмите Enter.

Запускаем и сталкиваемся с реальностью

Нажмите Commit в интерфейсе Hugging Face. Пойдет сборка. Займет 5-10 минут. Первая загрузка модели - еще 2-3 минуты.

Что увидите:

  • Интерфейс Gradio с примерными вопросами
  • Первое поколение займет 15-30 секунд
  • Последующие ответы - 5-10 секунд
  • Потребление RAM: 3-4 ГБ (из 16 доступных)

Если все работает - поздравляю. Если нет - смотрите раздел ниже.

Типичные ошибки и как их исправить

Ошибка: "Killed" во время загрузки модели
Spaces убивает процесс, если он использует больше 10 ГБ RAM. Решение: убедитесь, что используете Q4_K_M квантование (не Q8 или FP16). Проверьте n_ctx - не ставьте больше 8192.

Ошибка: "CUDA not available"
Вы забыли поставить n_gpu_layers=0. Или пытаетесь использовать torch с CUDA. В requirements.txt не должно быть torch или transformers.

Ошибка: медленная генерация (1-2 токена/сек)
Проверьте n_threads. Должно быть os.cpu_count() - 1. На Spaces обычно 2 ядра, значит 1 поток. Также уменьшите n_batch до 256 или 128.

А что если хочется больше функциональности?

Базовый чат - это только начало. Вот что можно добавить:

  1. Поиск по документам: Загружайте PDF/текстовые файлы, модель будет отвечать на основе их содержания
  2. Голосовой интерфейс: Добавьте Whisper для транскрипции и Qwen3-ASR для синтеза речи
  3. Память между сессиями: Сохраняйте историю диалога в файл или базу данных
  4. Интеграция с API: Добавьте возможность вызывать внешние сервисы

Для серьезных проектов посмотрите построение AI-монстра - там полный стек технологий.

Почему именно Qwen2.5, а не что-то другое?

На февраль 2026 есть десятки маленьких моделей. Почему выбираю Qwen2.5-3B:

  • Качество кода: Лучше, чем у большинства моделей своего размера
  • Поддержка русского: Не идеальная, но лучше, чем у западных аналогов
  • Лицензия Apache 2.0: Можно использовать коммерчески
  • Сообщество: Активная разработка, регулярные обновления
  • Инструменты: Отличная поддержка в llama.cpp и других бэкендах

Для сравнения: Gemma 2B чуть быстрее, но хуже понимает контекст. Phi-3-mini (3.8B) требует больше памяти. Qwen2.5 - золотая середина.

Что делать, когда Spaces мало?

16 ГБ RAM и 2 CPU ядра - это ограничение. Если нужно:

  1. Больше памяти: Перейдите на PRO аккаунт ($9/месяц) - 32 ГБ RAM
  2. Свой сервер: Арендуйте VPS с 4-8 ядрами и 32 ГБ RAM ($20-40/месяц)
  3. Бесплатные облака: Oracle Cloud дает 4 ядра ARM и 24 ГБ RAM бесплатно
  4. Локальный запуск: На своем компьютере с 16+ ГБ RAM

Для локального запуска на слабом железе смотрите гайд по Tesla P100 или решение для Raspberry Pi.

💡
Секретный совет: если модель все равно не влезает в память, попробуйте квантование Q3_K_S. Размер около 1.5 ГБ, качество падает на 5-7%, но работает на любом железе. Или используйте Qwen2.5-1.5B - еще меньше, но для простых задач хватит.

Вместо заключения: что будет через год

Тренд очевиден: модели становятся меньше и умнее. Если сегодня Qwen2.5-3B - это минимум для полезной работы, то через год появятся 1.5B модели с качеством сегодняшних 7B.

Инфраструктура тоже эволюционирует. Llama.cpp уже сегодня показывает чудеса оптимизации. Через год, возможно, мы будем запускать 7B модели на смартфонах с той же скоростью, что сегодня 3B на CPU.

Ваш бесплатный ассистент на Spaces - это не финальный продукт. Это отправная точка. Добавляйте функциональность, экспериментируйте с промптами, тестируйте другие модели. Главное - начать.

P.S. Если сделали что-то крутое на основе этого гайда - поделитесь в комментариях. Лучшие идеи включу в следующую статью.