Выделенный Mac · Руководство

От первого подключения по SSH
до запуска конечной точки инференса

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

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

Доступ к узлуSSH → MLX

XCODEOPS / RUNBOOK

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

01Получите данные доступаПроверьте узел и публичный адрес в консоли
02Настройте туннельSSH для командной строки и удалённого рабочего стола
03Запустите конечную точкуПо умолчанию MLX слушает только локальный интерфейс
Маршрут доступа настроенФизический узел · один пользователь

Перейти к нужному разделу

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

01 / Подключение

Подключитесь по SSH к выделенной физической машине

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

01

Проверьте экземпляр

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

02

Добавьте публичный ключ

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

03

Проверьте подключение и усильте защиту

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

Настройка локального подключения

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

ssh-keygen -t ed25519 -f ~/.ssh/xops_node

cat ~/.ssh/xops_node.pub

~/.ssh/config

Host xops-node
  HostName 192.0.2.10
  User mac-user
  Port 22
  IdentityFile ~/.ssh/xops_node
  IdentitiesOnly yes

Сохраните файл, выполните команду chmod 600 ~/.ssh/config, затем запустите ssh xops-node. При первом подключении проверьте отпечаток ключа хоста. Если возникла проблема, проверьте IP-адрес, порт, права доступа к ключу и состояние экземпляра.

02 / Графический интерфейс

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

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

Выполните в локальном терминале
ssh -N -L 5901:127.0.0.1:5900 xops-node

Оставьте этот терминал открытым. В приложении «Общий экран» на локальном Mac или совместимом клиенте VNC подключитесь к адресу vnc://127.0.0.1:5901. Права входа в графический интерфейс и по SSH проверяются отдельно: не считайте, что для них используются одни и те же учётные данные.

Перед началом проверьте

  • По возможности используйте встроенное приложение «Общий экран». Другие клиенты должны поддерживать выбранный способ подключения и аутентификации.
  • Если изображение тормозит, сначала уменьшите разрешение и глубину цвета удалённого рабочего стола, затем проверьте соединение с узлом. Не открывайте публичный порт VNC ради повышения скорости.
  • Синхронизация буфера обмена зависит и от клиента, и от удалённого сеанса. Для передачи весов моделей, сертификатов или крупных проектов используйте rsync или другой способ синхронизации файлов.
  • Если вы работаете за общим компьютером, по завершении закройте удалённый рабочий стол и SSH-туннель, а также удалите конфиденциальные файлы, оставшиеся на устройстве.
03 / Перенос среды

Перенос с локального Mac на облачный Mac: три этапа

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

01 / DATA

Данные и модели

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

rsync -avh --progress ./project/ \
  xops-node:~/work/project/

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

Планируемое времяот 15 до 60 минутЗависит от объёма данных и скорости исходящего соединения
02 / TOOLCHAIN

Инструменты и подпись

На локальном Mac экспортируйте список пакетов с помощью Homebrew Bundle в файл Brewfile, затем импортируйте его на узле. Проверьте версии Xcode, инструменты командной строки и lock-файлы зависимостей. Сертификаты для подписи передавайте отдельно; после импорта ограничьте доступ к связке ключей.

brew bundle dump --file=./Brewfile
rsync -av ./Brewfile xops-node:~/work/
ssh xops-node 'brew bundle --file=~/work/Brewfile'

Не копируйте локальное виртуальное окружение Python. Установите зависимости заново на целевой машине.

Планируемое времяот 20 до 45 минутЗависит от пакетов и скорости загрузки
03 / CI

Подключение конвейера

Зарегистрируйте self-hosted runner в существующем проекте CI и привяжите его к нужному репозиторию или команде. Храните кэш сборки в отдельной папке, а параллелизм настраивайте с учётом доступной памяти и нагрузки сборки.

  • Сначала выполните тестовую сборку без ключей публикации.
  • Зафиксируйте путь к кэшу, использование диска и правила очистки.
  • Убедитесь, что runner работает под отдельной учётной записью.
Планируемое времяот 15 до 30 минутБез учёта первой полной сборки

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

04 / Инференс MLX

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

Унифицированная память Apple Silicon используется совместно CPU и GPU. Возможность разместить модель зависит также от формата квантования, длины контекста и нагрузки других процессов. При выборе конфигурации оставьте запас для системы и сервисов — не рассчитывайте, что вся заявленная память доступна для весов.

Установка, запуск, проверка

Создайте на экземпляре отдельное окружение Python для сервиса. Путь к модели в примере указывает на локальную папку, уже синхронизированную с экземпляром. После запуска сначала проверьте совместимый с OpenAI API из самого экземпляра.

python3 -m venv ~/mlx-service/.venv
~/mlx-service/.venv/bin/python -m pip install mlx-lm

~/mlx-service/.venv/bin/python -m mlx_lm.server \
  --model ~/models/quantized-model \
  --host 127.0.0.1 --port 8080
curl http://127.0.0.1:8080/v1/models

Убедитесь, что файлы модели в порядке, окружение Python готово, а порт не занят другим процессом. Параметры разных версий mlx-lm могут отличаться. Перед развёртыванием сверьтесь со справкой установленной на экземпляре версии.

ДОСТУП / 01

Откройте доступ команде

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

ssh -N -L 8080:127.0.0.1:8080 xops-node
ЗАПУСК / 02

Автоматический запуск после перезагрузки

Когда команда стабильно работает в терминале, создайте пользовательскую конфигурацию launchd для сервиса. Укажите Python из виртуального окружения, путь к модели, рабочую папку и файл журнала. Сначала проверьте конфигурацию, затем загрузите её в сеанс текущего пользователя. После перезагрузки экземпляра проверьте процесс и конечную точку.

plutil -lint ~/Library/LaunchAgents/com.xcodeops.mlx.plist
launchctl bootstrap gui/$(id -u) \
  ~/Library/LaunchAgents/com.xcodeops.mlx.plist

Ориентир по памяти: 16 ГБ подойдут для экспериментов с небольшими квантованными моделями, 24 ГБ — для проверки одного сервиса с распространёнными квантованными моделями 7B–8B, а 64 ГБ оставят запас для более крупных моделей или нескольких задач. Фактическая пропускная способность зависит от модели, контекста и нагрузки — измерьте её на своих запросах.

05 / Разработка и сборка

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

Выделенная физическая машина подходит для компиляции Xcode, тестирования в симуляторе и работы self-hosted runner: ресурсы CPU, GPU и унифицированная память не заняты задачами других пользователей. Но успешный тест в симуляторе не гарантирует, что камера, Bluetooth или производительность будут работать так же на реальном устройстве.

Матрица симуляторов

Закрепите версии Xcode и сред выполнения симулятора, затем составьте матрицу тестирования для нужных размеров устройств и версий ОС. Сначала проверьте доступные устройства командой xcrun simctl list devices available и не указывайте в конвейере среду выполнения, которая не установлена.

Проверить: версии / устройства / отчёты о тестировании

Архивация и распространение

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

Проверить: подпись / архив / результат загрузки

Ограничения тестирования на устройствах

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

Проверить: журналы устройства / шаги воспроизведения
06 / Узлы и сеть

Сначала измерьте соединение с четырьмя узлами, затем решите, где запускать задачи

В каталоге доступны узлы в Сингапуре, Токио, Сеуле и Гонконге. Фактическая работа зависит от местоположения участников команды, маршрутизации операторов и вечерней нагрузки. Для интерфейса инференса измеряйте и время полного цикла запроса, и время генерации модели — одного ping недостаточно.

Примеры задержки в Азиатско-Тихоокеанском регионе

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

Средняя задержка ICMP туда и обратно от восьми городов до узлов в Сингапуре, Токио, Сеуле и Гонконге, мс
Город отправленияСингапурТокиоСеулГонконг
Шанхай76 ms58 ms53 ms41 ms
Шэньчжэнь62 ms72 ms65 ms29 ms
Тайбэй64 ms46 ms54 ms39 ms
Бангкок43 ms109 ms98 ms66 ms
Джакарта38 ms109 ms115 ms74 ms
Сидней101 ms132 ms146 ms141 ms
Осака75 ms32 ms47 ms65 ms
Пусан85 ms44 ms24 ms71 ms

Методика: среднее время ICMP туда и обратно, 100 последовательных измерений на каждое соединение в вечерний час пик рабочего дня через домашний интернет. Данные подходят только для предварительного выбора узла. Задержка меняется в зависимости от оператора и маршрута и не заменяет проверку фактического экземпляра из вашей рабочей сети.

01 / Выбор узла

Измеряйте из основных мест работы команды

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

02 / Синхронизация

Передавайте крупные файлы в часы низкой нагрузки

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

03 / Масштабирование

Используйте несколько машин, если этого требует нагрузка

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

07 / Устранение неполадок и поддержка

Чем полнее данные для воспроизведения проблемы, тем быстрее решение

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

Что указать в заявке

  • 01Заказ и узелНомер заказа, узел экземпляра — Сингапур, Токио, Сеул или Гонконг — и затронутый сервис.
  • 02Действия и ошибкиВыполненная команда, полный текст ошибки, шаги, на которых возникла проблема, и снимок экрана с удалёнными конфиденциальными данными.
  • 03Время и масштабКогда проблема возникла впервые, повторяется ли она и затрагивает ли только одного участника команды.
  • 04Что уже провереноРезультаты проверки состояния экземпляра, прав доступа к ключу, порта, туннеля и локальной сети.

Что делать дальше

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

Готовы к развёртыванию?

Выберите узел и выполните первую команду

Три конфигурации выделенного физического Mac mini с оплатой за день, неделю, месяц или квартал. Сначала выберите модель, затем — узел по результатам измерений в своей сети. После предоставления экземпляра начинайте подключение по инструкциям на этой странице.