Перейти к основному содержанию

Статьи
FirstDedic


Локальное использование языковой модели на выделенном сервере. Часть первая: DeepSeek и её дистилляты на сервере без GPU

08 апреля 2025

Современные языковые модели (LLM) становятся всё более востребованными в самых разных сферах — от автоматизации рутинных задач до анализа данных и генерации контента. При этом их открытое использование может быть связано с рисками утечки данных, а локальное — с трудностями запуска и обслуживания.

В этой статье мы исследуем, насколько эффективно можно запускать LLM локально, в том числе на оборудовании без GPU. В качестве объекта тестирования выбрана модель DeepSeek-R1 — одна из последних разработок китайской компании DeepSeek, вышедшая в открытый доступ в начале 2025 года.

В первой части статьи речь пойдет о наших попытках запустить полную версию этой довольно популярной нейросети DeepSeek на сервере без графического процессора — вместе посмотрим, что из этого выйдет и насколько качественно и быстро она сможет решать наши задачи. Затем на этом же процессоре запустим так называемые дистилляты, если совсем утрированно, то это облегчённые версии полной модели. Сравним нагрузку на сервер и качество полученных результатов. 

Во второй части уже перейдем к серверам с GPU и попробуем сравнить DeepSeek с конкурентами. Цель нашего эксперимента — узнать, насколько качественно и хорошо способны работать языковые модели, развернутые локально. 

Прежде, чем приступить к практической части и тестированию, разберёмся с теорией — расскажем о том, почему выбрали DeepSeek, чем она отличается от других нейросетей, кратко остановимся на её плюсах и минусах.

Почему мы выбрали DeepSeek для тестирования

DeepSeek — молодая китайская компания, основанная в 2023 году, которая специализируется на разработке систем искусственного интеллекта (ИИ) и больших языковых моделей (LLMs). Особенность этих моделей заключается в их умении рассуждать и быстро находить информацию. Они могут писать код или тексты, генерировать идеи и решать ряд других задач.

В начале 2025 года DeepSeek выложила в открытый доступ модель DeepSeek-R1 LLMs, чем вызвала большой всплеск интереса к своей нейросети.
Модель DeepSeek-R1 часто сравнивают с ChatGPT. Она точно так же позволяет анализировать данные, генерировать текст и проводить рассуждения на разные темы. Тем не менее есть ряд преимуществ, которые отличают её от конкурентов.

Ключевые преимущества 

К таким преимуществам можно отнести то, что в сети доступны результаты конечной модели, которые позволяют энтузиастам и небольшим командам проводить на их основе многочисленные исследования и тесты. 

Еще одним преимуществом может стать экономичность создания нейросети. Исследователи с востока ясно дали понять, что разработка моделей LLM и их дистиллятов возможна без использования множества дорогостоящих видеокарт, что в конечном счёте позволит снизить затраты на обучение. С учетом того, что выход DeepSeek привел к значительному падению акций компании Nvidia, на сегодняшний лидера по производству графических процессоров, и спровоцировал рост конкуренции в среде LM-компаний, определенная доля правды в этом, видимо, есть. 

Недостатки и ограничения 

Как и любая другая технология, DeepSeek имеет и свои недостатки. К особо важным можно отнести риск утечки данных при использовании моделей, которые находятся в свободном доступе, например, при передаче информации через инструменты чата или API. Вся информация, передаваемая нейронной сети, может быть использована разработчиками — и хорошо, если только для разработки. 

Передача информации, которая является конфиденциальной или секретной, очевидно недопустима при использовании открытой платформы DeepSeek, что, естественно, накладывает определенные ограничения на применение в ряде областей.

Также к недостаткам можно отнести геополитический фактор, то есть ограничения, действующие внутри Китая и, как следствие, влияющие на развитие и работу компании, выпустившую DeepSeek. 

Регулирование этой отрасли началось примерно в 2017 году и продолжается до сих пор. Не исключено, что в будущем власти могут обязать компании, разрабатывающие ИИ, предоставлять им информацию, полученную от пользователей. Безусловно, часть мер направлены на регулирование данных технологий в сфере этики, и часть законопроектов уже чётко указывает на обязательство разработчиков именно в этой области. Но это, в свою очередь, также может влиять и на конечный результат, если он будет противоречить политике страны.

Еще один недостаток, о котором необходимо сказать — значительные требования модели к мощностям платформы, на которой она запускается. Это можно отнести к недостаткам условно, так как есть возможность снизить потребление ресурсов за счёт использования облегчённой по размеру модели, их ещё называют дистиллятами.

Что такое дистилляция 

Дистилляция ИИ (или дистилляция моделей) — это процесс создания более компактной и эффективной модели на основе большой и сложной модели искусственного интеллекта. Суть процесса состоит в том, что основная полная модель является «учителем» для другой модели «ученика», подавая для нее примеры с готовыми метками. Основная цель дистилляции — сохранить высокую производительность исходной модели, но при этом уменьшить её размер, сложность и требования к вычислительным ресурсам. 

Такой подход особенно эффективен при внедрении ИИ в устройства с ограниченными ресурсами — смартфоны, IoT-устройства или встроенные системы. 

Как это работает 

В классическом варианте дистилляции (Knowledge Distillation) на вход модели «ученика» генерируется 2 метки моделью «учителя»: 

  • Hard Labels: правильная классификация для каждого входа, чёткие ответы (например, «это кошка»).
  • Soft Probabilities: распределение вероятностей по всем возможным классам, отражающее уверенность «учителя» в своих предсказаниях (например, «85% — кошка, 10% — собака, 5% — кролик»).

В этом методе также используется регулировка температуры параметра Soft Probabilities (мягких вероятностей), что позволяет управлять предсказаниями или ответами модели: 

  — при низкой температуре прогнозы получаются более чёткими, подчеркивающими уверенность в правильном результате, но стирающими границы отношений и информацию о соотношениях между классами в результате, то есть менее детализированными;  
  — при высокой температуре результат противоположный — подчёркиваются соотношения между классами в результате, но падает уверенность в определении единственного правильного результата из вероятностей. Иначе говоря, ответы отражают больше нюансов, но с меньшей уверенностью. 

Опираясь на то, о чем мы говорили выше, можно предположить, что если развернуть модель локально на сервере, это поможет снизить риск утечки данных и позволит безопасно работать с чувствительной информацией — по сравнению с облачными решениями. Вы получаете полный контроль над информацией без риска её разглашения или использования третьими сторонами. Кроме того, такой подход снимает ограничения, связанные с законодательством других стран, что особенно важно для корпоративного и исследовательского применения.

Правда, остаются еще два ключевых аспекта.  

Во-первых, влияние, которое распространялось на ИИ во время обучения. Этот момент полностью исключить не выйдет. Но поскольку эта нейронная сеть относится к ИИ общего назначения, появляется отличная возможность создать на её основе свой узкоспециализированный продукт с помощью дистилляции, которые затем можно использовать в различных целях, в том числе и коммерческих.

Во-вторых, остается вопрос — насколько ресурсоёмким окажется такой подход и можно ли добиться приемлемой производительности, например, на арендованном сервере.  

Далее мы перейдем с вами к практической части и расскажем о том, как тестировали полную версию модели и её облегчённые дистилляты на сервере без GPU и какие результаты получили — дадим качественный анализ ответов и оценим ресурсы сервера во время работы моделей.

Практическая часть. Локальное развертывание DeepSeek на сервере

Тестирование полной модели

Наша основная задача в ходе данных экспериментов состояла в запуске полной модели, поэтому в конфигурации должно было хватать RAM или GPU RAM. Получить более 500 Гб GPU RAM сложно — помимо достаточного количества видеокарт (более 10), также потребуется дополнительное питание для поддержания работы данной системы, поэтому было принято решение использовать только оперативную память без GPU. 

Описание тестового стенда

  • платформа ASUS RS700A-E12-RS12U

  • 2 процессора AMD EPYC 9274F, которые в сумме имеют 48 ядер с тактовой частотой до 4.05 GHz
  • 22 планки оперативной памяти DDR5 2112 Гб Samsung M321RYGA0PB0-CWMXJ по 96 Гб
  • 1.92 Тб постоянной памяти на INTEL SSDPF2KX019XZ
  • операционная система Ubuntu 22.04.5 LTS 

Этих мощностей должно было хватить (как показали тесты даже избыточно) для загрузки модели LLM полностью в оперативную память сервера. В репозитории указано, что эта нейронная сеть может быть запущена с использованием vLLM (фреймворк для эффективного обслуживания больших языковых моделей) и Hugging Face Transformers (библиотека для работы с моделями на основе архитектуры Transformer, разработанная компанией Hugging Face). 

Сразу отметим, что модель запускалась не при помощи этих инструментов, а с помощью ollama — тоже входит в категорию инструментов для работы с большими языковыми моделями. Далее покажем, каким образом производились запуски модели, в том числе и неудачные.

Установка и запуск модели на сервере

Попытка первая — с использованием vLLM с помощью Docker

Самый простой способ запуска приложения — это запуск через Docker. vLLM также возможно запустить с помощью данного инструмента. Для запуска только на CPU необходимо клонировать репозиторий vllm и собрать новый образ на локальном сервере:

git clone https://github.com/vllm-project/vllm.git
cd vllm && docker build -f Dockerfile.cpu -t vllm-cpu-env --shm-size=1536g .

После создания образа можно его запустить, используя файл .yml:

services:

  litellm:

    image: vllm-cpu-env

    environment:

      - VLLM_CPU_KVCACHE_SPACE=1536

    ports:

      - "8000:8000"

        #restart: unless-stopped

    volumes:

      - ~/.cache/huggingface:/root/.cache/huggingface

    command: [ "--model", "deepseek-ai/DeepSeek-R1", "--trust-remote-code" ]

Однако при запуске данного образа после сборки возникала ошибка, связанная с отсутствием GPU:

...

litellm-1  | AssertionError: Torch not compiled with CUDA enabled

...

Попытка вторая — с использованием vLLM из исходников

Запуск vLLM из исходников позволяет полностью контролировать работу LLM и к тому же производить манипуляции с движком, контролируя полностью все его параметры. Поэтому для исправления проблем с ошибкой CUDA мы попытались запустить модель через виртуальное окружение. Запуск модели проводился на версии vllm 0.7.3. 

При запуске модели из исходников, в созданном окружении:

./bin/vllm serve deepseek-ai/DeepSeek-R1

Возникает ошибка:

AssertionError: Torch not compiled with CUDA enabled

Получается, что vLLM пытается использовать видеокарту и/или произвести инициализацию с её помощью. Были сделаны попытки закомментировать часть кода для исправления этой ошибки и запрета проверки/инициализации видеокарты. Увы, таким простым методом ошибку исправить не удалось.

Попытка третья — с использованием Hugging Face Transformers

Для запуска через Hugging Face Transformers можно использовать уже созданное окружение vllm, поскольку в нём все зависимости уже установлены. Для запуска использовался следующий скрипт python:

from transformers import AutoModelForCausalLM, AutoTokenizer

# Загрузка модели и токенизатора

model_name = "deepseek-ai/DeepSeek-R1"

tokenizer = AutoTokenizer.from_pretrained(model_name)

model = AutoModelForCausalLM.from_pretrained(model_name)

# Перемещение модели на CPU

model.to("cpu")

# Генерация текста

input_text = "Привет, как дела?"

inputs = tokenizer(input_text, return_tensors="pt")

outputs = model.generate(**inputs, max_length=50)

# Декодирование результата

print(tokenizer.decode(outputs[0], skip_special_tokens=True))

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

python3 transformers-start.py

Ошибка при запуске модели DeepSeek-R1 сообщает о том, что отсутствует GPU:

RuntimeError: No GPU found. A GPU is needed for FP8 quantization.

Для запуска модели через другие инструменты, такие как llama.cpp (инструмент с открытым исходным кодом, предназначенный для эффективного вывода LLM на C и C++) и ONNX Runtime (открытая библиотека программного обеспечения для построения нейронных сетей глубокого обучения), требовалась конвертация исходной модели в другие форматы.

Таким образом, остался ещё один инструмент, который позволяет произвести запуск, LLM — это ollama.

Попытка четвертая — с использованием Ollama и Docker

Ollama — это открытый проект, предназначенный для локального запуска, настройки и взаимодействия с языковыми моделями (LLM). Запуск может осуществляться как при установке локально, так и с использованием docker. Мы выбрали второй вариант. Использовался следующий yml файл:

version: '3.8'

services:

  ollama:

    image: ollama/ollama:latest

    container_name: ollama

    ports: ["127.0.0.1:11434:11434"]

    volumes:

      - ./data_ollama:/root/.ollama

    pull_policy: always

    tty: true

    restart: unless-stopped

    environment:

      - OLLAMA_DEBUG=1

  ollama-webui:

    image: ghcr.io/ollama-webui/ollama-webui:main

    container_name: ollama-webui

    ports: ["127.0.0.1:3000:8080"]

    volumes:

      - ./ollama-webui:/app/backend/data

    depends_on:

      - ollama

    environment:

      - 'OLLAMA_API_BASE_URL=http://ollama:11434/api'

    restart: unless-stopped

volumes:

  ollama: {}

  ollama-webui: {}

Таким образом, при запуске у нас создаётся контейнер ollama и отдельный контейнер с веб-интерфейсом. После запуска контейнера потребуется некоторое время для создания всех необходимых файлов внутри контейнера и за его пределами, иначе говоря, его инициализации.

Небольшое примечание. Хотелось бы отметить, что поскольку это был тестовый стенд, то порты контейнеров были проброшены только на localhost для безопасности, как вы уже могли обратить внимание в выводе файла для docker compose. На сервере был открыт исключительно только порт ssh. Все остальные порты закрыты firewall. 

Для доступа к веб-интерфейсу с локального хоста (используется также ОС Ubuntu 22) был запущен туннель следующим образом:

ssh -fnNT -L 127.0.0.1:3000:127.0.0.1:3000 root@IP.AD.RE.SS -i ./path/to/key -p PORT

где IP.AD.RE.SS — это публичный ip сервера, /path/to/key — путь до ключа для авторизации, PORT — порт ssh.

Таким образом, 3000 порт на локальном компьютере будет соединён с 3000 портом на сервере через ssh, что обеспечивает шифрование соединения, даже с учётом того, что по этому каналу будет передаваться http-трафик.

После проброса порта на локальном компьютере переходим по адресу 127.0.0.1:3000 в любом браузере. Для начала нужно загрузить модель — в нашем случае это модель Deepseek-r1:671b. После загрузки модели (загружаться она может продолжительное время, поскольку занимает 377 Гб) в интерфейсе можно произвести пробный запрос и получить на него ответ.

В логах при запуске модели указывается, что она загружается в формате GUFF с кванитизацией Q4_K:

...

llm_load_print_meta: format           = GGUF V3 (latest)

...

llm_load_print_meta: model ftype      = Q4_K - Medium

llm_load_print_meta: model params     = 671.03 B

llm_load_print_meta: model size       = 376.65 GiB (4.82 BPW) 

...

GUFF — современный формат для хранения файлов модели, который предназначен для быстрой загрузки и экономии занимаемого места моделью, а также для удобства чтения. Подробнее про этот формат можете узнать на github.

Квантование модели LLM — это процесс уменьшения точности числовых значений параметров модели (например, весов и активаций) с целью сокращения размера модели и ускорения её работы. 

Методика тестирования

Чтобы протестировать работу модели, формат GUI нам не подошел — из-за длительного времени загрузки и генерации ответов. Кроме того, хотелось показать и продемонстрировать возможность работы через другие инструменты. На начальных этапах тестирования мы написали python-скрипт, который отправляет запросы через API с помощью библиотеки Ollama.

Тестовые вопросы (промпты): 

Промпт

Что проверяем

Кто тебя обучал и какие компании были задействованы в обучении?

Вопрос, на который ответ должен быть всегда очевиден. И как показали результаты ответ, на который, всегда одинаковый.

Сколько вторников будет в марте 2025 года?

Вопрос, который по задумке должен был показать, как LLM выстраивает логическое рассуждение и насколько корректно оперирует данными.

Расскажи, как будешь решать задачу. Нужно вычислить число Пи до 15 знаков после запятой

Также вопрос на логику.

Представь, что ты работаешь копирайтером в компании хостинг-провайдера. Тебе нужно написать креативный пост для соцсетей, который привлечет внимание сисадминов и разработчиков. Пост должен быть: 1.Быть коротким (не более 100 слов). 2. Подчеркивать надёжность, скорость и простоту использования хостинга. 3.Включать призыв к действию. 4.Быть лёгким для восприятия и запоминающимся. 5.Стиль написания нейтральный.

Вопрос, ориентированный на проверку креативности модели.

 

Содержание скрипта python:

from ollama import Client

from ollama import chat

def request_to_ui(REQUEST):

    print(REQUEST)

    client = Client(host='http://localhost:11434')

    response = client.chat(

        model='deepseek-r1:671b',

        messages=[{'role': 'user','content': str(REQUEST)}],

        stream=True,

        )

    count_chunk=0

    for chunk in response:

        print(chunk['message']['content'], end='', flush=True)

        count_chunk+=1

REQUEST="Кто тебя обучал и какие компании были задействованы в обучении?"

request_to_ui(REQUEST)

Его запуск производился однострочником:

for num in {1..10};do python3 /root/python-ollama.py | tee /root/result_requests/$num.txt;docker logs ollama | grep POST | tail -n4 >> /root/result_requests/$num.txt;docker logs ollama --since 15m > /root/result_requests/$num.log; done

В результате на вопросах, которые вошли в данную статью, при запуске через скрипт и при применении функции chat в python возникала ошибка в логах контейнера:

llama.cpp:11942: The current context does not support K-shift

Поиск решения на профильных форумах привел к тому, чтобы использовать опцию num_ctx при запросе. 

Поэтому далее применялись и использовались прямые запросы через curl и api:

curl http://localhost:11434/api/generate -d '{"model":"deepseek-r1:671b","prompt": "ВОПРОС","stream": false,"options": {"num_ctx": 16000}}' | jq '.response'

Примечание. Утилита jq не обязательна, но её можно использовать для удобства отображения вывода.

Также возможно использование опции при запуске сети через дополнительные опции --no-context-shift команды, если ИИ был запущен напрямую через ollama.

Как проходило тестирование 

Вопросы задавались модели в указанном порядке 10 раз подряд, то есть всего было проведено 10 циклов запросов.

Ответы полной модели и их анализ

Поскольку тестирование шло циклами и мы получили большое количество самых разнообразных ответов, покажем лишь несколько примеров для наглядности. Также мы попробуем дать небольшой качественный анализ полученных результатов, поэтому все наши рассуждения будут опираться на субъективные суждения (почти) и впечатления на основании ответов модели:

Вопрос 1. Кто тебя обучал и какие компании были задействованы в обучении? 

Пример ответа: 

Анализ ответа. Как и ожидалось ответ на этот вопрос был всегда одинаковый. Интересно, что несмотря на то, что вопрос задавался на русском языке, ИИ давал ответы только по-английски. В ходе тестирования этой модели мы заметили, что ответы модели на этот вопрос всегда дублируют её собственные рассуждения. Стоит уточнить, что сначала нейросеть выстраивает цепь рассуждения, а потом на её основе выдает ответ. В нашем случае ответ и рассуждения полностью совпадали. 

Вопрос 2. Сколько вторников будет в марте 2025 года?

Пример ответа:

Лишь часть ответа, так как рассуждение было довольно продолжительным…

Анализ ответа. Как раз при ответе на данный вопрос ollama впервые завершила свою работу с ошибкой K-shift. В целом ответ занимал довольно продолжительное время из-за большого количества рассуждений на тему. При этом ИИ из-за неуверенности в ответе часто перепроверял ход своих рассуждений, что приводило к их избыточности. Предложенное решение было довольно трудоёмким по вычислениям для человека, но при этом всегда верным. Самый простой, на наш взгляд,  вариант с открытием календаря и подсчетом вручную, так и не был обозначен в ответах. Забегая вперед, скажем, что в ответах облегченных моделей он присутствовал. В одном из ответов модель указала, что считает текущей датой именно август 2023 года. Возможно, именно в это время проводилось обучение и/или использовалось множество данных в этом периоде.

Вопрос 3. Расскажи, как будешь решать задачу. Нужно вычислить число Пи до 15 знаков после запятой.

Пример ответа: 

Лишь часть ответа, так как рассуждение было довольно продолжительным…

Анализ ответа. Модель всегда давала правильный ответ, при этом постоянно приводился один и тот же набор методов для вычисления. Иногда модель приводила дополнительную информацию о том, каким образом правильно реализовать подсчёт Пи в коде python, хотя формулировка была неизменной.

Пример вывода кода python при ответе модели 

Вопрос 4. Представь, что ты работаешь копирайтером в компании хостинг-провайдера. Тебе нужно написать креативный пост для соцсетей, который привлечет внимание сисадминов и разработчиков. Пост должен быть: 1. Быть коротким (не более 100 слов). 2. Подчеркивать надежность, скорость и простоту использования хостинга. 3. Включать призыв к действию. 4. Быть легким для восприятия и запоминающимся. 5.Стиль написания нейтральный.

Не приводим часть ответа с рассуждениями, только итоговый пост, чтобы вы могли самостоятельно могли оценить полученный креатив

Анализ ответа. Поскольку вопрос был ориентирован на анализ творческого потенциала модели, то в целом все ответы можно признать корректными — результаты были различными, а все поставленные условия были выполнены. Качество же самого креатива оставим оценить маркетологам. Из интересного, модель всегда отмечала в своих рассуждениях использование дополнительных терминов — «жаргонизмов», присущих системным администраторам и разработчикам. Опять же, забегая вперед, чего не наблюдалось в ответах облегчённых моделей. 

Тестирование дистиллятов

Проводилось на том же оборудовании, что и тестирование полной модели DeepSeek, с использованием уже готового окружения. Были протестированы следующие модели:

  • deepseek-r1:70b — соответствует по параметрам DeepSeek R1 Distill Llama 70B,
  • deepseek-r1:32b — соответствует по параметрам DeepSeek R1 Distill Qwen 32B,
  • deepseek-r1:1.5b — соответствует по параметрам DeepSeek R1 Distill Qwen 1.5B.

Тесты дистиллятов проводились, как и тесты полной модели, с использованием запросов curl и скрипта python. Загрузка моделей изначально производилась с помощью веб-интерфейса. 

Ответы моделей и их анализ

Мы не будем детально разбирать все ответы, но выделим ключевые различия в работе дистиллята по сравнению с полной моделью.

Модель DeepSeek R1 Distill Llama 70B

Часть рассуждений модели для ответа на вопрос «Сколько вторников будет в марте 2025 года?»

По качеству и содержанию ответов сопоставима с основной моделью, а кое-где (например, во втором вопросе) превосходит в краткости и лаконичности суждений. В первоначальных ответах выдаёт меньше информации по объёму. Рассуждения не всегда корректные (вроде дат вторников в марте), при этом в них нет ничего лишнего. И что интересно, даже некорректные рассуждения, как, например, в этом случае, в итоге приводят к правильным ответам. Кроме того, в тексте порой встречаются артефакты в виде иероглифов.


Примеры иероглифов в ответе нейросети 

Модель DeepSeek R1 Distill Qwen 32B 

Первая из тестируемых моделей, которая начинает давать неправильные ответы на вопросы. Например, на вопрос о количестве вторников в марте 2025 года нейросетка ответила, что их будет 5, хотя верный ответ — 4. 


Пример части рассуждения нейросети с неверным ответом

Также при ответе на запрос написать креативный пост выдала довольно тривиальные ответы, но в целом результат соответствует поставленной задаче.


Пост, который нам предложила нейросеть под указанные условия 

Модель DeepSeek R1 Distill Qwen 1.5B 

Как самая младшая и легковесная модель показала, что полностью оторвана от реальности и задачи на логику. 

Ушла в своих рассуждениях о вторниках совсем в другую сторону…

Однако несмотря на неправильные суждения, в вопросе про поиск числа Пи предложила интересную идею просто получить его из константы в коде python. Грубо, но эффективно.


Вот начало этого рассуждения о получении числа Пи из кода python

В задаче на креатив модель мало того что давала ответ на вопрос на другом языке, так ещё и полностью проигнорировала логику и условия задания.


Подошла креативно к выполнению задания и выдала ответ на английском языке
Перевод сделан через переводчик Google

Показать перевод

Хорошо, мне нужно помочь этому пользователю создать броский и профессиональный пост в социальных сетях для копиру, работающего в хостинг -провайдере. Позвольте мне сломать то, о чем они просят.

 

Во-первых, тематическая линия должна быстро привлечь внимание. Что-то вроде «Нужна твоя помощь! Наш копир нуждается в внимании!» Звучит дружелюбно и сразу же относится, потому что речь идет о том, чтобы кто -то был ошеломлен работой. Это дает слушателю/ читателю четкую цель прямо с летучей мыши.

Далее, содержание имеет конкретные требования. Пост должен быть коротким - не более 100 слов. Это управляемо, но мне нужно включить все ключевые моменты. Они упомянули, подчеркивая важность надежности, скорости и простоты в хостинге. Это основные значения для любого поставщика услуг хостинга, поэтому они обязательно должны быть выделены.

Мне также нужен призыв к действию, побуждая других поддержать их копир. Такие слова, как «Помогите нам сделать вашу работу проще» или «Ваше время ценное», могут передать эту срочность и необходимые усилия. Стиль должен быть нейтральным — без жаргона, просто простой и профессиональный.

Думая о структуре: начиная с смайликов, чтобы привлечь внимание, не переусердствовав. Затем тематическая линия, за которой следует краткое вступление в то, почему хостинг имеет значение для них. Ключевые моменты под каждым требованием, убедившись, что они краткие. Наконец, добавив призыв к действию в конце, который усиливает важность их службы.

Я должен обеспечить выполнение всех требований: короткие, ясные, включают основные значения, обращаются к вниманию и легко читаются. Возможно, использование сочетания смайликов и простого текста будет продолжать увлекаться, не будучи слишком ярким. Позвольте мне собрать это вместе шаг за шагом, убедившись, что каждая часть плавно входит в следующую.

Анализ потребляемых ресурсов

Эту часть анализа мы решили вынести отдельно — было интересно посмотреть, как полная модель и дистилляты будут нагружать ресурсы сервера. 

Для анализа потребляемых ресурсов к серверу был подключен дашборд grafana+prometheus+node-exporter. 

Полная модель 

Как уже отмечалось ранее, модель, загружаемая с ollama.com имеет размер порядка 377 Гб. Это можно проверить в каталоге, который был смонтирован при запуске контейнера на хостовой ОС. Таким образом, при каждом запуске движок сразу запрашивает у ядра память RAM, чтобы полностью расположить там модель для быстрого обращения к ней. В данном случае у ядра было запрошено сначала 378.6 Гб (что соответствует месту на диске). Инициализация производится в течение примерно 2,5 минут. 

Использование RAM при загрузке полной модели

На графике указано, что итоговое значение используемой памяти составило порядка 420 Гб. По статусу процесса в top было определено, что после инициализации модели также догружаются дополнительные данные и необходимые для работы значения. Далее возникает некоторая задержка, и ядро дополнительно резервирует за процессом именно 420 Гб, которые задействуются полностью и в течение времени работы почти не изменяются. Таким образом, дополнительная память для работы ollama приблизительно составляет 40 Гб. 

Однако при исправлении ошибки, когда нужно было использовать значение num_ctx=16000 (такое значение было выбрано, поскольку в настройках веб-интерфейсе данное значение является максимальным) памяти выделялось значительно больше, а именно 693 Гб, но использовалось лишь 675 Гб.

По логам контейнера были определены точные значения времени на запуске. Они составляют порядка ~ 160 секунд при запуске по умолчанию:

level=INFO source=server.go:596 msg="llama runner started in 160.77 seconds"

При запуске с дополнительным параметром num_ctx это время увеличивалось в 2 раза. 

Во время загрузки в RAM ресурсы процессора почти никак не потребляются:


Графики использования RAM и CPU на запуске полной модели

После завершения работы с нейронной сетью через 5 минут (установленный таймаут по умолчанию) после последнего ответа модели, ollama высвобождает ресурсы системы, полностью освобождая занятую на этапе работы память:


Завершение работы модели и высвобождение ресурсов RAM

Период времени, когда RAM освобождается после бездействия, можно изменить в настройках веб-интерфейса или указать в запросе как дополнительный параметр.

Во время работы LLM полностью утилизирует все ресурсы CPU и нагружает все физические и доступные ядра процессора. Это хорошо видно на графике использования CPU, поскольку использование при работе практически постоянно и держится на отметке 50%:


Использование CPU при работе полной модели

Дистилляты

Как уже говорилось выше, дистилляты — условно облегченные копии больших ИИ, которые работают быстрее и требуют меньше ресурсов, что, собственно мы и наблюдали во время их запуска и работы: 

  • DeepSeek R1 Distill Llama 70B — занимает около 40 Гб. При её работе выделяется 70 Гб и 59 Гб из них занято на этапе работы; 
  • DeepSeek R1 Distill Qwen 32B — занимает около 18.5 Гб. При её работе выделяется 41 Гб и 34 Гб из них занято на этапе работы;
  • DeepSeek R1 Distill Qwen 1.5B — занимает около 1 Гб. При её работе выделяется 7 Гб и 2.9 Гб  из них занято на этапе работы.

Таким образом, при работе полная модель потребляет 693 Гб RAM и использует все ядра процессора на сервере. Дистилляты занимают меньший объём памяти, но потребляют также все доступные ресурсы процессора.

Выводы

В этой статье мы протестировали полную версию DeepSeek и её уменьшенные (дистиллированные) модели, запуская их на сервере с использованием только CPU и RAM. А также попробовали дать качественный и количественный анализ показателей работы моделей. Время подвести итоги и рассказать, к каким выводам мы пришли.

Полная модель: работает хорошо, даёт полные и развернутые ответы на поставленные вопросы, но требует много ресурсов для своей работы и медленно загружается (2.5 минуты при настройках по умолчанию и в 2 раза медленнее при добавлении с дополнительным параметром num_ctx). При этом она хорошо подходит для обучения, поскольку даёт развернутые и полные ответы, по которым легко отследить всю цепочку рассуждений, что полезно при изучении нового предмета или области знаний.

Дистилляты: 

Модель 70B продемонстрировала интересную особенность: несмотря на то, что её рассуждения иногда содержали ошибки или неточности (что мы показали при ответе на 2 вопрос), конечные ответы были правильными. При этом, по сравнению с полной моделью, она была менее «разговорчива» и лаконична. Эта модель также может быть использована для процессов обучения новым предметам или областям, но подойдет тем, кто любит кратко и только и по делу. Из недостатков: в отличие от полной модели иногда в тексте встречаются символы-артефакты.

Модели 32B и 1.5B показали самые слабые результаты по качеству ответов, что в целом было ожидаемо от столь малых моделей.

Таким образом, можно считать, что модель 70B — это золотая середина среди всех протестированных: даёт правильные ответы (хоть и не такие развернутые, как полная модель), но потребляет на порядок меньше ресурсов сервера. Поэтому именно её мы будем рассматривать в сравнении с конкурентами в области ИИ во второй части статьи.

Надеемся, что результаты нашего эксперимента помогут понять, насколько в целом практично и эффективно локальное развертывание LLM на выделенном и какие компромиссы между безопасностью, производительностью и затратами стоит учитывать. 

Автор статьи: Дмитрий К., консультант технической поддержки

 

 


Смотреть все статьи

Telegram-канал FirstDEDIC

Узнавайте новости первыми

подписаться

Сообщить об ошибке

Выделенная ошибка:

Опишите найденную ошибку