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

Статьи
FirstDedic


Локальное использование языковой модели на выделенном сервере. Часть вторая. DeepSeek-R1, Qwen2.5, llama3.3 на разных GPU

22 апреля 2025

Продолжаем тестировать ИИ на выделенных серверах. В предыдущей статье мы рассказали, что такое искусственный интеллект родом из КНР DeepSeek, в чём его особенности, обозначили преимущества и недостатки. Запустили локально полную модель DeepSeek-R1, а затем — несколько вариантов дистиллятов на сервере без GPU.

Сегодня мы подробно рассмотрим другие языковые модели (LLMs, large language models), запустим их на серверах с разными GPU, а затем сравним полученные результаты по нескольким показателям. Наша основная цель — выяснить, какая из облегченных моделей, лучше всего справится с тестовыми задачами. 

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

Несмотря на популярность DeepSeek, в настоящее время существуют и другие модели, которые могут стать альтернативой в большинстве случаев. Так, например, наряду с DeepSeek-R1 можно отметить Qwen2.5 (Alibaba Cloud) и llama3.3 (Meta*). 

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

Немного подробностей о каждой из тестируемых моделей.

DeepSeek-R1 — наиболее популярный ИИ из представленных, благодаря ажиотажу на запуске. Выпущен в январе 2025 года. Полная модель имеет всего 685 миллиарда параметров и около 128 тысяч токенов контекста. Подробнее о полной модели мы рассказывали в первой части. В этот раз будет запущена версия DeepSeek-R1-Distill-Llama-70B, чтобы соответствовать «конкурентам» по размеру и количеству параметров. Сразу отметим, что запустить полную модель на одной видеокарте не представляется возможным в принципе — из-за ограничения памяти видеокарты (GRAM).

Qwen2.5 — выпущена компанией Alibaba Cloud в сентябре 2024. Самая большая модель в нашем тесте (будем тестировать версию Qwen2.5-72B-Instruct-AWQ), которая имеет 72.7 миллиарда параметров и около 131 тысячи токенов контекста. Позволяет генерировать до 8192 токенов.

llama3.3 — выпущена компанией Meta* в декабре 2024 года. Модель имеет 70 миллиардов параметров и около 128 тысяч токенов контекста. Далее мы будем тестировать версию Meta-Llama-3.1-70B-Instruct-AWQ-INT4.

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

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

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

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

Для тестирования использовались серверы с видеокартами GeForce RTX 4090 и NVIDIA L40S. Мы выбрали именно эти модели, как способные полностью раскрыть потенциал нейронных сетей.

Конфигурация на базе GPU NVIDIA GeForce RTX 4090

  • платформа Gigabyte B850M D3HP
  • процессор AMD Ryzen 7 9700X с тактовой частотой до 5,5 GHz
  • 4 планки оперативной памяти DDR5 128 Гб Samsung M323R4GA3BB0 по 32 Гб
  • 2 Тб постоянной памяти на INTEL SSDPEKNU020TZ
  • операционная система Ubuntu 24.04.5 LTS
  • видеокарта NVIDIA GeForce RTX 4090 c 48 ГБ памяти

Конфигурация на базе GPU NVIDIA L40S

  • платформа ASUS K14PG-U12 Series
  • процессор AMD EPYC 9334 с тактовой частотой до 3.9 GHz
  • 2 планки оперативной памяти DDR5 128 Гб Samsung M321R8GA0BB0 по 64 Гб
  • 2 Тб постоянной памяти на INTEL SSDPEKNU020TZ
  • операционная система Ubuntu 24.04.5 LTS
  • видеокарта NVIDIA L40S c 48 ГБ памяти
Арендовать выделенный сервер с графическими картами NVIDIA GeForce RTX 4090 и NVIDIA L40S вы можете у нас на сайте. Воспользуйтесь конфигуратором, чтобы подобрать оптимальный вариант сервера под ваши запросы.

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

Для развертывания ИИ на серверах с GPU мы применили vllm, запущенный внутри контейнера Docker. В прошлой части использовался только ollama, так как возникали ошибки CUDA. Ниже — yml-файл, который был задействован:

services:
  litellm:
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    image: vllm/vllm-openai:latest
    network_mode: "host"
    volumes:
      - ./cache/huggingface:/root/.cache/huggingface

    command: [ "--gpu-memory-utilization", "1", "--max-model-len", "11312", "--enforce-eager", "--model", "Valdemardi/DeepSeek-R1-Distill-Llama-70B-AWQ", "--served-model-name", "DeepSeek-R1-Distill-Llama-70B-AWQ" ]

VLLM удобно выводит параметры запущенной модели. Например, вывод из логов при обработке одного запроса выглядит так:

....

litellm-1  | INFO 03-06 19:18:40 metrics.py:455] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 22.8 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 4.1%, CPU KV cache usage: 0.0%.

litellm-1  | INFO 03-06 19:18:45 metrics.py:455] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 22.8 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 4.5%, CPU KV cache usage: 0.0%.

litellm-1  | INFO 03-06 19:18:50 metrics.py:455] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 22.8 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 5.0%, CPU KV cache usage: 0.0%.

litellm-1  | INFO 03-06 19:18:55 metrics.py:455] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 22.7 tokens/s, Running: 1 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 5.5%, CPU KV cache usage: 0.0%.

litellm-1  | INFO:     127.0.0.1:42070 - "POST /v1/chat/completions HTTP/1.1" 200 OK

Сразу видно, как быстро модель генерирует ответы, сколько запросов она одновременно обрабатывает и как использует кэш GPU/CPU. Далее это пригодится нам для сравнения разных ИИ и оценки работы видеокарт.

Также стоит сразу отметить несколько важных моментов, относящихся к запуску моделей. Все они касаются ограниченного размера памяти видеокарты (GRAM).

  • Не всегда использовались оригинальные репозитории моделей (конкретно для DeepSeek и llama), поскольку при запуске несколько раз возникали ошибки, связанные с недостатком памяти видеокарты (GRAM). Пример ошибки:
CUDA out of memory. Tried to allocate 896.00 MiB. GPU 0 has a total capacity of 47.38 GiB of which 41.75 MiB is free. Process 9632 has 47.33 GiB memory in use. Of the allocated memory 46.90 GiB is allocated by PyTorch, and 1.07 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation.  See documentation for Memory Management  (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)
  • Использовались только дистилляты моделей, то есть облегчённые версии моделей.
  • Все используемые модели были квантилизованные Activation-aware Weight Quantization (AWQ). Подробнее о том, что это такое, можно узнать здесь. 

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

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

После запуска модели на сервере мы приступили к тестам. В качестве запросов к LLM были использованы прямые запросы к OpenAI API через curl:

curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "MODEL_NAME","messages": [{"role": "user", "content": "YOUR_QUESTION"}],"temperature": TEMP_VAL}' | jq '.choices.[0].message.content

где 

MODEL_NAME — имя модели, которая запущена в vllm;

YOUR_QUESTION — вопрос к модели;

TEMP_VAL — значение температуры, которая позволяет регулировать «креативность» модели в диапазоне от 0 до 1. Выское значение температуры делает модель более творческой, низкое — наоборот. 

Какая именно модель загружена в vllm, можно узнать с помощью запроса:

curl --no-progress-meter localhost:8000/v1/models | jq '.data.[].id'

Как и в предыдущей статье часть ответов были сформированы для curl через однострочник:

for num in {1..10};do curl --no-progress-meter http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "MODEL_NAME","messages": [{"role": "user", "content": "YOUR_QUESTION"}],"temperature": TEMP_VAL}' | jq '.choices.[0].message.content; done

Дополнительно на сервере через docker compose был развернут контейнер open-webui. Использовался следующий yml файл:

version: '3'
services:
  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    environment:
      - OPENAI_API_BASE_URL=http://IP_HOST:8000/v1
    network_mode: "host"
    volumes:
      - ./data:/app/backend/data
volumes:
  open-webui:

где IP_HOST — это IP-адрес сервера. 

Небольшое примечание. На сервере также были закрыты все порты, кроме ssh, и для доступа к open-webui использовался такой же туннель, как и в первой части статьи

Запросы через curl в наших экспериментах и конфигурации были использованы, скорее, для нагрузочного тестирования работы ИИ по сравнению с первой частью статьи, где они были основным инструментом для получения ответов модели. Большая же часть ответов была проанализирована через чаты open-webui, поскольку после получения всех ответов и экспорте чата, интерфейс GUI показывает время на обработку каждого запроса (для одной модели, но всё же). Это поможет в дальнейшем сравнить конфигурации серверов в общем и видеокарты в частности.  

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

Значения температуры, как уже отмечалось выше, позволяют «установить креативность» ответов модели. Задавать их можно в диапазоне от 0 до 1. Мы использовали крайние значения — 0,9 и 0,1. А кроме того, 0,8 — установленное по умолчанию и 0,45 — в качестве усредненного. 

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

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

Вопросы, которые мы задавали:

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

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

DeepSeek-R1-Distill-Llama-70B

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

“Я был разработан компанией DeepSeek с использованием технологий от DeepSeek-R1. Мои возможности основаны на модели искусственного интеллекта, обученной на огромном массиве данных, включая различные тексты, книги и другие источники информации. Это позволяет мне понимать и генерировать человеческий язык”.

Выше пример ответа на первый вопрос от модели DeepSeek — среднее время ответа чуть больше 2 секунд. 

Только для этой модели в графическом интерфейсе можно было посмотреть время генерации ответа. И благодаря этому у нас появилась возможность сравнивать разные видеокарты по скорости работы.

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

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

Подсчёт дней, который не заканчивается..

Анализ ответа. При ответе на этот вопрос ИИ в трёх вариантах из четырёх получил неправильный результат, сообщив, что в марте будет 5 вторников. 

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

Иногда модель мы пытались подвести к правильному ответу, не называя напрямую ошибку, и в одном случае это сработало — она всё же пришла к верному выводу. Однако при температуре 0.1, даже после указания на ошибку, модель не могла остановиться: она не видела, что ошиблась в дате, и трижды повторяла одни и те же рассуждения по кругу без какого-либо итога. Тогда её остановили вручную.
Время ответа в этих случаях варьировалось от 21 до 53 секунд.

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

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

Рассуждения модели и ответ на вопрос

Анализ ответа. На этот вопрос ответ модель всегда давала правильный ответ: Пи = 3,141592653589793. В одном из случаев ИИ не показал правильный ответ после завершения всех рассуждений. По сути, мы об этом и не просили, но хотели бы знать ответ, раз спрашиваем. Любопытно, что данное поведение наблюдалось при температуре 0,45. Интересно потому, что и до этого во втором вопросе был получен единственный правильный ответ при 0,45  Можно предположить, что значение 0,45 для DeepSeek близко к оптимальному, где может быть достигнут баланс между точностью и креативностью.

Рассуждения занимали от минимальных 27 до максимальных 33 секунд.

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

Один из вариантов рассуждений нейросети перед написанием поста

Анализ ответа. Отвечая на этот вопрос, нейросеть в конечном результате почти всегда использовала три ключевых параметра — скорость работы, удобство и надёжность хостинга. Трудно с этим не согласиться. В некоторых ответах могла предложить несколько вариантов текста на выбор. Довольно странно было получить от ИИ очень короткий и быстрый ответ (3 секунды) без каких-либо рассуждений при температуре 0,9.

Общие выводы по тестированию DeepSeek-R1-Distill-Llama-70B

Время ответа в анализе выше указывалось только для тестирования на NVIDIA GeForce RTX 4090, так как именно эта модель показывает общее время на рассуждение по каждому вопросу. Чтобы сравнить с результатами на видеокарте L40S, мы составили сводную таблицу. Учтите, что для разных GPU использовались разные сборки моделей, что тоже могло повлиять на скорость. Ниже — итоговая таблица:

 

NVIDIA GeForce RTX 4090

 

Время при T=0.1, сек

Время при T=0.45, сек

Время при T=0.8, сек

Время при T=0.9, сек

Среднее время, сек

Максимальный разброс значений, сек

1 вопрос

3

4

1

3

2,75

3

2 вопрос

*1

53

21

40

38

32

3 вопрос

27

31

32

33

30,75

6

4 вопрос

24

25

36

3

22

33

NVIDIA L40S

 

Время при T=0.1, сек

Время при T=0.45, сек

Время при T=0.8, сек

Время при T=0.9, сек

Среднее время, сек

Разброс значений, сек

1 вопрос

4

2

*2

*2

3

2

2 вопрос

*1

36

44

*2

40

8

3 вопрос

37

41

49

30

39,25

19

4 вопрос

38

29

27

41

33,75

12

T — это значение температуры при ответах модели,

*1 — ответы без завершения,

*2 — ответы, с завершением, но интерфейс не показал время ответа.

По данным результатам видно, что модель, которая работала с NVIDIA 4090, имеет больший разброс по времени ответа по сравнению с L40S. Подводя промежуточный итог по времени ответов DeepSeek, можно сказать, что модель на второй сборке с AMD EPYC и L40S показала более стабильные результаты. Это важно, так как на скорость и на задержки в ответах могла влиять не только сама модель, но и ещё работа веб-интерфейса и сервера.

Qwen2.5-72B-Instruct-AWQ

“Я был создан и обучен командой разработчиков и специалистов по искусственному интеллекту из Alibaba Cloud. Alibaba Cloud — это подразделение Alibaba Group, которое занимается облачными вычислениями и технологиями искусственного интеллекта. В процессе моего обучения использовались большие объемы данных и алгоритмы машинного обучения, чтобы я мог эффективно взаимодействовать с пользователями и предоставлять им информацию и помощь.”

Увы, этот ИИ не показывает свои рассуждения, поэтому время, затраченное на них не фиксируется и не отображается. По этой причине нет возможности привести данные для Qwen по скорости ответа, как было при анализе DeepSeek.

При ответе на первый вопрос модель сразу показала, что у неё есть некоторые проблемы со склонением и падежами, а также с определением правильного слова для продолжения предложения. Например, в некоторых вариантах звучало так:"...Alibaba Group, которое занимается областными вычислениями и...", или "...провайдером облачных услуг в Китае и одним из líderов в мире...", или "... Моя обучение и развитие происходили...". Но в целом, все её ответы сводятся к одному и тому же правильному по общему содержанию результату.

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

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

Ответ верный, но рассуждение хромает…

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

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

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

Показывает пример кода на python, который решает задачу

Анализ ответа. На третий вопрос нейросеть всегда отвечала верно: Пи = 3,141592653589793. В трёх случаях из четырёх модель также давала код на python, который позволяет без проблем определить число Пи с нужной точностью.

Вопрос 4. Представь, что ты работаешь копирайтером в компании хостинг-провайдера и далее. 

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

Ответ, в котором оказывается важно владение китайским языком

Анализ ответа. В ответах — те же ключевые аспекты, что и у DeepSeek. Однако, если при температуре 0,1 и 0,45 ответы были практически идентичны, то при значениях в 0,8 и 0,9 были получены абсолютно разные результаты. 

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

Meta-Llama-3.1-70B-Instruct-AWQ-INT4

“Your request to access this repo has been rejected by the repo's authors.”

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

Поэтому, чтобы всё-таки развернуть модель на сервере, мы использовали другой репозиторий на huggingface и модель hugging-quants/Meta-Llama-3.1-70B-Instruct-AWQ-INT4.

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

Вот так представляется данный ИИ

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

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

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

Ответ верный, но стоит спросить почему…

Анализ ответа. На второй вопрос ИИ также в половине случаев давала некорректный ответ — 5 вторников. Поскольку модель в ответах не указывает цепочку своих рассуждений, то сказать, с чем они связаны, затруднительно. Правильный ответ мы получили только при температуре 0,9 и 0,8. После попытки узнать, как она к нему пришла, сеть выдала что-то несвязное.

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

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

Правильно. Но где 15 знак?

Анализ ответа. Ответ на этот вопрос всегда получался не совсем корректным,  поскольку модель выдавала лишь 14 знаков после запятой вместо 15. Если же  выводилось 15 знаков, то в последнем обязательно была ошибка.

Вопрос 4. Представь, что ты работаешь копирайтером в компании хостинг-провайдера и далее. 

Анализ ответа. Как и все другие модели, эта нейросеть также использовала все главные параметры, которые мы указывали в условиях задания — скорость, надежность и удобство. При этом во всех ответах ИИ продемонстрировал правильные результаты по сути вопроса, лишь в одном случае модель — при температуре 0,9 — добавила в итоговый результат некорректный текст. А в трёх случаях указывала скидку на предоставление услуг (где-то 10, где-то 15 процентов), хотя это не отражено в задании и не фигурировало в ответах других моделей.

Анализ ответов по скорости генерации токенов

Постоянная скорость генерации токенов при ответе моделей составляла порядка 22.9 tokens/s (Avg generation throughput) для видеокарты NVIDIA GeForce RTX 4090 — при работе с одним пользователем. 

Для NVIDIA L40S время составляло уже 17.0 tokens/s, также при ответе одному пользователю. 

Если увеличивать число одновременных пользователей, то значения Avg generation throughput суммируются из-за каждого пользователя и тем самым растут, при этом оставаясь постоянными в расчёте на одного. Однако были замечены существенные отличия в загрузке контекста при использовании чата. То есть, если мы задаём вопрос ИИ без какой-либо истории и контекста, то генерация токенов пусть незначительно (22.9 против 17.0), но больше у NVIDIA GeForce RTX 4090.

Во время тестов, когда модель получала вопрос с контекстом, средняя пропускная способность (Avg prompt throughput) у NVIDIA L40S оказывалась гораздо выше, чем у NVIDIA GeForce RTX 4090, иногда в несколько раз. Это было особенно заметно по тому, как быстро модель начинала отвечать: L40S выдавала ответ почти мгновенно, в то время как RTX 4090 делала это с задержкой, что отмечалось также и визуально в веб-интерфейсе. 

Ниже приведены данные из логов контейнеров, показывающие среднюю скорость генерации (Avg generation throughput) и обработки запроса (Avg prompt throughput)  при ответе на вопросы с контекстом. 

Посмотреть данные

 

- для NVIDIA GeForce RTX 4090

DeepSeek-R1-Distill-Llama-70B
Avg prompt throughput: 3.4 tokens/s, Avg generation throughput: 23.0 tokens/s,
Avg prompt throughput: 3.4 tokens/s, Avg generation throughput: 23.0 tokens/s,
Avg prompt throughput: 3.4 tokens/s, Avg generation throughput: 22.9 tokens/s,
Avg prompt throughput: 3.4 tokens/s, Avg generation throughput: 22.9 tokens/s,
Avg prompt throughput: 3.4 tokens/s, Avg generation throughput: 23.0 tokens/s,
Avg prompt throughput: 3.4 tokens/s, Avg generation throughput: 22.9 tokens/s,
Avg prompt throughput: 3.4 tokens/s, Avg generation throughput: 22.8 tokens/s,
.....

Qwen2.5-72B-Instruct-AWQ
Avg prompt throughput: 94.0 tokens/s, Avg generation throughput: 14.2
Avg prompt throughput: 31.2 tokens/s, Avg generation throughput: 7.1
Avg prompt throughput: 105.8 tokens/s, Avg generation throughput: 5.6
Avg prompt throughput: 229.4 tokens/s, Avg generation throughput: 5.3
Avg prompt throughput: 9.1 tokens/s, Avg generation throughput: 5.2
Avg prompt throughput: 118.5 tokens/s, Avg generation throughput: 13.9
Avg prompt throughput: 43.8 tokens/s, Avg generation throughput: 0.1
Avg prompt throughput: 102.9 tokens/s, Avg generation throughput: 1.7
Avg prompt throughput: 190.3 tokens/s, Avg generation throughput: 5.9
Avg prompt throughput: 164.8 tokens/s, Avg generation throughput: 0.1
...

Meta-Llama-3.1-70B-Instruct-AWQ-INT4
Avg prompt throughput: 11.3 tokens/s, Avg generation throughput: 0.2 tokens/s,
Avg prompt throughput: 12.3 tokens/s, Avg generation throughput: 12.9 tokens/s,
Avg prompt throughput: 12.3 tokens/s, Avg generation throughput: 22.3 tokens/s,
Avg prompt throughput: 12.4 tokens/s, Avg generation throughput: 22.8 tokens/s,
Avg prompt throughput: 12.3 tokens/s, Avg generation throughput: 22.8 tokens/s,
Avg prompt throughput: 12.3 tokens/s, Avg generation throughput: 22.9 tokens/s,
Avg prompt throughput: 12.3 tokens/s, Avg generation throughput: 21.5 tokens/s,
Avg prompt throughput: 12.4 tokens/s, Avg generation throughput: 22.7 tokens/s,
Avg prompt throughput: 24.6 tokens/s, Avg generation throughput: 22.6 tokens/s,
Avg prompt throughput: 12.4 tokens/s, Avg generation throughput: 22.8 tokens/s,
Avg prompt throughput: 12.3 tokens/s, Avg generation throughput: 22.8 tokens/s,
Avg prompt throughput: 12.3 tokens/s, Avg generation throughput: 22.9 tokens/s,

- для NVIDIA L40S

DeepSeek-R1-Distill-Llama-70B
Avg prompt throughput: 29.9 tokens/s, Avg generation throughput: 6.4 tokens/s,
Avg prompt throughput: 85.3 tokens/s, Avg generation throughput: 9.3 tokens/s,
Avg prompt throughput: 3.6 tokens/s, Avg generation throughput: 0.2 tokens/s,
Avg prompt throughput: 60.4 tokens/s, Avg generation throughput: 17.0 tokens/s,
Avg prompt throughput: 22.1 tokens/s, Avg generation throughput: 22.7 tokens/s,
Avg prompt throughput: 29.0 tokens/s, Avg generation throughput: 34.2 tokens/s,
Avg prompt throughput: 51.7 tokens/s, Avg generation throughput: 33.3 tokens/s,
Avg prompt throughput: 119.2 tokens/s, Avg generation throughput: 1.4 tokens/s,
Avg prompt throughput: 113.8 tokens/s, Avg generation throughput: 5.6 tokens/s,
...

Qwen2.5-72B-Instruct-AWQ
Avg prompt throughput: 9.2 tokens/s, Avg generation throughput: 3.0 tokens/s,
Avg prompt throughput: 125.7 tokens/s, Avg generation throughput: 5.3 tokens/s,
Avg prompt throughput: 85.8 tokens/s, Avg generation throughput: 10.1 tokens/s,
Avg prompt throughput: 143.9 tokens/s, Avg generation throughput: 4.3 tokens/s,
Avg prompt throughput: 417.8 tokens/s, Avg generation throughput: 3.4 tokens/s,
Avg prompt throughput: 7.5 tokens/s, Avg generation throughput: 0.2 tokens/s,
Avg prompt throughput: 165.7 tokens/s, Avg generation throughput: 15.2 tokens/s,
Avg prompt throughput: 70.6 tokens/s, Avg generation throughput: 8.7 tokens/s,
Avg prompt throughput: 257.8 tokens/s, Avg generation throughput: 3.2 tokens/s,
Avg prompt throughput: 343.6 tokens/s, Avg generation throughput: 3.2 tokens/s,
...

Meta-Llama-3.1-70B-Instruct-AWQ-INT4
Avg prompt throughput: 111.7 tokens/s, Avg generation throughput: 7.2 tokens/s,
Avg prompt throughput: 85.2 tokens/s, Avg generation throughput: 7.5 tokens/s,
Avg prompt throughput: 7.6 tokens/s, Avg generation throughput: 0.1 tokens/s,
Avg prompt throughput: 185.9 tokens/s, Avg generation throughput: 8.8 tokens/s,
Avg prompt throughput: 129.5 tokens/s, Avg generation throughput: 10.6 tokens/s,
Avg prompt throughput: 156.4 tokens/s, Avg generation throughput: 10.9 tokens/s,
Avg prompt throughput: 10.4 tokens/s, Avg generation throughput: 1.2 tokens/s,
Avg prompt throughput: 98.0 tokens/s, Avg generation throughput: 8.8 tokens/s,
Avg prompt throughput: 99.6 tokens/s, Avg generation throughput: 6.8 tokens/s,
Avg prompt throughput: 97.9 tokens/s, Avg generation throughput: 10.9 tokens/s,

 

По логам видно, что Avg prompt throughput был одинаковым для DeepSeek и Llama при тестировании NVIDIA GeForce RTX 4090, но разным для NVIDIA L40S. 

Также модель на L40S очень быстро отвечала на вопросы с использованием ИИ Meta-Llama-3.1-70B-Instruct-AWQ-INT4 — даже без перехода на постоянную скорость генерации. 

Стоит упомянуть, что метрики выдаются с некоторой задержкой — визуально при просмотре лога 1 раз в секунду, что может искажать начальные значения. Для модели Qwen2.5 скорость начальной генерации также отличалась и для 4090. Это говорит о том, что присутствует явная зависимость от конкретной модели ИИ и используемой ей архитектуры.

Таким образом, можно сделать следующий вывод относительно выбора видеокарты. В однопользовательских сценариях работы нет особой разницы, на какой видеокарте работать. Но поскольку загрузка контекста происходит быстрее для L40S, то в многопользовательских сценариях она будет суммарно выигрывать по производительности и скорости у 4090.

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

Для анализа потребляемых ресурсов GPU к серверу был подключен дашборд grafana+prometheus+nvidia_gpu_exporter. Экспортёр для снятия показателей работы видеокарты был подключен также через докер в систему. Использовался следующий yml файл:

name: nvidia-exporter
services:
    nvidia_gpu_exporter:
        container_name: nvidia_smi_exporter
        restart: unless-stopped
        devices:
            - /dev/nvidiactl:/dev/nvidiactl
            - /dev/nvidia0:/dev/nvidia0
        volumes:
            - /usr/lib/x86_64-linux-gnu/libnvidia-ml.so:/usr/lib/x86_64-linux-gnu/libnvidia-ml.so
            - /usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1:/usr/lib/x86_64-linux-gnu/libnvidia-ml.so.1
            - /usr/bin/nvidia-smi:/usr/bin/nvidia-smi
        ports:
            - 9835:9835
        image: utkuozdemir/nvidia_gpu_exporter:1.1.0

 

Репозиторий nvidia_gpu_exporter вы можете найти по ссылке на github.

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

Видеокарта 4090 не используется системой без запуска модели

При запуске и инициализации модели ресурсы памяти/процессора видеокарты используются практически полностью:

Запускаем модель, и она загружается в GRAM (GPU 4090)

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

Модель загружена в GRAM, но процессор видеокарты в простое (GPU 4090)

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

Стоит отметить, что дашборды приведены лишь для 4090, но L40S показывала идентичное использование ресурсов при бездействии, загрузке модели и генерации ответов. 

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

Выводы, к которым мы пришли 

В этой части мы рассмотрели работу трёх нейронных сетей DeepSeek, Qwen2.5 и Llama. Сравнили работу LLM на различных видеокартах и сборках. Все это время мы старались опираться на факты, а не на субъективное мнение, но сейчас хотелось бы поделиться именно личной оценкой с позиции пользовательского опыта после проведенного тестирования. Для наглядности также попробуем представить, какому уровню знаний какого человека мог бы соответствовать уровень ответов каждой модели.

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

Такое поведение и неправильные ответы встречались и у других моделей (особенно по второму вопросу), но вкупе с «поломанной» генерацией токенов при определённых значениях температуры делает модель непригодной для использования в сколько-нибудь серьёзном предприятии. Конечно, возможно, проблемы связаны с тем, что модель была сильно дистиллированная, но запустить оригинал у нас не вышло по причине запрета со стороны разработчиков. В итоге получилось то, что получилось. 

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

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

Модель Qwen2.5. Именно ее можно считать фаворитом по итогам тестирования. Почти всегда она давала правильные ответы — в независимости от вопроса. Конечно, дело не обошлось без некоторых неточностей (неправильный подбор слова по контексту предложения или ошибки в склонениях/падежах), но они, скорее, вызывают улыбку, чем раздражают. По тому, как нейросеть строит рассуждения, её можно сравнить с человеком средних лет, профессионалом в своей области, который даёт ясные, законченные и лаконичные ответы на поставленные вопросы. Такой человек мог бы быть Python-разработчиком, так как часто решает задачи с помощью этого языка.

Подводя итог двум частям статьи, мы можем поделиться лишь субъективными впечатлениями, так как из-за ограничений в первой части (использовался только ollama вместо vllm+OpenAI) провести полноценное объективное сравнение не удалось. А это значит, что наша оценка во многом основана на личном опыте и «ощущениях от работы». 

Если сравнивать только подопытные модели DeepSeek (70B) на CPU и GPU, то можно сказать:  использование видеокарты никак не меняет рассуждения модели, а лишь добавляет скорости ответов. Если продолжить сравнение, но уже касательно разницы в GPU и качествах ответов моделей, то разные модели дают одинаковые по качеству заключения в независимости от видеокарты, на которой запущены.

Работа LLM на одном только CPU в реальных условиях непрактична — ответы генерируются слишком медленно, особенно при обработке контекста. Такой режим не подойдёт для полноценной работы с ИИ в современных реалиях, где особенно ценится время. Хотя может быть полезен разработчикам — в том числе для изучения огромных полных моделей (например, DeepSeek-R1) без ограничений и без необходимости в дорогих видеокартах.

Если цель — быстрая и стабильная работа модели, то запуск с GPU — оптимальный выбор. При этом выбор видеокарты зависит от предполагаемой нагрузки. Если пользователей немного и модель не задействована круглосуточно, отлично подойдёт десктопная карта вроде NVIDIA RTX 4090. Но если модель будет использоваться активно и многими людьми одновременно, лучше выбрать серверное решение вроде NVIDIA L40S — оно стабильнее и способно выдавать больше ответов за счёт более высокой пропускной способности.

 

*Признана в РФ экстремистской организацией

 

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


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

Telegram-канал FirstDEDIC

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

подписаться

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

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

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