初日の実験準備

まずモデルを動かし、
実験をじっくり続けましょう。

このチェックリストは、OsxNode M4-16を利用し始めた方向けです。専有Macに接続し、PythonとMLXを確認したら、短い出力でメモリの余裕をチェックします。現在の構成はM4、ユニファイドメモリ16GB、SSD 256GBです。

初回接続前に注文番号を用意し、期限前に結果をエクスポートしてください。接続できても、あらゆる規模のモデルを16GBのユニファイドメモリに読み込めるとは限りません。

まず提供内容を確認

ノードのカードからmacOSデスクトップを開く

決済確認後、当日中に利用を開始できます。ノードと接続情報がコンソールに表示されたことをもって、提供完了となります。支払い済みなのに接続情報が表示されない場合は、該当する注文を確認し、重複購入はお控えください。

  1. 01

    ログインしてノードを確認

    注文時のメールアドレスでコンソールにログインし、インスタンスまたはサブスクリプションの詳細で、注文番号、ノード名、有効期限を確認します。ノード名は購入時に選んだものと一致している必要があります。接続先、ユーザー名、ポートは該当インスタンスの詳細を確認してください。

  2. 02

    リモートデスクトップを開く

    該当するノードのカードまたは詳細画面で「リモートデスクトップを開く」をクリックし、コンソールに表示された認証情報でmacOSに接続します。ブラウザーで接続ページが正常に動作するよう設定してください。公開ヘルプページからリモートデスクトップには接続できません。

  3. 03

    初期パスワードを変更

    初回ログイン後、「システム設定」の「ユーザとグループ」で使用中のアカウントの初期パスワードを変更し、パスワードマネージャーに保存してください。新しいパスワードでログインできることを確認してから、現在の接続を終了します。チケットに初期パスワードや新しいパスワードを記載しないでください。

レンタル期間中、1台の物理Macを割り当てるのは1人の利用者のみです。仮想マシンではありません。ブラウザーを閉じても現在の画面が終了するだけで、レンタル期間は終了しません。長時間実行するタスクは、以下の方法で独立したセッション内で実行してください。

環境を記録

依存関係を分離してMLXをインストール

以下のコマンドはリモートMacの「ターミナル」で実行します。ご自身のパソコンではありません。専用の仮想環境を使うと、今回の実験で使うPythonパッケージを他の作業から分離できます。システムPythonに対するグローバルインストールは避けてください。

アーキテクチャとHomebrewを確認

uname -m
command -v brew
brew --version

想定されるアーキテクチャは arm64です。後半の2つのコマンドではHomebrewのパスとバージョンが表示されます。brewが見つからない場合は、まずHomebrew公式のインストール手順に従ってください。出所不明のインストールスクリプトをターミナルに貼り付けないでください。

今回の実験用Python環境を作成

brew install python@3.11
mkdir -p "$HOME/experiments/mlx-first"
cd "$HOME/experiments/mlx-first"
python3.11 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install mlx mlx-lm
python -c 'import platform; import mlx.core as mx; from importlib.metadata import version; print(platform.machine()); print("mlx", version("mlx")); print("mlx-lm", version("mlx-lm")); print(mx.array([1, 2, 3]) + 1)'

インストールが成功すると、確認コマンドで arm64、2つのパッケージの実際のバージョン、および値が [2, 3, 4] の配列が表示されます。バージョン番号はインストール時期によって変わるため、特定のバージョン文字列だけを成功の判定基準にしないでください。

依存関係を記録して、次回の再現に備える

python --version
python -m pip freeze > requirements.txt
python -m pip check

依存関係に競合がなければ、最後のコマンドで通常 No broken requirements found.と表示されます。ターミナルを開き直したら、まず実験ディレクトリに移動して source .venv/bin/activateを実行し、その後に推論を実行してください。仮想環境のディレクトリだけを移行するのではなく、依存関係の一覧と自作スクリプトも保存してください。

メモリを確認

短い推論で余裕を確認

16GBのユニファイドメモリはCPU、GPU、システムで共有されるため、すべてをモデルに割り当てられるわけではありません。重みに加えて、コンテキストキャッシュ、ランタイム、他のアプリもメモリを使用します。同じパラメーター数でも、量子化形式やコンテキスト長によってピーク使用量が異なる場合があります。

ダウンロード前に保存先を確認

モデルファイルのサイズ、ライセンス、空きディスク容量を事前に確認してください。繰り返し使う重みやデータセットは、追加ディスクを購入済みの場合、そこに保存することをおすすめします。実際のマウント先はFinderまたは「ディスクユーティリティ」で確認してください。

SSD容量を増やしても、ユニファイドメモリ16GBは増えません。追加ディスクを購入していない場合は、メインディスクのフォルダーを使い、キャッシュ容量を管理してください。存在しないボリューム名をそのまま使わないでください。

読み込み中のメモリ負荷を確認

「アクティビティモニタ」→「メモリ」を開き、メモリプレッシャーとスワップ使用量を確認します。不要なGUIアプリを終了し、出力の長さを抑えてから、コンテキストを少しずつ増やしてください。モデル名、量子化ビット数、コマンドのパラメーターを記録しておきましょう。

メモリプレッシャーが黄色になったら、同時実行数を増やすのをやめ、コンテキストを短くするか、より小さな量子化モデルに切り替えてください。ページングが続いたり、プロセスが終了したりした場合は、同じタスクを同じ設定で繰り返し読み込まないでください。

まず短いテキストを生成

cd "$HOME/experiments/mlx-first"
source .venv/bin/activate
export HF_HOME="$HOME/model-cache"
mkdir -p "$HF_HOME"
df -h "$HF_HOME"
python -m mlx_lm.generate \
  --model mlx-community/Qwen2.5-3B-Instruct-4bit \
  --prompt "用三句话解释统一内存。" \
  --max-tokens 128

初回実行時に指定したモデルがダウンロードされます。成功すると生成テキストが出力され、バージョンによっては生成統計も表示されます。ダウンロード時間やtokens/sは保証されません。追加ディスクを使う場合は、 HF_HOME を存在と書き込み権限を確認したディスク内のフォルダーに変更し、以降のセッションでも同じパスを使ってください。

まず3B 4-bit、またはコンテキストを短くした7B 4-bitで推論を試し、その後にタスクを拡大してください。13B以上の8-bitモデルは、当サイトの16GBプランでは推奨しません。LoRAのファインチューニングでは、学習状態とアクティベーション用のメモリも必要です。推論できたからといって、学習も可能とは限りません。

入力と出力

データを送り、結果を持ち帰る

コマンドの実行にはSSH、1回のコピーにはscp、繰り返しの同期や中断後の再開にはrsyncが適しています。コンソールでSSHが有効かどうかと接続パラメーターを確認してください。ブラウザーのデスクトップが使えても、SSHの設定が完了しているとは限りません。

ローカルのターミナルで接続情報を入力

read -r -p "SSH user: " REMOTE_USER
read -r -p "SSH host: " REMOTE_HOST
read -r -p "SSH port: " SSH_PORT
ssh -p "$SSH_PORT" "$REMOTE_USER@$REMOTE_HOST" \
  'mkdir -p ~/experiments/data ~/experiments/results'
scp -P "$SSH_PORT" ./dataset.jsonl \
  "$REMOTE_USER@$REMOTE_HOST:~/experiments/data/"
rsync -avP -e "ssh -p $SSH_PORT" ./data/ \
  "$REMOTE_USER@$REMOTE_HOST:~/experiments/data/"
rsync -avP -e "ssh -p $SSH_PORT" \
  "$REMOTE_USER@$REMOTE_HOST:~/experiments/results/" ./results/

このコマンドはBash構文で記述されており、ローカルのBashで実行します。ホスト、ユーザー、ポートにはインスタンスの詳細に記載された値を入力してください。初回接続時はホストフィンガープリントを確認します。異常を無視するためにフィンガープリントの検証を無効にしないでください。rsyncの例では削除オプションを使っていません。送信元ディレクトリの末尾にあるスラッシュは、ディレクトリ内の内容を同期することを示します。

大きなファイルは分割して検証

ネットワークが不安定な場合は、大きなアーカイブを1024MBずつのファイルに分割してから、個別にアップロードできます。分割は転送しやすくするためのもので、元のファイルを圧縮したり、最終的に必要なディスク容量を減らしたりするものではありません。

shasum -a 256 dataset.tar
split -b 1024m dataset.tar dataset.part-
cat dataset.part-* > dataset-restored.tar
shasum -a 256 dataset-restored.tar

分割は送信元で行い、結合は転送先で行います。2つのSHA-256値が一致したことを確認してから展開してください。元のアーカイブと分割ファイルを同時に保存する場合は、両方の分の空き容量が必要です。

長時間のタスクは独立したセッションで実行

リモートMacにtmuxをインストールしてセッションを作成し、推論コマンドを実行します。Ctrl+Bを押してからDを押すとセッションを終了せずに離脱でき、後で再接続できます。

brew install tmux
tmux new -s mlx
tmux attach -t mlx

新しいセッションでタスクを開始し、再接続してからattachを実行してください。tmuxを使えばSSH切断後もセッションに戻れますが、インスタンスの停止、再起動、レンタル期間の終了を越えてタスクを実行し続けることはできません。

レンタル期間を確認

期限前に更新とエクスポートを済ませる

Macの短期レンタルは日、週、月、四半期単位の前払いです。期限までに更新されない場合は自動的に停止し、以降の料金は発生しません。タスクやバックアップの予定はコンソールに表示される期限を基準にし、ブラウザーにデスクトップが表示されているかどうかで契約状況を判断しないでください。

  1. 01

    実験を続けるなら早めに更新

    期限前にコンソールで該当するサブスクリプションを開き、利用可能な更新手続きを確認して支払いを済ませた後、新しい期限を確認してください。お支払い方法はUSDT-TRC20、またはStripe経由のVisa / Mastercard / Amexのみです。いずれも米ドル建てです。実際に利用可能な決済ゲートウェイはコンソールの表示をご確認ください。

  2. 02

    更新しない場合は先にバックアップを確認

    期限前にデータセット、実験スクリプト、依存関係の一覧、ログ、結果ファイルをエクスポートし、ローカルで開けることを確認してください。重要なアーカイブはチェックサムも確認します。リモートデスクトップを終了しても結果が同期されたことにはなりません。ローカルで確認できないファイルは、バックアップ済みとはみなせません。

  3. 03

    停止後のデータ保管はありません

    期限が切れるとサービスは停止します。ノードの回収後、ディスク消去とシステム再インストールを行い、次の利用者に再割り当てする前にデータを削除します。停止後にデータへアクセスできる保管期間や、消去後のデータ復元は保証していません。注文に個別のデータ処理条件が明記されている場合は、注文内容とチケットで確認した内容が優先されます。

停止後に「何時間データを保管する」といった一律の保証はありません。バックアップの完了を確認できない場合は、レンタル期間中にチケットでお問い合わせください。再レンタルすれば元のディスクデータを取り戻せるとは限りません。

インスタンス情報を理解する

実験で使う用語の意味

容量、接続方法、課金期間はそれぞれ異なる要素です。違いを理解しておくと、問題がモデルの規模、ネットワーク接続、レンタル期間のどれに関係するかを見極めやすくなります。

物理ノード
クラウドMacサービスを提供する物理マシンの設置地域です。接続パラメーターは該当インスタンスの詳細で確認してください。
専有
レンタル期間中、1台の物理Macを割り当てるのは1人の利用者のみです。ユニファイドメモリとGPUコアを他の利用者と共有しません。
ユニファイドメモリ
CPUとGPUが共有するメモリプールです。当サイトの構成は16GBで、システム、モデル、ランタイムがこの容量を使用します。
VNC
リモートデスクトップの表示と操作に使う接続方式です。画面と入力を転送するもので、SSHによるファイル転送の代わりにはなりません。
画面共有
互換性のあるクライアントでリモートmacOSデスクトップを操作する方法です。接続先と認証情報はコンソールで確認できます。
セルフホスト型ランナー
利用者がレンタルマシンに自分でセットアップするCI実行プロセスです。レンタル期間終了後にマシンが停止すると、ビルドタスクも続行できません。
量子化ビット数
モデルの重みを表すビット数です。重みのサイズや出力に影響します。ビット数を下げても、実行時メモリが同じ割合で減るとは限りません。
メモリプレッシャー
アクティビティモニタに表示されるメモリ使用状況の指標です。黄色になったら、空き容量の数値だけを見るのではなく、同時実行数、コンテキスト、モデル規模を減らしてください。
まず状況を記録

症状から原因を絞り込む

まずエラーメッセージと発生時刻を保存してから、設定を変更してください。原因を探るために何度も再起動するのは避けましょう。未保存の実験が中断され、原因究明に必要な情報も失われる場合があります。

リモートデスクトップに接続できるが、画面が真っ暗

ブラウザーで接続が完了していない、デスクトップセッションに問題がある、またはノードにアクセスできない可能性があります。画面が真っ暗なだけでは、マシンが停止しているとは判断できません。

  1. コンソールでインスタンスの状態と期限を確認し、注文のレンタル期間内であることを確認します。
  2. 現在の接続ページを閉じ、同じインスタンスの詳細画面からデスクトップを再度開きます。ページ接続を妨げているブラウザー拡張機能は、一時的に無効にして試してください。
  3. SSHを設定済みの場合は、SSHでマシンにアクセスできるか確認します。確認のためにネットワーク設定を何度も変更しないでください。
  4. それでも接続できない場合は、画面が黒くなった時刻、ブラウザーのバージョン、SSHの接続可否を記録し、チケットを送信してください。未保存のタスクがある場合はその旨を伝え、すぐに電源操作を行わないでください。
入力した記号とキーボードのキーが一致しない

ローカルの入力方式、リモートmacOSの入力ソース、クライアントのキー割り当てが一致していないと、記号が意図しないものになることがあります。通常、インスタンスを再契約する必要はありません。

  1. まずリモートのテキストエディターで英字、数字、記号を試します。パスワード欄に入力して確かめないでください。
  2. リモートのメニューバーで入力ソースを確認し、「システム設定」のキーボードと入力方式の設定も確認してください。
  3. ショートカットに問題がある場合は、接続クライアントのキー割り当てを確認し、Command、Option、Controlの対応関係に注意してください。
  4. 問い合わせ時は「押したキー」と「画面に表示された内容」を記載してください。確認のために実際のパスワードや秘密鍵を送らないでください。
モデルの読み込み中にKilledと表示される、またはプロセスが終了する

メモリ不足は原因の1つですが、ディスク容量、モデルファイルの完全性、依存関係のエラーも確認してください。終了メッセージ1行だけでは、完全なログの代わりにはなりません。

  1. 実行したコマンド、エラーの末尾、モデル名、量子化ビット数、コンテキスト設定を保存してください。
  2. アクティビティモニタでメモリプレッシャーとスワップ使用量を確認します。他の負荷を減らし、短い出力と小さなモデルで試してください。
  3. 次のコマンドで df -h キャッシュがあるディスクを確認し、容量不足でダウンロードが中断していないか調べます。
  4. 仮想環境を有効にした状態で python -m pip checkを実行してください。小さなモデルでも失敗する場合は、エラーと環境のバージョン情報を添えてチケットを送信してください。
再現できる形で伝える

チケットには次の4種類の情報を記載

利用中のインスタンスに関するお問い合わせは、注文と照合できるよう、ログイン後にコンソールからチケットを送信してください。購入前の相談やログインできない場合は、お問い合わせページでメールの連絡方法をご確認ください。サポート窓口のメールアドレス: support@osxnode.com。

注文とノード

注文番号、ノード名、現在のインスタンス状態を記載してください。更新や支払いに関する内容は、決済方法と支払い状況もお知らせください。カード番号全桁、ログインパスワード、SSH秘密鍵は送信しないでください。

日時とタイムゾーン

問題が始まった時刻、継続しているかどうか、使用しているタイムゾーンを記載してください。「さっき」だけでは状況を把握できません。稼働状況に関する申請の場合は、対象期間内に停止時間帯とノード名をお知らせください。

操作とエラー

実行前の条件、再現手順、期待した結果、実際の結果を説明してください。MLXの問題は、モデルID、量子化ビット数、実行コマンド、依存関係のバージョンを添え、パスに含まれる機密情報は削除してください。

確認済みの項目

ブラウザーでの再接続、SSHの接続状況、メモリプレッシャー、ディスク容量など、確認結果を列挙してください。実行中または未バックアップのタスクがあるかも明記し、不要な中断を避けましょう。

どの手順で止まったか、その記録と一緒にお知らせください。

チケットにはインスタンス、時刻、エラー情報を記載してください。モデルが16GBで動作するか判断できない場合は、モデル規模と量子化ビット数を添えてご相談ください。