На прошлой неделе компания 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 и облачными провайдерами для масштабирования нашего парка оборудования.











