第一天的实验准备

先让模型跑通,
再把实验放长。

这份清单面向刚开通 OsxNode M4-16 的实验者:先连接独享 Mac,检查 Python 与 MLX,再用短输出确认内存余量。当前机型为 M4、16GB 统一内存、256GB SSD。

首次连接前准备订单号;到期前导出结果。连接成功不代表任意规模的模型都能装入 16GB 统一内存。

先确认交付

从节点卡进入 macOS 桌面

支付确认后当天开通,交付以控制台中出现节点与连接凭据为准。付款完成但尚未看到凭据时,先检查对应订单,不要重复购买。

  1. 01

    登录并核对节点

    使用下单邮箱登录控制台,进入实例或订阅详情,核对订单号、节点名称与到期时间。节点名称应与购买时的选择一致;连接地址、用户名与端口均以该实例详情为准。

  2. 02

    打开远程桌面

    在对应节点卡或详情中点击「打开远程桌面」,使用控制台交付的凭据进入 macOS。浏览器应允许连接页面正常运行;不要把公开帮助页当作远程桌面入口。

  3. 03

    修改初始密码

    首次进入系统后,在系统设置的用户与群组中修改所用账户的初始密码,并保存到自己的密码管理工具。先验证新密码可用,再结束原连接;不要在工单中发送初始密码或新密码。

一台物理 Mac 在租期内只分配给一位租户,非虚拟机。浏览器关闭只会结束当前查看,不等于停止租期;需要持续运行的任务应按下文方法放入独立会话。

环境账目

先隔离依赖,再安装 MLX

下面命令在远程 Mac 的「终端」中执行,不是在你自己的电脑上执行。使用独立虚拟环境可以把本次实验的 Python 包与其他任务分开;不要对系统 Python 执行全局安装。

检查架构与 Homebrew

uname -m
command -v brew
brew --version

预期架构为 arm64,后两条应返回 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, 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 适合运行命令,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

分卷在源端执行,合并在目标端执行;比较两次 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 服务的物理机器所在地区。连接参数以对应实例详情为准。
独享
一台物理 Mac 在租期内只分配给一位租户,统一内存与 GPU 核心不与其他租户共享。
统一内存
CPU 与 GPU 共同使用的内存池。本站为 16GB,系统、模型与运行时都从中占用空间。
VNC
用于查看与操作远程桌面的连接方式。它传输画面和输入,不替代 SSH 文件传输。
屏幕共享
通过兼容客户端操作远程 macOS 桌面的方式。连接地址与凭据从控制台取得。
self-hosted runner
由用户自行部署在租用机器上的 CI 执行进程。租期结束停机后,构建任务也无法继续执行。
量化位宽
表示模型权重时使用的数值位数,影响权重体积与输出表现。降低位宽不意味着运行内存会严格按同一比例减少。
内存压力
活动监视器中反映内存使用状态的指标。变黄时应减少并发、上下文或模型规模,而不是只看剩余容量数字。
先保留现场

按症状缩小故障范围

先保存错误文本与发生时间,再做调整。不要连续重启碰运气;重启可能中断尚未保存的实验,也会丢失用于判断原因的现场信息。

远程桌面已连接,但一直黑屏

可能是浏览器连接未建立完整、桌面会话状态异常,或节点当前不可访问。黑屏本身不足以证明机器已停机。

  1. 先看控制台实例状态与到期时间,确认该订单仍在租期内。
  2. 关闭当前连接页,从同一实例详情重新打开桌面;暂时停用会拦截页面连接的浏览器扩展再试。
  3. 已配置 SSH 时,用 SSH 判断是否仍能访问机器。不要为了测试而重复修改网络设置。
  4. 仍无法进入时记录黑屏时间、浏览器版本及 SSH 是否可达,通过工单提交;有未保存任务时先说明,不要立即执行电源操作。
输入的符号与键盘按键不一致

本地输入法、远程 macOS 输入源和客户端按键映射不一致,都可能造成符号错位。这通常不需要重新开通实例。

  1. 先在远程普通文本编辑器中测试字母、数字与符号,不要在密码框里猜测。
  2. 核对远程菜单栏的输入源,并检查系统设置中的键盘与输入法设置。
  3. 快捷键异常时查看连接客户端的按键映射,留意 Command、Option 与 Control 的对应关系。
  4. 提交问题时写出「按了什么、显示什么」,不要发送真实密码或私钥作为测试文本。
模型加载时出现 Killed 或进程退出

内存不足是可能原因之一,但也要检查磁盘空间、模型文件完整性与依赖错误。单独一行退出信息不能替代完整日志。

  1. 保留完整命令、报错末尾内容、模型名称、量化位宽与上下文设置。
  2. 查看活动监视器的内存压力与交换使用;关闭其他负载,改用短输出和较小模型验证。
  3. 用 df -h 检查缓存所在磁盘,确认下载没有因空间不足中断。
  4. 在已激活的虚拟环境中执行 python -m pip check。如小模型也失败,把错误与环境版本一起提交工单。
让问题可复现

一张工单,附齐这四类信息

已开通实例的问题优先从登录后的控制台提交工单,便于关联订单。售前选型或无法登录时,可通过联系我们页面查看邮件路径;对外支持邮箱为 support@osxnode.com。

订单与节点

填写订单号、节点名称及当前实例状态。涉及续期或付款时补充支付方式与支付状态;不要提供完整卡号、登录密码或 SSH 私钥。

时间与时区

写明问题开始时间、是否持续及使用的时区。不要只写「刚才」;如涉及可用性申请,在当期内提交停机时段与节点名称。

操作与错误

说明执行前提、复现步骤、预期结果和实际结果。MLX 问题附模型标识、量化位宽、运行命令及依赖版本,去除路径中的敏感信息。

已做的检查

列出浏览器重连、SSH 连通性、内存压力与磁盘空间等检查结果。明确是否有正在运行或尚未备份的任务,避免不必要的中断。

卡在哪一步,就带上那一步的记录。

在工单中关联实例、时间与错误信息。还没确定模型是否适合 16GB,也可以先说明模型规模和量化位宽再咨询。