Инженерные рабочие процессы, работающие постоянно

Разработка, сборка и инференс на одном облачном Mac

VMKeep предоставляет постоянно работающие выделенные физические машины Apple Silicon, а не виртуальные машины. Команды могут зафиксировать чип, объём памяти и набор инструментов, превратив инференс MLX, мобильную сборку и удалённую совместную работу из временной среды в воспроизводимый рабочий процесс.

3
пути разработки, сборки и инференса
3
фиксированные конфигурации Apple Silicon
5
доступных узлов или площадок
ДОСЬЕ ВЫПОЛНЕНИЯ Задание непрерывной оркестрации
Узел в сети
Три типа рабочих нагрузок облачного Mac Инференс моделей, мобильная сборка и удалённая разработка выполняются на фиксированных узлах Apple Silicon с выдачей API, архивных артефактов и удалённых рабочих пространств. MLX СБОРКА РАЗРАБОТКА APPLE SILICON РЕЗУЛЬТАТ
Сервис инференса Модель → MLX → API Непрерывная работа
Мобильная сборка Исходный код → тесты → архив Воспроизводимость
Удалённая разработка SSH / VNC → рабочее пространство Выделенный узел
Фиксированная конфигурация уменьшает расхождения среды M4 · M4 Pro
Обзор сценариев

Сначала определите требования задачи, затем решайте, нужен ли узел на постоянной основе

Задачи, которые стоит перенести на облачный Mac, обычно имеют три признака: зависимость от macOS или Apple Silicon, выполнение за пределами локального рабочего времени и необходимость воспроизводить результат в фиксированной среде. Если задача требует лишь краткой локальной проверки, существующего устройства может быть достаточно.

Путь разработки

Оставьте рабочее пространство на удалённой машине

Используйте SSH для разработки в командной строке и автоматизации, а VNC — для работы с графическим интерфейсом macOS. Код, зависимости и локальные сервисы сохраняются, поэтому не нужно каждый день заново настраивать среду.

Входные данные
Репозиторий, lock-файлы зависимостей, инструменты разработки
Выполнение
Интерактивная разработка, отладка, краткосрочная совместная работа
Результат
История коммитов, результаты тестов, воспроизводимое рабочее пространство
Путь сборки

Передайте конвейер фиксированной машине

Разместите runner, Xcode, CocoaPods, Node.js и кеш зависимостей на одном физическом узле, чтобы каждая сборка выполнялась в одинаковых пределах каталогов, версий и прав доступа.

Входные данные
Исходный код, параметры сборки, авторизованные материалы подписи
Выполнение
Тестирование, упаковка, архивация, повтор после сбоя
Результат
Логи, отчёты о тестах, отслеживаемые артефакты сборки
Путь инференса

Фиксированная аппаратная база для оценки моделей

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

Входные данные
Веса модели, параметры квантования, набор для оценки
Выполнение
Сервис инференса, пакетная оценка, сбор логов
Результат
API, эталонные данные, основание для выбора конфигурации
Сервер инференса MLX

От файла модели к вызываемому API: сначала пройдите самый короткий путь проверки

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

  1. 01

    Подготовьте модель и данные для проверки

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

  2. 02

    Создайте изолированную среду выполнения

    Зафиксируйте версии Python и зависимостей MLX, а список установки сохраните в репозитории. Сначала выполните одиночный инференс из командной строки и проверьте токенизатор, формат весов и требования к памяти.

  3. 03

    Запустите сервис на локальном адресе

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

  4. 04

    Подключите вызовы приложения

    После подтверждения стабильности локальных запросов откройте доступ в соответствии с сетевой политикой команды. Клиент должен сохранять тайм-ауты, повторы и идентификаторы запросов, а сервер — версию модели и параметры инференса.

ЗАПИСЬ ЗАПРОСА Пример локальной проверки
curl -X POST http://127.0.0.1:8080/infer \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Summarize build log",
    "max_tokens": 128
  }'
Сначала проверьте
завершена ли загрузка модели и стабильно ли потребление памяти процессом
Затем зафиксируйте
задержку до первого токена, общее время и число выходных токенов
И только потом откройте доступ
область прослушивания, контроль доступа и тайм-аут клиента
Оценка AI-моделей

Только при фиксированных аппаратных и входных условиях данные оценки можно сравнивать

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

Что следует сохранять для воспроизводимой оценки

  • Аппаратная база:чип, память, версия системы и доступное дисковое пространство.
  • База модели:версия модели, формат квантования, длина контекста и размер пакета.
  • База выполнения:число прогревов, параллелизм, набор промптов и условия остановки.
  • База результатов:пиковая память, задержка до первого токена, устойчивая пропускная способность, ошибки и причины завершения.
Поля записи оценки модели и способы интерпретации
Параметр Фиксированные условия Назначение
Версия квантования Одна и та же модель и длина контекста Сравнение компромиссов между точностью, памятью и скоростью
Пиковая память Одинаковые входные данные и число параллельных запросов Проверка запаса конфигурации для стабильной работы
Задержка до первого токена Одинаковое состояние прогрева Оценка времени ожидания интерактивного запроса
Устойчивая пропускная способность Одинаковая длина вывода Оценка работы с длинными ответами и пакетными задачами
Запись сбоя Сохраняйте идентификатор запроса и логи Разделение проблем модели, памяти, сервиса и клиента
iOS и macOS CI/CD

Разделите непрерывную сборку на шесть проверяемых этапов поставки

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

  1. 01

    Получите исходный код

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

  2. 02

    Восстановите зависимости

    Установите зависимости по lock-файлу, изолируя кеши по проекту и версии, чтобы старый кеш не влиял на сборку.

  3. 03

    Выполните сборку

    Явно укажите workspace, scheme, configuration и destination, сохраните полную команду.

  4. 04

    Запустите тесты

    Ведите отдельные записи модульных тестов, UI-тестов и неудачных сценариев, сохраняя машиночитаемый отчёт.

  5. 05

    Обработайте подпись

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

  6. 06

    Сохраните архивные артефакты

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

Повтор после сбоя не должен начинаться с полной очистки среды

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

Посмотреть поддержку подключения сборки
Сборка React Native

Зависимости JavaScript и нативный проект должны иметь единую историю версий

Сборка React Native охватывает Node.js, менеджер пакетов, CocoaPods и Xcode. Недостаточно зафиксировать версии только JavaScript-пакетов: Ruby, Pods, настройки проекта Xcode и команду сборки также следует включить в воспроизводимый список.

Путь совместной работы на одной машине

От установки зависимостей до автоматизированной публикации — в одном рабочем каталоге

JavaScript Node.js → lockfile → bundling

Фиксируйте версии среды выполнения и менеджера пакетов, разделяя кеш по отпечатку lock-файла.

Нативный слой iOS CocoaPods → workspace → xcodebuild

Фиксируйте состояние Pods, scheme, конфигурацию сборки и целевое устройство.

Слой поставки Тесты → архив → хранение логов

Свяжите номер коммита, задание сборки и каталог артефактов.

Границы кеширования

Управляйте кешами JavaScript-пакетов, Pods и производных данных Xcode отдельно. Попадание в кеш ускоряет работу, но не должно скрывать несоответствие версий.

Рекомендуется фиксировать: сводку lock-файла, состояние Pods, версию Xcode

Границы публикации

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

Рекомендуется сохранять: номер коммита, номер задания, контрольную сумму артефакта
Рабочая станция для удалённой разработки

SSH — для автоматизации, VNC — для операций с графическим интерфейсом

Оба способа подключения могут использовать одну выделенную физическую машину, но предназначены для разных задач. После первого подключения обновите пароль, настройте ключи SSH и ограничьте распространение учётных данных. Актуальные данные подключения и состояние доступности отображаются в консоли.

SSH

Для командной строки и автоматических задач

  • Работа с репозиторием, установка зависимостей и запуск сервисов
  • Управление runner, просмотр логов и проверка процессов
  • Перенаправление портов и контролируемая проверка API
VNC

Для графического интерфейса macOS

  • Настройка проектов Xcode и работа с симулятором
  • Отладка и проверка, требующие работы с окнами
  • Удалённые демонстрации и краткосрочная командная работа
Контроль доступа

Для распределённой работы и временного масштабирования

  • Выдавайте минимально необходимые права с учётом обязанностей участника
  • Своевременно отзывайте ключи после выхода участника из проекта
  • До окончания аренды экспортируйте данные и удалите учётные данные
Оркестрация параллельных задач

Распределяйте задачи между узлами по очереди, а не размещайте всё на одной машине

Команда может назначить разные физические узлы для runner, экспериментов с моделями или очередей сборки. Каждый узел отдельно фиксирует область задач, версии среды и каталог артефактов, поэтому поиск неисправностей и планирование ёмкости проще, чем в общей смешанной среде.

Вход для задач Распределение по рабочей нагрузке
RUNNER-A
Ежедневная сборка iOS

Восстановление зависимостей, тесты и архивация выполняются в фиксированном каталоге сборки.

Непрерывная очередь
RUNNER-B
Релизная сборка React Native

Кеши JavaScript, Pods и производных данных Xcode изолированы.

Релизная очередь
MLX-TEST
Оценка квантования модели

Фиксируются чип, память, версия модели и входные условия.

Экспериментальная очередь
Рекомендации по выбору

Выбирайте конфигурацию по запасу памяти и продолжительности задач

Все три варианта — выделенные физические машины Apple Silicon, а не виртуальные. Для лёгкой проверки контролируйте затраты, для непрерывного конвейера учитывайте кеширование и параллелизм, а для инференса с большим объёмом памяти сначала проверьте пиковое потребление после загрузки модели.

Лёгкая проверка

VMKeep M4 Core

M4 · 16GB · 256GB

Подходит для разработки одного проекта, лёгких сборок iOS, проверки среды MLX и небольших тестов совместимости моделей. При ограниченном хранилище заранее спланируйте кеширование и очистку артефактов.

Рекомендуемые задачи Краткосрочная разработка, сборка в одной очереди, проверка возможности инференса
$19.2/ день
Выбрать VMKeep M4 Core
Инференс с большим объёмом памяти

VMKeep M4 Pro

M4 Pro · 64GB · 2TB

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

Рекомендуемые задачи Модели, требующие много памяти, параллельные задачи, тяжёлая сборка и архивация
$60.8/ день
Выбрать VMKeep M4 Pro
5 доступных узлов или площадок Сингапур, Япония (Токио), Южная Корея (Сеул), Гонконг, восток США

Все три конфигурации доступны для заказа на указанных пяти площадках; актуальный статус доступности отображается в консоли.

Начать настройку

Сопоставьте реальную задачу с фиксированным облачным Mac

Сначала выберите конфигурацию, затем узел в Сингапуре, Японии (Токио), Южной Корее (Сеуле), Гонконге или на востоке США и срок аренды — день, неделю, месяц или квартал. Заказом и управлением машиной можно заниматься в консоли.