Аналоги RunPod для запуска моделей на GPU — это Runpod Pods, Modal и Vast. Выбор строится не на часовой ставке, а на карточке вашей задачи: контрольная сумма входного файла, известный runtime и его digest, требования к GPU и VRAM, путь результата и путь checkpoints, которые должны сохраниться. Ниже — готовая карточка, cost sheet и правила решения.
Карточка задачи до выбора платформы
Начните с job card. В неё входят: контрольная сумма входного файла, известный runtime или образ и его digest, требования к GPU и VRAM из вашей задачи, а также ответ на вопрос, нужен ли живой endpoint между обращениями. Снимите эти данные с уже работающей задачи до выбора провайдера.
Второй блок карточки — ожидаемый результат. Запишите путь готового результата и его контрольную сумму. Отдельной строкой — путь checkpoints и weights, которые должны сохраниться после остановки compute. Разделение важно: результат и промежуточные веса живут в разных местах и по-разному переживают stop и terminate.
Третья строка — переносимость. Гарантии переноса без изменений нет: на Runpod переделывается template или pod, на Modal — app, function, image и volume, на Vast — template и instance. Изменения упаковки фиксируйте в отдельной графе карточки, чтобы не потерять их при следующем запуске.
Что именно переделывается на каждой платформе
В документации Runpod описаны два пути деплоя Pod: через консоль и через CLI. В консоли вы выбираете шаблон с образом контейнера, при необходимости открываете Set overrides для переменных окружения, портов и стартовых команд, задаёте регион, GPU и хранилище. Через CLI Pod создаётся командой runpodctl pod create с именем, идентификатором GPU и образом.
В документации Modal единица работы — Function внутри App. Образ собирается через modal.Image, GPU задаётся аргументом gpu у декоратора function, а постоянные данные живут в Volume. Пример из документации: image = modal.Image.debian_slim().pip_install(«torch», «numpy»), затем app = modal.App(image=image) и декоратор @app.function(gpu=»A100″). Поддерживаются значения от T4 и L4 до B300, а также списки предпочтений вида [«H100», «A100-40GB:2»].
В документации Vast работа идёт через шаблоны и инстансы. Вы выбираете готовый шаблон (PyTorch, TensorFlow, ComfyUI) или создаёте свой, фильтруете машины по типу GPU, объёму RAM, CPU, скорости сети и цене, затем нажимаете Rent. Размер диска задаётся при создании инстанса и позже не меняется.
| Платформа | Единица работы | Что переносится заново |
|---|---|---|
| Runpod Pods | Pod, шаблон, сетевой том | template, pod, переменные окружения |
| Modal | App, Function, Image, Volume | app, function, image, volume |
| Vast | Шаблон, инстанс, локальный том | template, instance, привязка к машине |
Cost sheet: что складывать по каждой платформе
Часовая ставка не описывает счёт целиком. В документации Runpod указано: Pods тарифицируются посекундно за compute и storage, платы за ingress и egress нет. Хранилище делится по типам: container disk — $0.10/GB в месяц и стирается при остановке Pod, volume disk — $0.10/GB в месяц на работающем Pod и $0.20/GB в месяц на остановленном, network volume — $0.07/GB в месяц до 1 ТБ и $0.05/GB в месяц свыше. Остановленный Pod продолжает тарифицироваться за storage.
В документации Modal счёт складывается из GPU, CPU и памяти за оплачиваемое время исполнения, загрузки и простоя, плюс storage и egress. Ставки указаны посекундно: например, Nvidia A100 80 GB — $0.000694 в секунду, Nvidia L4 — $0.000222 в секунду, CPU — $0.0000131 за ядро в секунду, память — $0.00000222 за GiB в секунду. Volumes — $0.09 за GiB в месяц; бесплатно включён 1 TiB. Сетевой egress — $0.04 за GiB.
В документации Vast стоимость собирается из трёх частей: host compute quote, выделенный диск, умноженный на время, и трафик. Передача данных тарифицируется по хосту и включает как upload, так и download. Ставки устанавливают хосты маркетплейса, поэтому их проверяют в дашборде, через CLI или API.
| Платформа | Включается в счёт | Что уточнить отдельно |
|---|---|---|
| Runpod Pods | GPU compute + storage | live quote из консоли деплоя с датой |
| Modal | GPU + CPU + memory за execution, загрузку и idle + storage + egress | параметры actual function и measured load/idle |
| Vast | host compute quote + диск × время + upload + download | текущие host-set ставки и условия машины |
Unknown: что нельзя подставлять нулём
Расчёт не подставляет отсутствующие ставки из чужих подборок. Для Runpod неизвестной остаётся живая цена compute из консоли деплоя — её фиксируют с датой. Для Modal неизвестны фактические параметры function и контейнера, а также измеренные load и idle вашей задачи. Для Vast неизвестны текущие ставки маркетплейса и условия конкретной машины.
Формула счёта выглядит так: C_total = C_compute + C_CPU_RAM_if_separate + C_load_idle_if_billed + C_storage + C_upload_download_if_billed. Известное отсутствие платы вводится явно, unknown не заменяется нулём. Load и idle у Modal входят в оплачиваемое время GPU, CPU и памяти. Если они уже учтены в billable execution, повторно прибавлять их нельзя.
Правила решения по типу нагрузки
Если нужна постоянно работающая арендованная среда, сопоставляйте pod и instance Runpod и Vast по требованиям задачи и сохранности данных. Modal в этом случае рассматривается через его function workflow. Если обращения нерегулярны, вычислите billed load и idle в Modal и сравните с полным временем аренды pod или instance, включая промежутки между запросами.
Если ставка, единица измерения или путь сохранения неизвестны, ценового победителя нет. Остановитесь до получения quote и настройки backup. Это не отказ от выбора, а порядок действий: сначала закрываются неизвестные, потом сравниваются суммы.
Lifecycle: stop, terminate и постоянные диски
На Runpod остановка и удаление Pod — разные операции. При остановке container disk стирается, а volume disk сохраняется и тарифицируется по $0.20 за GB в месяц. Network volume оплачивается отдельно: $0.07 за GB в месяц до 1 ТБ и $0.05 за GB в месяц свыше. При terminate volume disk удаляется. Network volume существует независимо от Pod и привязан к одному дата-центру.
На Modal Volume требует явных commit и reload. Изменения внутри контейнера становятся видны снаружи после commit, а контейнер, стартовавший раньше, увидит их только после reload. В документации по Volumes отмечено: при удалении данных тарификация storage может продолжаться до четырёх дней.
На Vast локальный volume привязан к физической машине и не мигрирует между разными машинами. Зафиксируйте host и volume, а результат экспортируйте до смены инстанса. Container storage удаляется вместе с инстансом, а тарификация storage продолжается и на остановленном инстансе.
Проверка результата перед удалением
Перед stop или delete экспортируйте контрольный результат и проверьте путь постоянного хранения. Остановка compute не означает удаление storage и не прекращает все платежи. Порядок такой: посчитать контрольную сумму результата, убедиться, что она совпадает с ожидаемой из карточки, проверить наличие checkpoints и weights по записанному пути, и только потом останавливать или удалять ресурс.
Отдельно проверьте, где именно лежит файл. В документации Modal приведён пример: запись в /xyz.txt вместо /data/xyz.txt сохранит файл на локальный диск Function, и в Volume его не будет. Похожая логика на Vast: container storage исчезает вместе с инстансом, а volume живёт до удаления.
Частые вопросы
Чем заменить RunPod для запуска моделей на GPU?
Runpod Pods, Modal и Vast закрывают эту задачу разными моделями работы: Pod и instance — арендованная среда, Function — serverless-исполнение. Выбор зависит от того, нужен ли живой endpoint между обращениями и как часто вы запускаете задачу. Сравните полную стоимость выполнения своей карточки задачи с учётом времени и хранения.
Что дешевле: Runpod, Modal или Vast?
Единого ответа нет, пока неизвестны live quote Runpod, параметры вашей function в Modal и текущие host-set ставки Vast. Соберите cost sheet по трём платформам, отметьте unknown явно и сравните суммы. При нерегулярных обращениях считайте billed load и idle в Modal и сравнивайте с полным временем аренды.
Сохранятся ли данные при остановке Pod?
Container disk стирается при остановке Pod. Volume disk сохраняется и на остановленном Pod стоит $0.20 за GB в месяц. Network volume сохраняется и оплачивается отдельно по ставкам $0.07 за GB в месяц до 1 ТБ и $0.05 свыше. При terminate volume disk удаляется, а network volume существует независимо от Pod.
Как перенести volume между платформами?
Автоматического переноса нет. На Modal Volume требует commit и reload, на Vast локальный volume привязан к физической машине. Выгружайте данные через CLI или SDK и загружайте заново на новой платформе, сверяя контрольные суммы.
Нужен ли живой endpoint между обращениями?
Это вопрос из карточки задачи. Если endpoint нужен постоянно, сопоставляйте pod и instance Runpod и Vast. Если обращения редкие, считайте оплачиваемое время Modal, включая загрузку и простой, и сравнивайте с полной арендой.
