在跨區租用 Mac mini M4上以 ONNX Runtime 的 CoreML EP 跑批推理工作階段時,線程、統一記憶體尖峰與佇列逾時共同決定穩定性。下文以對照表收斂 Session 數、批次、I/O 與 Wq/Wc,並附可 export 的環境變數與保守併發建議(不宣稱固定加速比;請以模型與 ORT 版本量測為準)。延伸:《Core ML mlmodelc 與批推理矩陣》、《跨區延遲與買租成本》、《MPS/MLX 批推理矩陣》。公開頁免登入:首頁、方案、購買、說明中心。
前提與邊界
CoreML EP 將子圖交給 Apple 堆疊,行為隨 macOS、ORT 與模型而變;首次載入與圖優化常拉長尾延遲。遠端請分開觀測SSH/API 等待與裝置計算,並為統一記憶體保留系統餘量。下表為出發點,請以自家 p95/p99 迭代。
決策對照表(工作階段、線程、批次、I/O、逾時、成本提示)
符號:Wq 為取得推理工作槽前的等待逾時;Wc 為單次 run() 的計算逾時(含首次優化與暖機餘裕)。成本欄為定性提示。
| 情境輪廓 | 活躍 InferenceSession 數 | 線程(intra/inter 起點) | 批次 B | I/O(內建 NVMe) | Wq/Wc | 日租/月租提示(定性) |
|---|---|---|---|---|---|---|
| 夜間離線批次(模型已固定) | 16GB:1~2;24GB:2~3(需量測) | intra 2~4、inter 1 起;與 OMP 對齊 | 階梯上調;觀測交換子是否退回 CPU | 權重與中繼分目錄;避免與系統日誌同碟競爭 | Wq 短/Wc≈p95×2+暖機 | 日租適合尖峰試跑 |
| 線上低延遲+小批 | 常駐 1;必要時讀寫分離第二個只讀 Session | intra 1~2、inter 1;尾端優先 | 小 B;寧可排隊也不要大尾延遲 | 快取唯讀;寫入最小化 | Wq 中/Wc 含首次推理 | 月租較易維持基線 |
| 多租戶/共用節點 | 每租戶 1;全域 Session 池+信號量 | 保守線程;禁止每請求新建 Session | 租戶別上限;超額進深佇列或拒絕 | 租戶別 scratch;外接碟可選 | Wq 長+明確降級/Wc 對齊 SLA | 隔離良好時月費有時反而更省 |
不宣稱固定加速比。ANE/GPU 佔用與子圖覆蓋率高度依模型而定;請以相同輸入分佈記錄延遲與記憶體階梯,再調整表內欄位。費率請以 方案/定價 與購買頁為準。
可執行環境變數(shell 範例)
下列變數可在啟動推理行程前於 bash/zsh 匯出;請依實際相依(OpenMP、Accelerate)與 ORT 組建驗證。CoreML EP 專屬選項多在 API 的 SessionOptions/provider options,請併查官方文件。
# 與 SessionOptions.intra_op_num_threads 對齊,避免 CPU 後端過訂閱
export OMP_NUM_THREADS=<INTRAthreads>
export VECLIB_MAXIMUM_THREADS=<INTRAthreads>
# 日誌等級(名稱或 0~4 整數;若程式已指定則以 API 為準)
export ORT_LOG_LEVEL=<VERBOSE|WARNING|3>
OMP_NUM_THREADS:與intra_op_num_threads一致或取其子集,避免與多行程相乘爆炸。VECLIB_MAXIMUM_THREADS:限制 Accelerate/vecLib 路徑並行,常用於 CPU 子圖或前後處理。ORT_LOG_LEVEL:除錯短開、上線關;詳見官方 Logging 文件。
併發建議清單(保守、可掃讀)
- 維持長生命週期
InferenceSession並池化;避免高 QPS 下頻繁建立/銷毀。 - 活躍 Session ≤ 穩定並行;信號量隔離首次推理與批次尖峰。
- 線程階梯調整:inter 先固定 1,再調 intra;每步記錄 p95/p99 與記憶體。
- 與
coremlcompiler或大量 I/O 錯峰,降低統一記憶體與 NVMe 同時飽和。
佇列逾時與降級
跨區控制面會吃掉 Wq:排程器「等節點」與 ORT 計時請分欄。降級可縮 B、延後非關鍵批次,或死信+有界重試。資料盡量與推理同區以降低 RTT。
如何依區域選節點與套餐
常見問題
為何首次推理特別慢? 可能含圖讀取、編譯與快取建立;請把首次樣本與穩態樣本分開統計,並在 Wc 留餘裕。
需要外接 SSD 嗎? 非必要;若權重與日誌量大,外接暫存可降低內建碟寫入競合,但請避免多租戶同時掃同一外接碟。