Процессоры NVIDIA Vera удваивают пропускную способность для Modal Sandboxes

Источник: Modal•

Процессоры NVIDIA Vera удваивают пропускную способность для Modal Sandboxes

Мы протестировали новый процессор NVIDIA на базе архитектуры Arm на задачах автономных песочниц (Sandbox). Под высокой нагрузкой он выполняет значительно больше задач, чем альтернативы на базе x86 и Graviton, без ущерба для задержки.

На прошлой неделе компания NVIDIA доставила первый сервер Modal с процессором Vera прямо в наш офис в Сан-Франциско. Сейчас он уже вовсю работает в серверной стойке, и мы очень воодушевлены тем, что это может дать для Modal Sandboxes и, как следствие, для пользователей Modal.

Vera — это новый процессор NVIDIA с поддержкой архитектуры Arm, созданный для платформы графических процессоров Vera Rubin, но также доступный в виде отдельного серверного процессора.

Поддержка Arm станет огромным изменением для Modal, которая исторически работала исключительно на машинах с архитектурой x86. Нам потребуется внести изменения во всю нашу инфраструктуру и систему сборки образов, чтобы поддержать совершенно другую архитектуру процессоров, но результаты тестов впечатляют: двукратное увеличение пропускной способности. Благодаря этому процессор NVIDIA Vera становится невероятно привлекательным вариантом для работы Modal Sandboxes.

Почему Vera может иметь большое значение для Modal

Во-первых, многопользовательские (multi-tenant) кластеры работают в условиях постоянного шума.

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

  • Использование ресурсов может быть крайне пиковым. Песочница может проводить большую часть времени в относительно неактивном состоянии, ожидая ответа от языковой модели (LLM), с внезапными и непредсказуемыми скачками CPU, в 10 раз превышающими базовый уровень, из-за команды npm install или ресурсоемкого поиска grep.
  • Характер нагрузок заранее неизвестен. LLM может отправить в песочницу что угодно, и это становится известным только во время выполнения. Определение размера ресурсов часто сводится к простому угадыванию.
  • Все эти разнородные нагрузки смешиваются в единый пул вычислительных ресурсов, что может привести к проблеме «шумных соседей». Производительность одного пользователя может зависеть от поведения другого.

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

В отличие от других провайдеров, которые заставляют пользователей выбирать фиксированные резервы под максимальную нагрузку, Modal Sandboxes поддерживают всплески (bursting). Это позволяет пользователям резервировать гарантированную емкость под их медианное (P50) использование, а не под худший сценарий вроде установки npm в момент P100, и рассчитывать на то, что кратковременный всплеск будет поглощен за счет резерва внутри хост-ноды.

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

Во-вторых, каждая секунда работы процессора стоит дороже, чем просто этот процессор.

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

В Modal мы выделяем два основных сценария использования: фоновые агенты и обучение с подкреплением (reinforcement learning rollouts).

  • Для фоновых агентов, таких как Ramp Inspect или работающих на Niteshift, более быстрые агенты означают более быстрые ответы, что ведет к росту доходов и удержанию пользователей. Это также означает меньшее время работы CPU, что снижает себестоимость (COGS).
  • В задачах обучения с подкреплением графические процессоры простаивают, пока выполняются процессы в песочнице. Большинство схем обучения по-прежнему являются синхронными, и целый веер запусков должен завершиться, прежде чем графический процессор сможет перейти к следующему шагу. Любое время, сэкономленное на процессоре, — это время, сэкономленное на графическом процессоре.

Тестирование процессора Vera

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

Создание «агентского» бенчмарка — сложная задача, учитывая, что большая часть работы на серверах не ограничена возможностями процессора, и здесь нет какого-то одного конкретного параметра, который мы хотели бы оптимизировать. Если для рабочей нагрузки базы данных можно оптимизировать дисковый ввод-вывод, а для обработки изображений — SIMD, то для песочниц нам нужно было придумать симулятор, который был бы одновременно конкурентным и разнородным: большой мешок хаоса, который мы могли бы обрушить на процессор.

На его основе мы разработали Agentless Agent Bench, коллекцию из 50 эталонных решений и верификаторов Terminal-Bench, очищенную от всех сетевых вызовов и предварительно разогретую в параллельных контейнерах Docker. Это позволило изолировать задачи, которые агенты и алгоритмы обучения с подкреплением реально выполняют на процессоре — компиляцию, поиск по файлам, операции с git, эмуляцию устройств и многое другое.

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

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

Увидев эти результаты впервые, я, по правде говоря, отнесся к ним скептически. Из 50 протестированных нами задач Vera часто работала лучше других процессоров, но не всегда, и не с особенно большим отрывом.

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

Ложный компромисс

В большинстве систем пропускная способность и задержка находятся в отношении компромисса.

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

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

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

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

Но мы выяснили, что в случае с Vera это не так.

Vera работает еще лучше при высокой нагрузке

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

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

Выполнение задач в условиях состязательности Анимированная диаграмма циклически переключает 50, 100 и 150 параллельных контейнеров каждые 2,5 секунды. Vera, AMD Zen 5 и Intel GNR отображаются сплошными линиями. Graviton 4, Graviton 5 и Intel GNR VM отображаются точечными линиями. Обе кривые GNR имеют голубой цвет. Все представления используют общие оси, охватывающие от 1 до 192 логических ЦП и от 0 до 7000 подтвержденных завершений за 60 секунд. Ручной выбор приостанавливает циклическое переключение; кнопка воспроизведения возобновляет его. БЕНЧМАРК РАБОЧЕЙ НАГРУЗКИ В ПЕСОЧНИЦЕ Выполнение задач в условиях состязательности 50 задач TerminalBench без сетевых вызовов Логические ЦП, разрешенные с помощью cpuset01k2k3k4k5k6k7k13264961281601928896128AWS Graviton 4 (vm): 1 логический ЦП, 73 завершения / 60 с AWS Graviton 4 (vm): 2 логических ЦП, 146 завершений / 60 с AWS Graviton 4 (vm): 3 логических ЦП, 209 завершений / 60 с AWS Graviton 4 (vm): 4 логических ЦП, 265 завершений / 60 с AWS Graviton 4 (vm): 5 логических ЦП, 315 завершений / 60 с AWS Graviton 4 (vm): 6 логических ЦП, 345 завершений / 60 с AWS Graviton 4 (vm): 7 логических ЦП, 381 завершение / 60 с AWS Graviton 4 (vm): 8 логических ЦП, 411 завершений / 60 с AWS Graviton 4 (vm): 10 логических ЦП, 475 завершений / 60 с AWS Graviton 4 (vm): 12 логических ЦП, 519 завершений / 60 с AWS Graviton 4 (vm): 14 логических ЦП, 595 завершений / 60 с AWS Graviton 4 (vm): 16 логических ЦП, 693 завершения / 60 с AWS Graviton 4 (vm): 20 логических ЦП, 866 завершений / 60 с AWS Graviton 4 (vm): 26 логических ЦП, 1208 завершений / 60 с AWS Graviton 4 (vm): 32 логических ЦП, 1513 завершений / 60 с AWS Graviton 4 (vm): 40 логических ЦП, 1930 завершений / 60 с AWS Graviton 4 (vm): 50 логических ЦП, 2381 завершение / 60 с AWS Graviton 4 (vm): 63 логических ЦП, 2503 завершения / 60 с AWS Graviton 4 (vm): 79 логических ЦП, 2889 завершений / 60 с AWS Graviton 4 (vm): 96 логических ЦП, 2940 завершений / 60 с AWS Graviton 5 (vm): 1 логический ЦП, 91 завершение / 60 с AWS Graviton 5 (vm): 2 логических ЦП, 176 завершений / 60 с AWS Graviton 5 (vm): 3 логических ЦП, 260 завершений / 60 с AWS Graviton 5 (vm): 4 логических ЦП, 320 завершений / 60 с AWS Graviton 5 (vm): 5 логических ЦП, 371 завершение / 60 с AWS Graviton 5 (vm): 6 логических ЦП, 400 завершений / 60 с AWS Graviton 5 (vm): 7 логических ЦП, 451 завершение / 60 с AWS Graviton 5 (vm): 8 логических ЦП, 490 завершений / 60 с AWS Graviton 5 (vm): 10 логических ЦП, 557 завершений / 60 с AWS Graviton 5 (vm): 12 логических ЦП, 627 завершений / 60 с AWS Graviton 5 (vm): 14 логических ЦП, 713 завершений / 60 с AWS Graviton 5 (vm): 16 логических ЦП, 817 завершений / 60 с AWS Graviton 5 (vm): 20 логических ЦП, 1035 завершений / 60 с AWS Graviton 5 (vm): 26 логических ЦП, 1445 завершений / 60 с AWS Graviton 5 (vm): 32 логических ЦП, 1805 завершений / 60 с AWS Graviton 5 (vm): 40 логических ЦП, 2299 завершений / 60 с AWS Graviton 5 (vm): 50 логических ЦП, 2631 завершение / 60 с AWS Graviton 5 (vm): 63 логических ЦП, 2855 завершений / 60 с AWS Graviton 5 (vm): 79 логических ЦП, 3468 завершений / 60 с AWS Graviton 5 (vm): 96 логических ЦП, 3474 завершения / 60 с AMD Zen 5: 1 логический ЦП, 59 завершений / 60 с AMD Zen 5: 2 логических ЦП, 129 завершений / 60 с AMD Zen 5: 3 логических ЦП, 203 завершения / 60 с AMD Zen 5: 4 логических ЦП, 279 завершений / 60 с AMD Zen 5: 5 логических ЦП, 343 завершения / 60 с AMD Zen 5: 6 логических ЦП, 409 завершений / 60 с AMD Zen 5: 7 логических ЦП, 478 завершений / 60 с AMD Zen 5: 8 логических ЦП, 537 завершений / 60 с AMD Zen 5: 10 логических ЦП, 669 завершений / 60 с AMD Zen 5: 12 логических ЦП, 856 завершений / 60 с AMD Zen 5: 14 логических ЦП, 982 завершения / 60 с AMD Zen 5: 16 логических ЦП, 1099 завершений / 60 с AMD Zen 5: 20 логических ЦП, 1397 завершений / 60 с AMD Zen 5: 26 логических ЦП, 1561 завершение / 60 с AMD Zen 5: 32 логических ЦП, 1508 завершений / 60 с AMD Zen 5: 40 логических ЦП, 1494 завершения / 60 с AMD Zen 5: 50 логических ЦП, 1451 завершение / 60 с AMD Zen 5: 63 логических ЦП, 1531 завершение / 60 с AMD Zen 5: 79 логических ЦП, 1572 завершения / 60 с AMD Zen 5: 99 логических ЦП, 1470 завершений / 60 с AMD Zen 5: 124 логических ЦП, 1556 завершений / 60 с AMD Zen 5: 155 логических ЦП, 1482 завершения / 60 с AMD Zen 5: 192 логических ЦП, 1478 завершений / 60 с Intel GNR (vm): 1 логический ЦП, 68 завершений / 60 с Intel GNR (vm): 2 логических ЦП, 149 завершений / 60 с Intel GNR (vm): 3 логических ЦП, 224 завершения / 60 с Intel GNR (vm): 4 логических ЦП, 303 завершения / 60 с Intel GNR (vm): 5 логических ЦП, 376 завершений / 60 с Intel GNR (vm): 6 логических ЦП, 454 завершения / 60 с Intel GNR (vm): 7 логических ЦП, 506 завершений / 60 с Intel GNR (vm): 8 логических ЦП, 579 завершений / 60 с Intel GNR (vm): 10 логических ЦП, 692 завершения / 60 с Intel GNR (vm): 12 логических ЦП, 832 завершения / 60 с Intel GNR (vm): 14 логических ЦП, 937 завершений / 60 с Intel GNR (vm): 16 логических ЦП, 1117 завершений / 60 с Intel GNR (vm): 20 логических ЦП, 1348 завершений / 60 с Intel GNR (vm): 26 логических ЦП, 1698 завершений / 60 с Intel GNR (vm): 32 логических ЦП, 1912 завершений / 60 с Intel GNR (vm): 40 логических ЦП, 1776 завершений / 60 с Intel GNR (vm): 50 логических ЦП, 2166 завершений / 60 с Intel GNR (vm): 63 логических ЦП, 2324 завершения / 60 с Intel GNR (vm): 79 логических ЦП, 2316 завершений / 60 с Intel GNR (vm): 99 логических ЦП, 2624 завершения / 60 с Intel GNR (vm): 124 логических ЦП, 1522 завершения / 60 с Intel GNR (vm): 155 логических ЦП, 2468 завершений / 60 с Intel GNR (vm): 192 логических ЦП, 2504 завершения / 60 с Intel GNR: 1 логический ЦП, 51 завершение / 60 с Intel GNR: 2 логических ЦП, 120 завершений / 60 с Intel GNR: 3 логических ЦП, 182 завершения / 60 с Intel GNR: 4 логических ЦП, 257 завершений / 60 с Intel GNR: 5 логических ЦП, 322 завершения / 60 с Intel GNR: 6 логических ЦП, 401 завершение / 60 с Intel GNR: 7 логических ЦП, 474 завершения / 60 с Intel GNR: 8 логических ЦП, 541 завершение / 60 с Intel GNR: 10 логических ЦП, 675 завершений / 60 с Intel GNR: 12 логических ЦП, 815 завершений / 60 с Intel GNR: 14 логических ЦП, 895 завершений / 60 с Intel GNR: 16 логических ЦП, 997 завершений / 60 с Intel GNR: 20 логических ЦП, 1241 завершение / 60 с Intel GNR: 26 логических ЦП, 1538 завершений / 60 с Intel GNR: 32 логических ЦП, 1777 завершений / 60 с Intel GNR: 40 логических ЦП, 1984 завершения / 60 с Intel GNR: 50 логических ЦП, 1766 завершений / 60 с Intel GNR: 63 логических ЦП, 2211 завершение / 60 с Intel GNR: 79 логических ЦП, 2383 завершения / 60 с Intel GNR: 99 логических ЦП, 2523 завершения / 60 с Intel GNR: 124 логических ЦП, 2545 завершений / 60 с Intel GNR: 155 логических ЦП, 2544 завершения / 60 с Intel GNR: 194 логических ЦП, 2494 завершения / 60 с Intel GNR: 243 логических ЦП, 2423 завершения / 60 с Intel GNR: 256 логических ЦП, 2337 завершений / 60 с NVIDIA Vera: 1 логический ЦП, 86 завершений / 60 с NVIDIA Vera: 2 логических ЦП, 191 завершение / 60 с NVIDIA Vera: 3 логических ЦП, 298 завершений / 60 с NVIDIA Vera: 4 логических ЦП, 403 завершения / 60 с NVIDIA Vera: 5 логических ЦП, 510 завершений / 60 с NVIDIA Vera: 6 логических ЦП, 615 завершений / 60 с NVIDIA Vera: 7 логических ЦП, 712 завершений / 60 с NVIDIA Vera: 8 логических ЦП, 820 завершений / 60 с NVIDIA Vera: 10 логических ЦП, 1010 завершений / 60 с NVIDIA Vera: 12 логических ЦП, 1211 завершение / 60 с NVIDIA Vera: 14 логических ЦП, 1400 завершений / 60 s NVIDIA Vera: 16 логических ЦП, 1586 завершений / 60 с NVIDIA Vera: 20 логических ЦП, 1928 завершений / 60 с NVIDIA Vera: 26 логических ЦП, 2423 завершения / 60 с NVIDIA Vera: 32 логических ЦП, 2752 завершения / 60 с NVIDIA Vera: 40 логических ЦП, 3253 завершения / 60 с NVIDIA Vera: 50 логических ЦП, 3591 завершение / 60 с NVIDIA Vera: 63 логических ЦП, 3913 завершений / 60 с NVIDIA Vera: 79 логических ЦП, 4238 завершений / 60 с NVIDIA Vera: 99 логических ЦП, 4281 завершение / 60 с NVIDIA Vera: 124 логических ЦП, 4142 завершения / 60 с NVIDIA Vera: 155 логических ЦП, 4169 завершений / 60 с NVIDIA Vera: 176 логических ЦП, 3978 завершений / 60 с Подтвержденные завершения / 60 с50 контейнеров100 контейнеров150 контейнеровПриостановить автоматическое циклическое переключение NVIDIA Vera AMD Zen 5 Intel GNR AWS Graviton 4 (vm) AWS Graviton 5 (vm) Intel GNR (vm)Границы физических ядер: Intel GNR 128 · Intel GNR (vm) и Graviton 96 · Vera 88

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

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

На вопрос об этом команда Vera подтвердила, что такие результаты неудивительны. Именно в этот момент я поверил в Vera.

Главная особенность — это работа в условиях состязательности за ресурсы

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

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

Для Modal это открывает возможности для более плотного размещения и более гибкой защиты от пиковых нагрузок.

Для пользователей Sandbox мы можем предложить более высокий абсолютный масштаб и пропускную способность без ущерба для задержки.

Мы очень рады внедрить поддержку процессоров Vera для работы Modal Sandboxes и тесно сотрудничать с NVIDIA и облачными провайдерами для масштабирования нашего парка оборудования.

О чём эта статья

Ещё в разделе «AI и машинное обучение»

Все →

Ещё от Modal