Подключение, сборка и управление

Начало работы

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

Уже арендовали? Имя хоста, порт, имя пользователя и срок аренды указаны в консоли после входа. Не используйте примеры из этой статьи как реальные учётные данные.

Сначала проверьте данные для подключения

Три способа подключения — выберите нужный

Для командной строки используйте SSH, для работы с графическим интерфейсом macOS — общий экран, а для передачи проекта и сборок — SSH. Не подбирайте порт наугад.

Вход по SSH

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

ssh -p SSH_PORT USER@HOST

Стандартный порт SSH — 22, но внешний порт экземпляра может отличаться. Перед первым подключением проверьте отпечаток ключа хоста. Если он изменился, сначала выясните причину, а не игнорируйте предупреждение.

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

Для сборок, скриптов и анализа журналов

Общий экран macOS (VNC)

Получите адрес общего экрана, порт и данные для аутентификации в консоли. Введите их в локальном приложении «Общий экран» или совместимом VNC-клиенте. Не используйте порт SSH.

Стандартный порт VNC — 5900, но фактический внешний порт указан в данных экземпляра. Не добавляйте данные для аутентификации VNC на скриншоты и в общедоступные командные документы.

По возможности используйте защищённое подключение. Если нужен SSH-туннель, перенаправьте локальный порт 5901 на службу VNC экземпляра, а затем подключитесь к локальному адресу.

ssh -N -L 5901:127.0.0.1:VNC_PORT -p SSH_PORT USER@HOST

Это перенаправление работает, только если служба VNC прослушивает порт на этом экземпляре и разрешена пересылка SSH. Чёрный экран и ошибка аутентификации — разные проблемы; укажите, с какой именно вы столкнулись, в обращении.

Для графического интерфейса и проверки среды

Передача файлов (scp / rsync)

Сначала убедитесь, что вход по SSH работает. Передача файлов также идёт через SSH-порт, отдельную службу открывать не нужно. Для небольших файлов используйте scp, для регулярной синхронизации каталогов проекта — rsync.

scp -P SSH_PORT ./build.zip USER@HOST:~/
rsync -av -e "ssh -p SSH_PORT" ./project/ USER@HOST:~/project/

Обратите внимание: параметр порта scp пишется с заглавной буквы -P, а у SSH — со строчной -p. Завершающий слеш в исходном пути rsync означает, что синхронизируется содержимое каталога.

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

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

Отдельно проверьте подключение, сборку и загрузку

Это пример для демонстрации трёх разных этапов. Указанное имя хоста не является реальным адресом сервера, а вывод не отражает состояние текущей задачи.

Узел в Японии (Токио) · пример
$ ssh admin@jp-0417.node.vpskeep.com
Welcome to your dedicated Mac mini.

$ xcodebuild -scheme App archive
** ARCHIVE SUCCEEDED **

$ fastlane beta
Successfully uploaded package to App Store Connect.
  1. 01

    Приветствие SSH

    Оно подтверждает, что вы подключились к удалённому сеансу, но не означает, что среда проекта уже настроена. Затем выполните sw_vers и xcodebuild -versionи запишите версии системы и инструментов.

  2. 02

    Архивация завершена

    ARCHIVE SUCCEEDED означает, что этап архивации прошёл успешно. App в примере — имя scheme. В реальном проекте также укажите workspace или project, целевую платформу и путь для вывода. Успешная архивация ещё не означает, что экспорт или распространение завершены.

  3. 03

    Загрузка через Fastlane завершена

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

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

Зафиксируйте среду

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

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

  1. 01

    Проверка и переключение версии

    Выполните две команды проверки ниже. Если на машине установлено несколько версий Xcode, можно сменить системный каталог по умолчанию. Если изменение нужно только для текущей задачи, задайте переменную среды процесса DEVELOPER_DIR— это предпочтительный вариант.

    xcode-select -p
    xcodebuild -version
    sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
    DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer xcodebuild -version

    Укажите путь к фактически установленному приложению. Наличие нужной версии зависит от среды экземпляра. Если требуется установить другую версию, используйте пакет с соответствующей лицензией и сначала проверьте свободное место на диске.

  2. 02

    Установка среды выполнения симулятора

    Установите подходящую для проекта среду выполнения через раздел управления платформами или компонентами в настройках Xcode. Название этого раздела зависит от версии. После установки просмотрите доступные устройства и выберите цель тестирования.

    xcrun simctl list runtimes
    xcrun simctl list devices available
    df -h

    Симуляторы, DerivedData и архивы занимают место на диске. Перед массовым тестированием сначала проверьте один тест на одном устройстве, а затем увеличивайте параллельность. Тесты в симуляторе не заменяют тестирование на физическом устройстве iOS.

  3. 03

    Добавление материалов для подписи

    Передайте на экземпляр разрешённый сертификат подписи, соответствующий закрытый ключ и профиль через защищённый канал. Импортируйте сертификат в связку ключей, используемую задачей, и установите профиль согласно требованиям вашей версии Xcode. Затем проверьте Team, Bundle ID, срок действия сертификата и тип распространения.

    security find-identity -v -p codesigning

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

    Перед выходом из экземпляра удалите больше не нужные закрытые ключи подписи, токены и профили. В обращении укажите только название сертификата и текст ошибки — не отправляйте закрытый ключ, пароль или полные учётные данные.

Сделайте запуск задач повторяемым

Сначала запустите один pipeline, затем настройте постоянную работу runner

Конфигурация Keep M4 L — M4 / 24GB / 512GB — хорошая отправная точка для сборок нескольких веток. Определяйте допустимое число параллельных задач по результатам тестирования проекта: количество ядер CPU не показывает, сколько UI-тестов можно запускать одновременно.

Self-hosted runner для GitHub Actions

На странице runner в настройках репозитория или организации создайте процедуру регистрации, выберите macOS и подходящую архитектуру, затем скачайте и зарегистрируйте runner командами, которые покажет страница. Используйте регистрационный токен только на время настройки и не сохраняйте его в репозитории.

Добавьте экземпляру понятные метки, например macos,arm64 и метки для задач команды. Настройте workflow так, чтобы выбирать машину по меткам и не запускать задачи подписи в среде без нужных сертификатов.

runs-on: [self-hosted, macOS, ARM64]

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

Журнал задач и диагностика runner

GitLab Runner и shell executor

Установите GitLab Runner для архитектуры экземпляра, получите данные регистрации в интерфейсе управления проектом или командой и выполните команду gitlab-runner register. Если нужна нативная цепочка инструментов Xcode, выберите shell executor с учётом требований безопасности команды.

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

gitlab-runner --version
gitlab-runner verify

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

Сначала проверьте регистрацию, затем запуск задач

Обязательно укажите настройки автозапуска и расположение журналов

Постоянно работающими процессами в macOS обычно управляет launchd. Условия запуска пользовательского LaunchAgent и системного LaunchDaemon различаются. Если службе нужны графический сеанс или пользовательская связка ключей, не копируйте системную конфигурацию без изменений.

Диагностические файлы runner GitHub Actions обычно находятся в каталоге установки, в папке _diag ; журналы шагов задачи доступны на странице pipeline. Вывод службы GitLab Runner зависит от способа установки и запуска. При настройке собственного launchd явно укажите StandardOutPath и StandardErrorPath— не рассчитывайте на единый системный файл журналов.

Запишите имя runner, учётную запись, версию Xcode, рабочий каталог и путь к журналам. Для параллельных задач используйте отдельные каталоги DerivedData и вывода сборок. Если файлы с одинаковыми именами перезаписываются, случайный сбой можно принять за проблему машины.

Сначала оцените память, затем загружайте модель

В конфигурации Keep M4 Pro 64GB нужно оставить запас помимо весов

Конфигурация Keep M4 Pro — M4 Pro / 64GB / 2TB. Унифицированную память используют система, модель и другие процессы, поэтому нельзя отводить весь её объём только под веса модели. Ниже приведена лишь оценка объёма весов, а не тест скорости или гарантия запуска.

Примерный объём исходных весов по числу параметров и разрядности
Число параметров моделиОценка весов, 4-bitОценка весов, 8-bitЧто проверить перед загрузкой
Около 7B параметровОколо 3.3 GiBОколо 6.5 GiBПодходит для первичной проверки установки, формата модели и генерации с коротким контекстом.
Около 14B параметровОколо 6.5 GiBОколо 13.0 GiBСначала измерьте пиковое потребление памяти при одном запросе, затем рассмотрите пакетную обработку.
Около 32B параметровОколо 14.9 GiBОколо 29.8 GiBДлинный контекст и параллельные запросы могут существенно увеличить объём KV cache.

Формула оценки: число параметров × разрядность ÷ 8 ÷ 2³⁰; результат округлён до 0,1 GiB. Групповое квантование, масштабирующие коэффициенты, неквантованные слои, KV cache и буферы выполнения увеличивают фактическое потребление. Размер файла модели также не равен пиковому объёму памяти.

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

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

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install mlx mlx-lm
python -m mlx_lm.generate --model ./models/model --prompt "Explain unified memory." --max-tokens 128

./models/model — это путь к подготовленному каталогу совместимой модели. При первом запуске используйте короткий ввод и небольшой объём вывода, затем постепенно увеличивайте длину контекста. Запишите версию модели, способ квантования, длину ввода и пиковое потребление памяти, чтобы можно было воспроизвести результат.

Если нагрузка на память остаётся высокой или swap быстро растёт, сначала уменьшите длину контекста, размер пакета и число параллельных запросов. Дополнительный SSD увеличит объём хранилища, но не унифицированную память и не заменит правильную оценку требований модели.

Не упускайте срок аренды

Перед продлением проверьте цену, перед окончанием аренды — резервную копию

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

  1. 01

    Продление и смена периода

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

  2. 02

    Дополнительное хранилище или подключение устройств

    Для дополнительных материалов проверьте доступность SSD на +1TB или +2TB. Перед подключением устройств по Thunderbolt 5 убедитесь, что это поддерживают ваш сценарий работы и оборудование. Дополнительные опции не увеличивают объём унифицированной памяти исходной модели. Сначала уточните доступные опции, период и требования к предоставлению услуги в консоли. Перед изменениями диска или задач создайте резервную копию и остановите запись данных.

  3. 03

    Перенос данных до окончания аренды

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

  4. 04

    Что происходит после окончания срока

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

Помогите инженеру поддержки воспроизвести проблему

Добавьте в одно обращение сведения четырёх типов

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

  1. 01

    Экземпляр и узел

    Укажите номер экземпляра или заказа, модель и фактический узел: Сингапур, Япония (Токио), Южная Корея (Сеул) или Гонконг. Не прикладывайте пароль для входа или закрытый ключ.

  2. 02

    Время возникновения проблемы

    Укажите время начала и часовой пояс, повторяется ли проблема и когда подключение или задача работали в последний раз. Опишите, что именно произошло: тайм-аут SSH, отказ в аутентификации, чёрный экран VNC или ошибка команды сборки.

  3. 03

    Шаги воспроизведения и журналы

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

  4. 04

    Если вопрос связан с оплатой

    Укажите номер заказа, сумму и способ оплаты. Поддерживаются только USDT-TRC20 и Visa / Mastercard / Amex через Stripe; расчёты ведутся в долларах США. Фактически доступный платёжный шлюз определяется ответом сервера. Для USDT приложите хэш транзакции, для карты — номер квитанции. Не отправляйте полный номер карты.

Если войти в консоль пока не удаётся, отправьте письмо на support@vpskeep.comи укажите в письме адрес электронной почты аккаунта и номер заказа. Не отправляйте по почте данные для подключения.

Подготовьте среду — и запускайте задачи

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