接続・ビルド・日常管理

マシンを受け取ったら

まずコンソールで接続情報を確認し、SSHまたは画面共有で接続できるか確認します。ファイル転送、ビルドの実行、期限前のデータ保全まで、実際の作業順に説明します。

すでに利用中ですか?ホスト名、ポート、ユーザー名、利用期限は、ログイン後のコンソールに表示される情報を確認してください。この記事の例を実際の接続情報として使わないでください。

接続情報を確認

3つの接続方法から選ぶ

コマンドラインで作業するならSSH、macOSのGUIを操作するなら画面共有を使います。プロジェクトや成果物はSSH経由で転送できます。ポートを推測して何度も試すのは避けてください。

SSHでログイン

コンソールで対象のインスタンスを開き、ホスト名、SSHポート、ユーザー名を確認します。ローカルのターミナルで次のコマンドを実行し、大文字の項目をインスタンスに表示された値に置き換えてください。

ssh -p SSH_PORT USER@HOST

SSHでよく使われるポートは 22ですが、インスタンスによって外部公開ポートが異なる場合があります。初回接続前にホストフィンガープリントを確認してください。フィンガープリントが変わった場合は、警告を無視せず、まず原因を確認しましょう。

接続がタイムアウトする場合は、ホスト名、ネットワーク、ポートを確認してください。認証エラーの場合は、ユーザー名と認証方式を確認します。パスワードや秘密鍵を公開ログに記載しないでください。

ビルド、スクリプト、ログの調査に

macOSの画面共有(VNC)

コンソールで画面共有のアドレス、ポート、認証情報を確認します。macOSの画面共有アプリまたは互換性のあるVNCクライアントに入力してください。SSHのポートを使わないようにしましょう。

VNCでよく使われるポートは 5900ですが、外部公開ポートはインスタンスの情報を確認してください。画面共有の認証情報をスクリーンショットやチームの共有ドキュメントに記載しないでください。

保護された接続方法を優先してください。SSHトンネルが必要な場合は、ローカルの 5901 をインスタンスのVNCサービスに転送し、ローカルアドレスに接続します。

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

この転送方法が使えるのは、インスタンス上でVNCサービスが待ち受けており、SSH転送が許可されている場合です。画面が真っ暗な問題と認証エラーは別の問題です。問い合わせの際は、それぞれ分けて説明してください。

GUI操作や環境の確認に

ファイル転送(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を実行し、OSとツールのバージョンを記録します。

  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、アーカイブはいずれもストレージを使用します。テストを並列実行する前に、まず1台で動作を確認してから並列数を増やしてください。シミュレータでのテストは、実機のiOSテストと同じではありません。

  3. 03

    署名用ファイルを読み込む

    承認済みの署名証明書、対応する秘密鍵、プロビジョニングプロファイルを保護された経路でインスタンスに転送します。証明書はタスクで使うキーチェーンに読み込み、プロビジョニングプロファイルは使用するXcodeのバージョンに応じてインストールします。その後、Team、Bundle ID、証明書の有効期限、配布先を確認してください。

    security find-identity -v -p codesigning

    CIでは専用のビルド用キーチェーンを使い、パスワードはアクセス制限付きのシークレット変数に保存します。非対話型タスクでは、キーチェーンのロック解除と署名ツールのアクセス権も確認してください。GUIで証明書が見えるだけでは、設定完了とは判断できません。

    インスタンスから離れる前に、不要になった署名用秘密鍵、トークン、プロビジョニングプロファイルを削除してください。問い合わせでは証明書名とエラー文のみを共有し、秘密鍵、パスワード、認証情報一式は送らないでください。

タスクを安定して実行する

まずパイプラインを動かし、次にランナーを常駐させる

Keep M4 Lの構成はM4 / 24GB / 512GBで、複数ブランチのビルドを始める際の目安になります。並列数はプロジェクトでの実測に基づいて決めてください。CPUコア数からUIテストの同時実行数を単純に推定することはできません。

GitHub Actionsの自前ランナー

リポジトリまたは組織の設定にあるActionsランナーのページで登録手順を開始し、macOSと適切なアーキテクチャを選択します。画面に表示されたコマンドに従ってダウンロードと登録を行ってください。登録トークンは必要な間だけ使用し、リポジトリに保存しないでください。

インスタンスには、用途がわかるタグを付けます。例: macos、arm64 、チーム用途を示すタグ。ワークフローではタグを指定して実行先を選び、証明書のない環境で署名タスクが実行されないようにしてください。

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

まずランナーを手動で起動し、テストタスクを1件実行します。その後、ランナーに付属するサービス用スクリプトで常駐サービスをインストールしてください。実行アカウントには、プロジェクトディレクトリ、Xcode、ビルド用キーチェーンへのアクセス権が必要です。

タスクログ + ランナー診断ログ

GitLab Runnerとshell executor

インスタンスのアーキテクチャに合ったGitLab Runnerをインストールし、プロジェクトまたはチームの管理画面で登録情報を取得してから、 gitlab-runner registerを実行します。ネイティブのXcodeツールチェーンが必要な場合は、チームのセキュリティ要件に応じてshell executorを選択してください。

shell executorはマシン上で直接タスクを実行します。信頼できるプロジェクトだけを受け入れ、署名鍵にアクセスできるブランチとタスクを制限してください。信頼できないコントリビューターのコードを、本番用認証情報のあるインスタンスで実行しないでください。

gitlab-runner --version
gitlab-runner verify

まず登録とタスクの割り当てが正常に動作することを確認してから、インストール方法に応じてサービスを設定します。ビルド、キャッシュ、ログの各ディレクトリをチームの引き継ぎドキュメントに記録してください。

登録を確認してからタスクを確認

自動起動とログの情報は、引き継ぎ時に明記

macOSの常駐プロセスは通常launchdで管理します。ユーザー単位のLaunchAgentとシステム単位のLaunchDaemonでは、起動条件が異なります。サービスがGUIセッションやユーザーのキーチェーンに依存する場合、システム単位の設定をそのまま流用できません。

GitHub Actionsランナーの診断ファイルは、通常インストール先の _diag にあります。タスクのステップログはパイプライン画面で確認してください。GitLab Runnerのサービス出力先は、インストール方法と起動方法によって異なります。launchdの設定を独自に作成する場合は、 StandardOutPath と StandardErrorPathを明示的に設定し、共通のシステムログファイルがあると決めつけないでください。

ランナー名、実行アカウント、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キャッシュが大幅に増える可能性があります。

計算式:パラメータ数 × ビット幅 ÷ 8 ÷ 2³⁰。結果はGiBで小数第1位まで表示しています。量子化グループ、スケール係数、非量子化レイヤー、KVキャッシュ、ランタイムバッファーにより実際の使用量は増加します。モデルファイルのサイズとピークメモリ使用量は同じではありません。

専用のPython環境で最初の実行を試す

使用するMLXパッケージの要件を満たすPythonバージョンを確認してから、仮想環境を作成します。インストール元とモデルファイルにアクセスでき、モデルの利用許諾を得ていることを確認してください。ダウンロード前にディスク容量も確認しましょう。

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 は、準備済みの互換モデルディレクトリを指定します。最初は短い入力と少ない出力で動作を確認し、徐々にコンテキスト長を増やしてください。結果を再現できるよう、モデルのバージョン、量子化方式、入力長、ピークメモリを記録します。

メモリ負荷が高い状態が続く場合やスワップの増加が速い場合は、まずコンテキスト長、バッチサイズ、並列リクエスト数を減らしてください。SSDの増設で増えるのはストレージであり、ユニファイドメモリではありません。適切なモデル容量の見積もりの代わりにはなりません。

利用期限も忘れずに管理

更新前に料金を確認し、解約前にバックアップを検証

日、週、月、四半期の4つから課金期間を選べます。利用期限を作業計画の区切りとして捉え、最後のビルドまでデータ移行を先延ばしにしないでください。ノードは365日稼働していますが、利用期間と提供状況は各注文の記録をご確認ください。

  1. 01

    更新と課金期間の変更

    コンソールにログインし、対象インスタンスまたはサブスクリプションで利用期限を確認してから、更新手続きに進みます。モデル、ノード、課金期間、追加オプション、最終金額を確認して決済してください。期間変更の適用時期や差額の有無は、注文に表示される条件と料金に従います。決済後、新しい利用期限が反映されたことを確認してください。

  2. 02

    ストレージの追加・並列接続

    素材用の容量を追加する場合は、+1TB SSDまたは+2TB SSDを確認してください。Thunderbolt 5で並列接続する場合は、ワークフローと機器が対応していることを先に確認します。追加オプションを選んでも、元のモデルのユニファイドメモリ容量は変わりません。コンソールで選択可能なオプション、期間、提供条件を確認してから設定変更を申請してください。ディスクやタスクに変更が及ぶ場合は、先にバックアップを取り、関連する書き込みを停止します。

  3. 03

    利用期限前にデータを移行

    コード、素材、ビルド成果物、必要な設定をエクスポートし、自分で管理するストレージにダウンロードして復元できるか確認します。ランナーと自動タスクを停止し、一時的なアクセストークンを失効させ、署名用秘密鍵や不要な認証情報を削除してください。リモートのディレクトリをアーカイブしただけで、バックアップが完了したと判断しないでください。

  4. 04

    利用期限後のデータ取り扱い

    利用期限後のデータ保持をバックアップの代わりにしないでください。保持期間、削除状況、復元の可否は注文のデータ処理に関する説明を確認します。説明が不明確な場合は、事前にサポートチケットで確認してください。削除済みデータは復元できると想定せず、重要なデータは利用期限前に移行してください。

サポート担当が再現できる情報を

4種類の情報を1件のチケットにまとめる

コンソールにログインしてサポートチケットを送信すると、注文情報とあわせて対応できます。問題ごとにチケットを1件にまとめ、追加のテスト結果は同じ記録に追記してください。状況が分散するのを防げます。

  1. 01

    インスタンスとノード

    預かり番号または注文番号、モデル、実際に利用しているノード(シンガポール、日本(東京)、韓国(ソウル)、香港)を記載してください。ログインパスワードや秘密鍵は添付しないでください。

  2. 02

    問題の発生時刻

    発生開始時刻とタイムゾーン、現在も続いているか、最後に正常に使えた時刻を記載してください。SSHのタイムアウト、認証エラー、VNCの画面が真っ暗になる問題、ビルドコマンドのエラーのどれかも説明してください。

  3. 03

    再現手順とログ

    最短の再現手順、OSとツールのバージョン、エラー全文、すでに試した確認内容を記載してください。スクリーンショットでは認証情報を隠し、ログからトークン、証明書のパスワード、その他の機密情報を削除してください。

  4. 04

    決済に関する問い合わせ

    注文番号、金額、決済方法を記載してください。対応するのはUSDT-TRC20とVisa / Mastercard / Amex(Stripe)のみで、決済通貨はすべて米ドルです。実際に利用できる決済ゲートウェイはバックエンドの表示をご確認ください。USDTの場合は取引ハッシュ、カードの場合は領収書番号を記載し、カード番号全桁は送信しないでください。

コンソールにログインできない場合は、次の宛先にメールを送信してください。本文にアカウントのメールアドレスと注文番号を記載します。 support@vpskeep.com。接続情報をメールに記載する必要はありません。

環境を整えて、タスクを実行

まず接続、単独ビルド、成果物のダウンロードを一通り確認してから、自動化を有効にしましょう。マシンをまだ選んでいない場合は、3つの構成と4つの課金期間からお選びください。