Тестируем выделенный L40S и vGPU на 16 ГБ по производительности (llama.cpp, ComfyUI). comfyui.. comfyui. firstvds.. comfyui. firstvds. gpu.. comfyui. firstvds. gpu. llama.cpp.. comfyui. firstvds. gpu. llama.cpp. llm.. comfyui. firstvds. gpu. llama.cpp. llm. vds.. comfyui. firstvds. gpu. llama.cpp. llm. vds. vgpu.. comfyui. firstvds. gpu. llama.cpp. llm. vds. vgpu. Блог компании FirstVDS.. comfyui. firstvds. gpu. llama.cpp. llm. vds. vgpu. Блог компании FirstVDS. искусственный интеллект.. comfyui. firstvds. gpu. llama.cpp. llm. vds. vgpu. Блог компании FirstVDS. искусственный интеллект. Машинное обучение.. comfyui. firstvds. gpu. llama.cpp. llm. vds. vgpu. Блог компании FirstVDS. искусственный интеллект. Машинное обучение. нейросети.. comfyui. firstvds. gpu. llama.cpp. llm. vds. vgpu. Блог компании FirstVDS. искусственный интеллект. Машинное обучение. нейросети. производительность.. comfyui. firstvds. gpu. llama.cpp. llm. vds. vgpu. Блог компании FirstVDS. искусственный интеллект. Машинное обучение. нейросети. производительность. Серверное администрирование.. comfyui. firstvds. gpu. llama.cpp. llm. vds. vgpu. Блог компании FirstVDS. искусственный интеллект. Машинное обучение. нейросети. производительность. Серверное администрирование. тестирование.. comfyui. firstvds. gpu. llama.cpp. llm. vds. vgpu. Блог компании FirstVDS. искусственный интеллект. Машинное обучение. нейросети. производительность. Серверное администрирование. тестирование. Хостинг.
Тестируем выделенный L40S и vGPU на 16 ГБ по производительности (llama.cpp, ComfyUI) - 1

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

В мае этого года мы расширили линейку VDS с GPU и запустили тарифы с виртуальными видеокартами (VGPU). Поскольку цена на тарифы с физической (GPU Passthrough) и виртуальной картами отличается, решили сравнить их между собой. Основная цель тестирования — понять, насколько vGPU уступают в реальных задачах, а где разница не так критична, чтобы помочь своим клиентам с выбором. 

В этой статье представляем результаты нашего тестирования, которые могут пригодиться для реализации ИИ-инструментов — как нашим клиентам, так и всем, кому интересна эта тема.

Что тестируем: два стенда — Passthrough и vGPU-16

Для тестов мы взяли две конфигурации серверов. Одна — с выделенной видеокартой (GPU Passthrough), другая — с виртуальным GPU на 16 Гб. 16 Гб мы выбрали как «золотую середину» для большинства ИИ-задач (сюда помещаются многие популярные модели). Также проводили тесты на vGPU 8 Гб. Сразу стало понятно, что работать с LLM уже некомфортно и проблематично поэтому дальше vGPU-8 упоминаем, но подробно на этой конфигурации не останавливаемся.

Тестовый стенд с Passthrough:

  • CPU — 16 ядер AMD EPYC 9334;

  • RAM — 32 Гб;

  • GPU — NVIDIA L40S, 48 Гб.

Тестовые стенды с vGPU (также на базе  NVIDIA L40S):

  • CPU — 8 ядер AMD EPYC 933

  • 4;RAM — 12 Гб;

  • GPU — NVIDIA L40S-16Q, 16 Гб.

Конфигурации vGPU развернуты на базе NVIDIA L40S с использованием технологии виртуализации NVIDIA. Это позволяет сравнивать их на равных: разница в производительности определяется только объемом выделенных ресурсов.

Ставим CUDA и драйверы 

Изначально на сервере с выделенной видеокартой (Passthrough GPU) была установлена только стандартная ОС Ubuntu 24.04 LTS. По умолчанию в ней нет драйверов для работы с GPU, включая проприетарные от Nvidia. Поэтому требовалось установить их вручную.

Для указанной ОС установка выполняется следующим образом:

1. Для начала нужно обновить все репозитории и все текущие пакеты в системе:

apt update
apt upgrade

2. Далее устанавливаем компилятор gcc, необходимый для сборки CUDA:

apt install gcc-12 g++-12

3. Подключаем официальные репозитории от Nvidia:

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
dpkg -i cuda-keyring_1.1-1_all.deb
apt update

4. После этого устанавливаем СUDA. Драйверы NVDIA добавятся автоматически как зависимости:

apt install cuda

5. Прописываем переменные окружения. Действие нужно повторить для каждого пользователя, который будет работать с CUDA:

echo 'export PATH="/sbin:/bin:/usr/sbin:/usr/bin:${PATH}:/usr/local/cuda/bin"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc

6. После установки желательно перезагрузить сервер.

7. Далее проверяем, что ОС видит видеокарту и утилиты доступны:

nvidia-smi
lsmod | grep nvi 
nvcc -V

Для других ОС команды и пакеты могут отличаться. Рекомендуем сверяться с официальной документацией NVIDIA. Либо вы можете заказать сервер с нужным предустановленным шаблоном CUDA, тогда установка драйверов вручную не понадобится.

Для сервера с vGPU мы отдельно ничего не устанавливали, так как версия драйверов на гостевой ОС должна соответствовать той, что поддерживает гипервизор, и менять её нельзя. Используются только предустановленные.

На момент тестов на серверах были следующие версии: 

  • драйвер NVIDIA — 570.211.01, 

  • драйвер для CUDA — 12.8.

Собираем llama.cpp под GPU

Для тестирования мы выбрали llama.cpp. Он содержит встроенные стандартные тесты и может запускаться непосредственно на сервере. Такой подход снижает накладные расходы по сравнению с Docker и позволяет точнее оценить разницу в производительности между конфигурациями серверов.

Сборка на сервере с Passthrough

Перед тестированием мы загрузили исходные файлы llama.cpp и произвели компиляцию на сервере следующим образом:

apt install git cmake
git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp/
cmake -B build -DGGML_CUDA=ON
cmake --build build -j$(nproc)
Примечание

Флаг -j$(nproc) запускает сборку с использованием всех доступных ядер процессора. Это ускоряет выполнение команды, но сильно нагружает CPU. Если вы планируете параллельно использовать его для других задач, укажите вручную меньшее количество ядер, например -j4. От их количества будет зависеть насколько долго будет длиться сборка.

Сборка на серверах с vGPU

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

apt install git cmake cuda-toolkit-12-8
git clone https://github.com/ggml-org/llama.cpp.git
cd llama.cpp/
cmake -B build -DGGML_CUDA=ON -DCUDAToolkit_ROOT=/usr/local/cuda-12.8   -DCMAKE_CUDA_COMPILER=/usr/local/cuda-12.8/bin/nvcc
cmake --build build -j$(nproc)

Также llama.cpp умеет запускать веб-сервер с чатом — это позволило нам в процессе тестирования проверить, насколько осмысленно модель отвечает на вопросы в диалоге.

Готовим ComfyUI для генерации видео 

Дополнительно мы развернули ComfyUI — бесплатный open-source интерфейс на основе узлов (nodes) для генерации изображений, видео и анимаций с помощью нейросетей. Мы выбрали его за гибкость и хорошую поддержку видеогенерации.

Кратко опишем его установку.

Ставим необходимые пакеты для создания окружения:

apt install python3-pip python3-venv

Создаем окружение, переходим в него и устанавливаем cli:

python3 -m venv comfy-env
source comfy-env/bin/activate
pip install comfy-cli
cd ./comfy-env/

Устанавливаем с помощью cli в текущий каталог:

comfy --here install

Проверяем, что ComfyUI установлен:

comfy --here which

И запускаем ComfyUI (из того же виртуального окружения):

comfy launch

По инструкции выше мы установили только панель управления. Далее нам требовалось загрузить несколько компонентов для создания видео и разместить их в необходимых каталогах. Подробные инструкции по настройке есть в документации. Отметим, что мы использовали шаблон «Wan2.2 TI2V 5B Hybrid Version Workflow Example». При тестировании ComfyUI мы сосредоточились на скорости генерации роликов.

Важный момент: для vGPU-16 запуск ComfyUI отличался. Команда для запуска:

python main.py --disable-cuda-malloc --disable-dynamic-vram

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

[ERROR] !!! Exception during processing !!! CUDA error: operation not supported
…
[ERROR] !!! Exception during processing !!! VBAR allocation failed

Также для нормальной работы на сервере с vGPU-16 пришлось добавить swap размером 10 Гб в дополнение к 4 Гб zram (устанавливается вместе с шаблоном) – иначе при запуске генерации приложение принудительно останавливалось (OOM Killer).

Методика: модели, слои, токены, замеры памяти

В этом разделе расскажем подробнее о методике тестирования: о выбранных моделях, параметрах запуска, как проводились замеры видеопамяти, о некоторых настройках llama-bench и ComfyUI.

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

llama.cpp использует модели только в формате GGUF (GPT-Generated Unified Format) — это современный бинарный формат файлов для хранения больших языковых моделей, оптимизированный для быстрого вывода на конфигурациях CPU + GPU. Модели загружались с сайта huggingface.co

Для тестирования использовались следующие модели:

Из списка видно, что использовались модели серии Qwen — они популярны и работают довольно быстро. Также для проверки влияния архитектуры на ресурсы сервера мы взяли  модели версий 2.5 и 3.6.

Подготовка моделей (сборка из частей)

Некоторые модели состоят из нескольких файлов. Перед использованием мы собрали их в один файл с помощью утилиты llama-gguf-split (компилируется при сборке вместе с llama.cpp). 

Команда для сборки частей:

/path/to/bin/llama-gguf-split --merge /path/to/FIRST_PART /path/to/OUTPUT_FILE

Где:

/path/to/FIRST_PART — путь к первой части модели,

/path/to/OUTPUT_FILE — путь к получаемой целой модели.

Пример для модели qwen2.5-14b-instruct-q4_0:

~/llm_models# ../llama.cpp/build/bin/llama-gguf-split --merge ./qwen2.5-14b-instruct-q4_0-00001-of-00003.gguf ./qwen2.5-14b-instruct-q4_0.gguf
gguf_merge: ./qwen2.5-14b-instruct-q4_0-00001-of-00003.gguf -> ./qwen2.5-14b-instruct-q4_0.gguf
gguf_merge: reading metadata ./qwen2.5-14b-instruct-q4_0-00001-of-00003.gguf done
gguf_merge: reading metadata ./qwen2.5-14b-instruct-q4_0-00002-of-00003.gguf done
gguf_merge: reading metadata ./qwen2.5-14b-instruct-q4_0-00003-of-00003.gguf done
gguf_merge: writing tensors ./qwen2.5-14b-instruct-q4_0-00001-of-00003.gguf done
gguf_merge: writing tensors ./qwen2.5-14b-instruct-q4_0-00002-of-00003.gguf done
gguf_merge: writing tensors ./qwen2.5-14b-instruct-q4_0-00003-of-00003.gguf done
gguf_merge: ./qwen2.5-14b-instruct-q4_0.gguf merged from 3 split with 579 tensors.

Тестирование llama.cpp

Запуск каждого теста выполнялся из каталога ~/llama.cpp/build/bin c помощью бинарного файла llama-bench, который был создан на этапе подготовки к тестированию.

Команда для тестирования генерации токенов:

./llama-bench -m /path/to/model -p 0 -n 1024 -ngl 0,1,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95 

Поясним некоторые параметры:

-n – количество токенов для генерации;

-ngl – количество слоёв модели, загружаемых в gpu;

-p – количество загружаемых токенов. В тестах было установлено 0 – то есть никакой промт не загружался.

Как вы можете видеть, тесты на генерацию токенов производились без загрузки токенов – только чистая генерация. Тесты замеряли скорость генерации новых токенов после загрузки модели, с постепенным увеличением количества слоёв, загружаемых в память GPU. Таким образом, мы постепенно шаг за шагом «догружали» модели в GPU, проводя тесты. Тем самым разгружали RAM и CPU, задействуя всё больше ресурсов видеокарты и изменяя количество слоёв ngl от 0 (видеокарта почти не используется) до 99 (хотя покажем далее, что это было избыточным). И при каждом значении ngl модель генерировала 1024 токена, кроме запуска Qwen3.6-35B-A3B-APEX-Balanced для VGPU-16.

Для него использовалось только 128 токенов, так как на начальных этапах (когда GPU почти не задействован) работа проводится лишь с использованием ядер сервера – у VGPU-16 8 ядер, и скорость генерации получалась очень низкой. К тому же для моделей на сервере vGPU-16 не получилось полностью выгрузить модели этой серии полностью.

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

Ссылка на документацию llama-bench — можно посмотреть подробнее о параметрах и форматах вывода. 

С помощью генерации с llama-bench мы старались количественно оценить возможности работы сервера с разными моделями. Но они не отражают и не показывают, какие именно рассуждения и ответы реально генерирует модель. Поэтому также в дополнение к чисто «синтетическим тестам» запустили llama.cpp как веб-сервер с чатом — для взаимодействия с моделью через браузер. 

На этапе тестирования стало очевидно, что скорость генерации ответов ИИ практически полностью соответствуют результатам llama-bench. По этой причине мы запускали все модели в интерактивном режиме только для VDS с Passthrough — для демонстрации работы и оценки осмысленности ответов моделей. 

Всем моделям задавался следующий вопрос: «Расскажи, кто ты и что умеешь. Расскажи об этом в 200 словах». 

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

Как замеряли потребление памяти во время тестов

Значения использования памяти снимались через nvidia-smi параллельно с работой llama.cpp раз в 20 секунд. При формировании графиков из полученных значений брались только повторяющиеся значения — именно они показывают использование памяти в устойчивом режиме работы. Поэтому переходные изменения потребления памяти в них не не отражены.

Тестирование ComfyUI

Как мы уже упоминали ранее, тестирование ComfyUI проводилось с шаблоном «Wan2.2 TI2V 5B Hybrid Version Workflow Example», который позволяет генерировать короткие ролики по текстовому описанию.

Промпт (одинаковый для всех тестов):

«Low contrast. In a retro 1970s-style subway station, a street musician plays in dim colors and rough textures. He wears an old jacket, playing guitar with focus. Commuters hurry by, and a small crowd gathers to listen. The camera slowly moves right, capturing the blend of music and city noise, with old subway signs and mottled walls in the background.» 

Перевод:

«Низкий контраст. На станции метро в стиле ретро 1970-х годов уличный музыкант играет в тусклых тонах и с грубой текстурой. Он в старой куртке, сосредоточенно играет на гитаре. Мимо спешат пассажиры, и небольшая толпа собирается послушать. Камера медленно движется вправо, запечатлевая смешение музыки и городского шума, на фоне старых вывесок метро и пятнистых стен.»

Измеряли среднее время генерации видео для роликов 5, 10 и 15 секунд. Для каждой длительности видео было проведено порядка 4-5 генераций в разное время для уточнения результатов.

Дополнительно: в шаблоне есть опция референсных изображений, но при проведении тестов мы её не использовали.

Результаты тестирования

В этом разделе собрали все результаты тестирования: графики llama-bench (память и скорость генерации), живые ответы моделей в веб-чате, а также замеры генерации видео в ComfyUI. Сначала покажем результаты для Passthrough, затем — для VGPU-16, а после — сравним обе конфигурации между собой.

Passthrough: полный доступ к ресурсам — что даёт

На VPS с Passthrough объём видеопамяти позволил загрузить все модели целиком, поэтому сначала покажем использование ресурсов сервера в этих случаях.

Тестируем выделенный L40S и vGPU на 16 ГБ по производительности (llama.cpp, ComfyUI) - 2

На графике выше вы можете видеть, сколько памяти занято при различной степени загрузки моделей в GPU (напоминаем, что количество слоёв ngl варьируется от 0 до 99). То есть отдельной точкой на графике можно считать установленное значение памяти vRAM от степени загрузки модели в видеопамять при генерации 1024 токенов.

Тестируем выделенный L40S и vGPU на 16 ГБ по производительности (llama.cpp, ComfyUI) - 3

Здесь уже показана скорость генерации токенов моделями также в зависимости от степени загрузки модели в GPU. То есть кривые отражают, как быстро работает модель при различной степени загрузки в vRAM (ngl). 

Вот некоторые выводы, к которым мы пришли, анализируя данные:

  1. Чем больше исходная модель, тем больше используется памяти GPU (что довольно очевидно, но стоит об этом упомянуть).

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

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

    Например:

    • для моделей Qwen3.6-35B-A3B-APEX-* —  ~45 слоёв, 

    • для моделей  qwen2.5-14b-instruct* —  ~50 слоёв, 

    • для qwen2.5-1.5b-instruct-fp16 — ~30 слоёв. 

    Максимальное использование памяти видеокарты:

Модель

Количество загруженных слоев при насыщении

Максимальное использование памяти GPU, MiB

qwen2.5-1.5b-instruct-fp16 

30

3757

qwen2.5-14b-instruct-q3_k_m

50

7665

qwen2.5-14b-instruct-q4_0

50

8689

Qwen3.6-35B-A3B-APEX-I-Mini

45

14513

Qwen3.6-35B-A3B-APEX-Compact

45

17287

Qwen3.6-35B-A3B-APEX-Balanced

45

25171

4.Все кривые для одной модели похожи по поведению использования памяти. Отличаются только значения. Только у модели Qwen3.6-35B-A3B-APEX-* характерны небольшие задержки на 5-10 слоях, чего нету у других моделей. А переход  на «плато» ( 45-50 слоёв) —  менее крутой.

5. Графики использования памяти не начинаются с нуля. Значит, даже при указании на тестирование без загрузки слоев память GPU всё также используется на сервере, хоть и в минимальных пределах.

VGPU-16: золотой баланс или вынужденный компромисс?

Теперь приведем аналогичные полученные зависимости для vGPU-16. На графиках ниже — использование памяти vGPU-16 и скорость генерации токенов для разных моделей:

Тестируем выделенный L40S и vGPU на 16 ГБ по производительности (llama.cpp, ComfyUI) - 4

Кривые также отражают, сколько памяти занято при различной степени загрузки моделей в GPU для разных ngl – от 0 до 99.

Тестируем выделенный L40S и vGPU на 16 ГБ по производительности (llama.cpp, ComfyUI) - 5

На графиках видно, что модели Qwen3.6-35B-A3B-APEX-* не смогли полностью загрузиться в видеопамять и работали только в «смешанном» режиме CPU + GPU.

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

  • 45 слоёв для Mini,

  • 40 слоёв для Compact,

  • 25 слоёв Balanced. 

llama.cpp пытался получить больше памяти, чем доступно на сервере. Однако сами зависимости по своей форме и значениям практически не отличаются от Passthrough.

Сравнение конфигураций между собой

Чтобы убедиться в том, что модели ведут себя одинаково на разных конфигурациях, приведем для сравнения зависимости для qwen2.5-1.5b-instruct-fp16 — эта модель запускалась и работала на всех конфигурациях:

Тестируем выделенный L40S и vGPU на 16 ГБ по производительности (llama.cpp, ComfyUI) - 6

Графики проходят очень близко к друг другу, и полная загрузка модели проходит при тех же значениях загруженных слоёв (ngl) в видеопамять. Использование видеопамяти зависит только от самой модели и не зависит от конфигурации сервера. При детальном рассмотрении скорости генерации в начале кривых (до 20-30 слоёв)  наблюдается меньшая скорость – в этих режимах активно используются ядра процессора сервера, и чем слабее конфигурация, тем медленнее работает модель.

Также приведем сравнение скорости генерации для моделей qwen2.5-14b-instruct-q3_k_m и qwen2.5-14b-instruct-q4_0 при тестах на Passthrough и GPU-16:

Тестируем выделенный L40S и vGPU на 16 ГБ по производительности (llama.cpp, ComfyUI) - 7
Тестируем выделенный L40S и vGPU на 16 ГБ по производительности (llama.cpp, ComfyUI) - 8

Как и в предыдущем случае, при малом использовании GPU и активной работе на CPU сервер с большим количеством ядер (Passthrough — 16 ядер, VGPU-16 — 8 ядер) имеет более высокую скорость генерации токенов. При полной загрузке моделей в видеопамять разница исчезает.

Загрузка CPU и GPU (только для vGPU)

Также дополнительно для конфигурации с vGPU мы записали использование CPU  и GPU в процентах во время проведения тестов. Было интересно узнать, как используются ресурсы CPU и GPU в разных режимах. По полученным значениям построены графики, показывающие процент загруженности CPU и GPU в зависимости от количества загруженных слоёв модели. То есть каждая точка на кривой отражает процент загрузки ядер CPU и GPU в зависимости от степени загрузки модели в видеокарту (ngl). 

Результаты для моделей серий qwen2.5* — ниже:

Кривые использования CPU (в процентах от максимально доступных ресурсов) указаны с префиксом cpu_* для различных моделей, кривые  GPU — с префиксом gpu_*.

Кривые использования CPU (в процентах от максимально доступных ресурсов) указаны с префиксом cpu_* для различных моделей, кривые  GPU — с префиксом gpu_*.

Кривые использования CPU (в процентах от максимально доступных ресурсов) указаны с префиксом cpu_* для различных моделей, кривые  GPU — с префиксом gpu_*. 

Чем больше слоёв (ngl) загружено в GPU, тем выше загрузка его ядер — кривые gpu_* восходящие. И наоборот: загрузка CPU при этом падает — кривые cpu_* нисходящие. Значение на кривой, где модель полностью помещается в видеопамять, соответствует ранее описанному «плато».

На графиках отлично видно: при работе модели qwen2.5-1.5b-instruct-fp16 до 30 слоёв процессор сервера загружен полностью — даже несмотря на постепенный рост использования GPU. Та же тенденция у моделей qwen2.5-14b-instruct-q3_k_m и qwen2.5-14b-instruct-q4_0, лишь с одним отличием — «плато» для них возникает при 40-50 слоях.

Тесты llama-server: живые ответы моделей

Ниже — ответы моделей в веб-чате llama-server.
Ответ qwen2.5-1.5b-instruct-fp16

Ответ qwen2.5-1.5b-instruct-fp16
Ответ qwen2.5-14b-instruct-q3_k_m

Ответ qwen2.5-14b-instruct-q3_k_m
Ответ qwen2.5-14b-instruct-q4_0

Ответ qwen2.5-14b-instruct-q4_0
Ответ Qwen3.6-35B-A3B-APEX-I-Mini

Ответ Qwen3.6-35B-A3B-APEX-I-Mini
Ответ Qwen3.6-35B-A3B-APEX-Compact

Ответ Qwen3.6-35B-A3B-APEX-Compact
Ответ Qwen3.5-35B-A3B-APEX-Balanced

Ответ Qwen3.5-35B-A3B-APEX-Balanced

Реализация чата llama.cpp удобно отображает скорость генерации, и она, в целом, соответствует результатам  llama-bench.

Сводная таблица по полученным значениям:

Модель

Время ответа, с

Количество токенов при ответе, токены

Скорость генерации токенов при ответе, токены/с

qwen2.5-1.5b-instruct-fp16

0,5

98

195,78

qwen2.5-14b-instruct-q3_k_m

2,0

166

84,85

qwen2.5-14b-instruct-q4_0

2,3

174

76,82

Qwen3.6-35B-A3B-APEX-I-Mini

31

5473

174,97

Qwen3.6-35B-A3B-APEX-Compact

53

8793

164,61

Qwen3.6-35B-A3B-APEX-Balanced

33

4940

148,37

При сопоставлении скорости генерации токенов с предыдущим тестом скорость ответа от моделей соответствует ранее полученным результатам. Также наблюдается интересный момент по самим ответам – количество генерируемых моделью серии Qwen 2.5 значительно меньше, чем Qwen 3.6. Это связано с тем, что модель при ответе пользователю проводит рассуждения (на картинках выше скрыто под «плашкой Reasoning») и только потом даёт окончательный ответ.

Тесты создания видео: генерация видео

Теперь переходим к результатам генерации видео.

Сводная таблица результатов генерация видео для Passthrough:

Номер теста

Продолжительность видео, с 

Среднее время генерации, с

1

5

144

2

10

385

3

15

720

Сводная таблица результатов генерация видео для vGPU-16:

Номер теста

Продолжительность видео, с 

Среднее время генерации, с

1

5

293

2

10

570

3

15

932

Выводы и интересные наблюдения:

  1. Время генерации видео для Passthrough значительно меньше, чем для vGPU – для самого короткого видео разница двукратная при сравнении конфигураций.

  2. Для Passthrough не требуется использовать дополнительные флаги при запуске приложения и/или добавлять swap (рассказывали об этом в разделе подготовки к тестированию) – видеопамяти хватает и подобных проблем не наблюдается как на vGPU.

  3. Время генерации видео растет пропорционально времени – для создания ролика в 15 секунд нужно затратить приблизительно в 3 раза больше времени, чем для создания 5-секундного для vGPU.

  4. Для Passthrough эта разница значительно больше — приблизительно  в 5 раз  при сравнении самого малого видеоролика с самым длительным. Разница между роликом средней продолжительности и 5-секундным также двукратная, как и у vGPU.

    Тестируем выделенный L40S и vGPU на 16 ГБ по производительности (llama.cpp, ComfyUI) - 16
  5. При изменении/увеличении/уменьшении промта для генерации время значительно не отличалось от полученного ранее для любой конфигурации. 

  6. Если уменьшить количество проходов (во всех случаях использовалось значения 20), то можно добиться и большей скорости, но при этом будет страдать качество.

Итоги: какой GPU брать и когда

Мы рассмотрели и провели тестирование 2 различных конфигураций VDS с GPU: Passthrough и vGPU-16. 

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

Из результатов по vGPU видно, что vGPU-16 уверенно работает со всеми малыми моделями. Модели довольно крупные запускаются, но только в смешанном режиме CPU+GPU (со снижением скорости). Для некоторых практических задач с невысокими требованиями к ресурсам этого должно быть достаточно. VGPU-16 также позволяет запустить ComfyUI, но с некоторыми ограничениями: например, пришлось добавлять большой swap и менять режимы работы приложения, чтобы добиться корректной работы.

Итак, к чему мы пришли в  итоге.

Passthrough даёт полный доступ к видеокарте и показывает высокую производительность. Он подходит для генерации видео, работы с объемными моделями (35B+), а также для задач, где важна любая версия драйверов и CUDA. Высокая цена — плата за максимум возможностей.

vGPU — это компромисс между ценой и производительностью. Он умеет работать с малыми и средними моделями (до 14B), справляется с большинством LLM-задач: чат-боты, генерация текста, несложная аналитика. Но упирается в ограничения, например, требует дополнительных настроек, а крупные модели (35B+) работают медленно или вообще не запускаются. По сути, VGPU — это оптимальный баланс цены и скорости для некритичных и небольших задач.

Стоит ли переплачивать за Passthrough? Да — если проект приносит деньги или нужна стабильная высокая скорость. Нет — если вы на этапе прототипа или бюджет ограничен начните с VGPU-16 и масштабируйтесь позже.

Автор текста: Дмитрий, системный администратор FirstVDS


НЛО прилетело и оставило здесь промокод для читателей нашего блога:
-15% на заказ любого VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.

Автор: FirstJohn

Источник