在跨区域租用 Mac mini M4上交付 Core ML,通常先把包编译成 mlmodelc 再跑批推理会话。瓶颈常在统一内存叠加、编译并发与磁盘 IO争用,以及把排队等待与单次计算混成单一超时。下文给旋钮边界、场景表与命令占位。免登录:首页、购买、套餐。算力与买租见《区域延迟与批成本:买还是租》。
导语与边界
聚焦 mlmodelc 批量编译与批推理运维;网络拓扑不展开。统一内存与媒体侧见《Blender 与统一内存矩阵》;火炬/MLX 见《MPS 与 MLX 批推理矩阵》。
mlmodelc 批量编译:并发、IO 与临时路径
xcrun coremlcompiler compile 在批量场景下是CPU、磁盘与内存带宽的混合题。并发编译数不是「核数等于并行数」:每个任务会写中间文件、展开图优化并占用页缓存;争用严重时失败重试会把队列打爆。实操上先用低并发建立稳定基线,再按机器档位与磁盘类型逐步提高。
统一内存机器上,把大模型源包与编译产物根目录规划清楚:热路径尽量落在经实测的内置 APFS;需要冷归档或共享制品时再挂外置盘,并避免与推理进程的随机读写在同一慢速总线上抢带宽。
批推理会话:batch 与常驻
批推理不是把 batch 拉到极限,而是把单次会话的峰值内存与尾延迟写进 SLO。统一内存下,权重、KV 或中间张量、框架元数据共享一池;多会话并行会重复常驻。建议为每个 Worker 设定最大 batch与最大并发会话,并在压测里记录九五分位与 OOM 前兆(频繁页回收、编译缓存抖动)。
队列与超时:编译与推理拆开
至少三类上限:排队等待、单任务计算、编译或冷启动附加。混用单一「总超时」会在权重刚加载完或首次 shape 编译时被误杀。超时应配套降级阶梯(缩小 batch、切小模型、换队列优先级)与死信捕获;编排侧可参考《死信队列与失败摘要 Webhook》的思路映射到自有 Worker。
场景决策矩阵(定性)
下表用于评审会白板:把占位符换成你们实测的监控区间,再与《区域与成本矩阵》对齐节点与数据面。
| 场景 | 并发编译数 | batch | IO | 外置盘 | 队列超时 | 日租 / 月租成本提示 |
|---|---|---|---|---|---|---|
| CI 冒烟编译 | 1~2 | 不适用(编译向) | 小模型以内置盘为主 | 通常不必需 | 等待短、计算中;失败快反馈 | 按次短跑,日租或按小时更灵活 |
| 夜间批量出包 | 2~4(视内存与磁盘) | 推理侧微批另表 | 顺序写为主,避免与推理同盘抢随机 IO | 大源包可外挂读,产物回传对象存储 | 等待中等、计算长;允许退避重试 | 通宵窗口月租均摊更稳 |
| 在线低延迟 | 编译与在线解耦(预编译) | 小 batch 或单条 | 预处理与特征缓存本地化 | 避免冷外置盘直读热路径 | 等待短、计算短;严控尾延迟 | 与数据面同区节点,月租降低往返风险 |
| 重批吞吐 | 与在线错峰;离线窗口并行 | 逐步加到拐点前 | 大批次注意读放大与解码 CPU | 数据集可外挂;权重常驻内置 | 等待与计算拆分;大计算上限留编译余量 | 长周期任务月租通常优于反复日租 |
可执行命令与参数占位
将下列占位符替换为实际路径与版本:${MODEL_PATH}、${OUTPUT_DIR}、${DEPLOYMENT_TARGET}、${PARALLEL_JOBS}、${TIMEOUT_SEC}。
# 单模型编译为 mlmodelc(${OUTPUT_DIR} 为产物目录)
xcrun coremlcompiler compile "${MODEL_PATH}.mlmodel" "${OUTPUT_DIR}" \
--deployment-target "${DEPLOYMENT_TARGET}"
# 批量顺序编译(并行请用作业池把「同时运行数」限制为 ${PARALLEL_JOBS})
find "${MODELS_ROOT}" -name "*.mlmodel" -print0 | while IFS= read -r -d '' f; do
base="$(basename "$f" .mlmodel)"
mkdir -p "${OUTPUT_DIR}/${base}"
xcrun coremlcompiler compile "$f" "${OUTPUT_DIR}/${base}" \
--deployment-target "${DEPLOYMENT_TARGET}"
done
# 临时目录(减轻系统盘争用;路径按机内实测填写)
export TMPDIR="${TMPDIR:-/path/to/fast/tmp}"
# 超时:优先用编排器(K8s Job / CI step / systemd)的 deadline;
# 若 shell 有 GNU timeout,可写:timeout "${TIMEOUT_SEC}" xcrun coremlcompiler compile …
Python 侧导出与精度校验请沿用你们锁定的 coremltools 小版本;此处不绑定具体 API,以免与产线版本漂移冲突。
租购与区域(定性)
制品与数据面同区常比盲目加 batch 更有效。短验证用日租摊薄试错;稳定窗口再映射月租。购买相关页均支持免登录浏览。
常见问题
mlpackage 与 mlmodel 混用? 统一脚本入口,在编译前规范化路径与命名,避免并行任务写同一输出目录。编译慢但 CPU 不满? 先看磁盘与元数据操作,再看是否被安全扫描或网络卷拖慢。推理偶发首次慢? 区分 shape 编译与权重加载,预热应写进就绪探针而不是只打日志。