Runtime
3秒看懂
**Runtime(執行時)**是程式生命週期的執行階段,尤其指 AI 模型訓練/推論時,負責將模型描述(如計算圖、PyTorch 程式碼)轉化為實際硬體指令、管理記憶體/並行/通訊等資源的軟體層。它是連線開發者程式碼與底層晶片(GPU/ASIC/CPU)的關鍵中介軟體。
3分鐘產業解釋
在 AI 產業鏈中,Runtime 位於架構與硬體之間。開發者用 PyTorch/TensorFlow 編寫模型,但程式碼不是直接跑在 GPU 上——必須經過 Runtime 系統進行圖捕獲、圖最佳化、記憶體分配、核心排程、跨裝置通訊等。
- 訓練側:分散式訓練 Runtime(如 NCCL、Megatron 的集合通訊層、Ray)負責梯度同步、彈性擴縮容;PyTorch 的 eager Runtime 提供動態執行與自動微分;TorchDynamo/Inductor 等編譯器級 Runtime 則用 JIT 編譯提升訓練速度。
- 推論側:專用推論 Runtime(TensorRT、ONNX Runtime、OpenVINO)把模型轉換、融合運算元、量化,生成高度最佳化的執行計劃,顯著降低延遲、提高吞吐。
- 硬體適配:NVIDIA 的 CUDA Runtime、AMD 的 ROCm、Intel 的 oneAPI Level Zero 是晶片廠商提供的底層 Runtime,上層的架構 Runtime 依賴它們來排程計算。
Runtime 的效能直接決定訓練成本(叢集利用率)和推論的使用者體驗(響應速度、功耗)。它雖不如晶片那麼“硬”,但卻是整個 AI 基礎設施的“作業系統”。
15分鐘專家深入
1. 圖執行模式:動態 vs 靜態 vs 編譯
- Eager Mode(Define-by-Run):代表 PyTorch 預設模式。每個運算元立即執行,便於除錯,但缺少全圖最佳化,執行時開銷高(Python 直譯器、記憶體分配頻繁)。PyTorch 2.x 用
torch.compile在 eager 外衣下引入圖編譯最佳化,平衡靈活性與效能。 - Graph Mode(Define-and-Run):代表 TensorFlow 1.x Session、TorchScript(帶
torch.jit.trace/script)。先建圖,後最佳化執行,能做跨運算元融合、常量摺疊、靜態記憶體規劃,但對控制流和支援 Python 操作不夠友好。 - Compiler Runtime:XLA(加速線性代數)、Glow、Apache TVM 等編譯器將模型 IR 進一步編譯成硬體原生程式碼。PyTorch 2.0 的 TorchInductor 將 FX 圖編譯為 Triton 或 C++ 核心,再通過底層 Runtime 執行。
2. 執行時記憶體與執行排程
- 記憶體池:CUDA Runtime 提供
cudaMallocAsync和 CUBLAS 工作空間預分配,避免在熱路徑上頻繁分配釋放。推論 Runtime(如 TensorRT)根據最大 batch size 預先分配所有張量記憶體,消除執行時調整。 - 流與併發:將獨立的操作放入不同的 CUDA 流,實現 GPU 核心併發、複製與計算的 overlap。Runtime 負責流的依賴管理和同步,不當排程會導致 stalling。
- 動態形狀支援:高階 Runtime(如 TensorRT 動態形狀、ONNX Runtime 支援動態 shape)需要在執行時檢查尺寸、重新編譯或選擇最優核心,增加複雜度。
3. 分散式通訊 Runtime
- 集合通訊庫:NCCL(NVIDIA 專有)實現 AllReduce、AllGather 等操作,針對 NVLink、InfiniBand 拓撲做了 Ring/Tree 演算法最佳化。它是訓練 Runtime 的核心依賴。
- 彈性訓練:架構 Runtime(如 TorchElastic)監視節點存活、動態調整 world size,並在節點故障後自動恢復訓練;底層依賴分散式鍵值儲存(如 etcd)和 rendezvous 機制。
- MoE(專家混合)通訊:Megatron-LM 等模型的 All-to-All 分發/合併使用 NVIDIA 的 Transformer Engine 執行時,與 NCCL 協作降低 dispatch 開銷。
4. 端側與邊緣 Runtime
- 輕量化推論 Runtime:TFLite Micro、ONNX Runtime Mobile 針對微控制器、手機 NPU 做了極簡實現,支援無作業系統環境,記憶體佔用常數級。
- Web Runtime:WebGPU/WebAssembly 執行時可讓瀏覽器直接執行 AI 模型,利用客戶端顯示卡加速。
技術原理(最深,講機制+關鍵引數,可 ASCII 圖,無據則定性)
以 PyTorch 執行一個 y = x.relu() 為例,Runtime 路徑如下:
Python 呼叫 tensor.relu()
└─ 經由 C++ ATen 庫 (dispatch)
└─ 檢查裝置型別、資料型別,選擇對應核心
└─ 如果是 CUDA 裝置:
├─ cudaSetDevice() 確保上下文
├─ cudaMalloc/cudaFree 管理臨時記憶體
├─ cudaLaunchKernelgrid, block, shared_mem, stream(kernel, args)
└─ cudaStreamSynchronize 或其他流原語
- 運算元融合(Runtime 最佳化核心):多個小運算元(如
relu + add + batch_norm)合併為一個核心,消除中間全域性記憶體讀寫。TensorRT 的垂直融合(將卷積加偏置加啟用合併)就是這個原理。融合後記憶體頻寬利用率可顯著提升(具體倍數取決於運算元組合和硬體)。 - 關鍵引數(受限於無具體廠商資料,僅示意):
- CUDA 流最大併發數:由硬體 HyperQ 流數量決定(例如某些架構 32 個硬體工作佇列,但實際排程有效率約束)。
- 核心啟動延遲:數微秒量級,過多小運算元會導致啟動開銷佔比大,所以圖融合很重要。
- 記憶體複製頻寬:受 PCIe 或 NVLink 頻寬限制。Runtime 使用 pinned memory 和非同步複製最佳化。
分散式 AllReduce 演算法(無證據數字,定性說明):
- Ring AllReduce:步驟 = 2*(N-1) 次 scatter-reduce + allgather,每次通訊量為 2(N-1)/N * 總資料量(近似於 2x 資料量),頻寬利用率近極限,延遲隨節點數線性增長。
- Tree AllReduce:Reduce 需要 logP 步,但中間交換器流量大,易形成熱點;NVSwitch 輔助可實現更低的延遲。
推論 Runtime 最佳化流程示例(以 ONNX Runtime 為例)
模型 (ONNX) → 圖分割槽器 (Partitioner) → 消除冗餘節點 → 常量摺疊
→ 運算元融合 (Conv+BN+Relu) → 記憶體規劃 (預分配最大 workspace)
→ 分配 Execution Provider (CUDA/TensorRT/ROCM) → 並行執行計劃
→ 執行時執行迴圈: 喂資料 → 啟動核心 → 複製輸出
技術演進史
- 2012-2015:Caffe、Theano 等使用靜態圖 Runtime,輸入模型定義,一次性編譯執行。使用者需預定義所有分支。
- 2016-2018:TensorFlow 1.x 推崇 Graph Session,使用者習慣麻煩;Chainer、PyTorch 推出動態圖,降低門檻。分散式訓練出現 MPI-based ALLReduce 模式(Horovod)。
- 2019-2021:推論側 Runtime 爆發:ONNX Runtime 推進標準模型互轉,TensorRT 深度繫結 NVIDIA,OpenVINO 專注 Intel 平台。模型服務化 Runtime(Triton Inference Server、TorchServe)出現,把模型變成微服務。
- 2022-至今:編譯融合時代:PyTorch 2.x
torch.compile成為預設訓練加速方式;JAX 的 JIT 編譯越來越主流;TVM/MLIR 多級 IR 設計開始滲透進主流架構。彈性訓練 Runtime(Ray、Kubernetes Operator)成熟。大型模型時代對通訊 Runtime 提出更高要求(FP8 直接 allreduce、多級並行通訊排程)。
技術路線對比(量化表,受限於無檢索資料,僅定性評等,僅供參考)
| 特性/產品 | PyTorch Eager | PyTorch compile | TensorRT (推論) | ONNX Runtime (GPU) | OpenVINO (Intel) | JAX (compile) |
|---|---|---|---|---|---|---|
| 啟動開銷 | 低 | 中(編譯耗時) | 中-高(最佳化耗時) | 中 | 中 | 中-高 |
| 推論延遲(GPU) | 一般 | 較好 | 極優 | 很好 | 較好 | 較好 |
| 記憶體佔用最佳化 | 手動 | 自動圖最佳化 | 激進預分配 | 自適配 | 自適配 | 自適配 |
| 生態相容性 | 最高 | 最高 | 僅限於NVIDIA | 跨硬體廠商 | 跨Intel器件 | 僅限於XLA後端 |
| 動態形狀支援 | 原生 | 支援 | 支援 | 支援 | 支援 | 有限制 |
| 分散式訓練支援 | 需外部庫 | 通過torchrun | 不涉及 | 僅推論 | 僅推論 | 通過mpi4jax等 |
| 典型應用 | 研究實驗 | 訓練加速 | 高階NVIDIA推論 | 多硬體推論部署 | Intel CPU/GPU推論 | 批次訓練 |
(注:延遲“極優”等詞彙為定性比較,並非精確量化數值,具體差異因模型和硬體而異。)
上下游
上游
- 架構制定者:Meta(PyTorch)、Google(JAX、TF)、Microsoft(ONNX 規範)等定義 Runtime 的 IR 和 API。
- 硬體廠商:NVIDIA(CUDA、cuDNN、TensorRT)、AMD(ROCm、MIGraphX)、Intel(oneAPI、OpenVINO)、華為(CANN、MindSpore Runtime)等提供底層驅動、數學庫和專用推論引擎。
- 編譯器/中介軟體:LLVM/MLIR 社群、TVM 團隊、Triton 語言開發者,為 Runtime 提供新的程式碼生成策略。
下游
- 雲端服務商:AWS Inferentia、Google TPU VM、Azure ML 等服務內嵌最佳化 Runtime,向客戶提供高吞吐推論例項。
- AI 應用公司:自動駕駛、醫療影像、推薦系統等,將模型部署到自建或雲端端 Runtime 上。
- 邊緣/IoT 裝置商:使用精簡 Runtime(TFLite Micro、ONNX Runtime)將 AI 放入功耗受限環境。
關鍵指標
- 推論吞吐(Queries per second, QPS):單位時間處理的請求數,受 batch size 和併發流效率影響。
- 推論延遲(P50/P99):P99 高意味著抖動嚴重,Runtime 的 GC、核心同步等可能成為瓶頸。
- 首次推論初始化時間(冷啟動):包含載入模型、編譯/最佳化、記憶體分配,對 serverless 部署至關重要。
- 記憶體佔用峰值(Peak GPU Memory):Runtime 的快取策略和記憶體複用策略決定能否執行更大型模型。
- 通訊頻寬利用率(Bus Utilization):實際 AllReduce 頻寬 / 理論峰值頻寬,反映 Runtime 的通訊演算法和拓撲感知能力。
- 擴充套件效率(Scaling Efficiency):N 卡訓練速度 /(單卡速度 × N),Runtime 的通訊開銷越小越接近 1。 (所有數值依賴具體硬體與模型,本文[未充分揭露]具體數值,僅解釋指標含義。)
供需與市場資料(因檢索缺失,無定量資料)
目前 AI Runtime 並不作為一個獨立的市場品類被統計,其價值內化在架構、雲端服務、晶片和推論部署平台中。但推論最佳化需求極其旺盛,IDC 等機構預測 AI 推論伺服器市場年複合增長率超過 40%(來源可參考 IDC 相關報告,此處不引具體數字)。Runtime 作為效能的“臨門一腳”,重要性持續上升,尤其在大型模型部署成本高昂的背景下,推論 Runtime 的最佳化成為企業 ROI 的關鍵。
代表公司與資本對映
- NVIDIA:CUDA Runtime、TensorRT、Triton Inference Server、Magnum IO/NCCL,生態護城河極深,Runtime 與硬體強繫結,通過軟體許可和雲端服務變現(如 AI Enterprise)。
- Meta:PyTorch 開源 Runtime,業界事實標準,不直接商業化,但通過吸引開發者來鞏固 AI 生態並反哺內部硬體(MTIA)最佳化。
- Google:TensorFlow Runtime 及 XLA,JAX,以及用於 TPU 的閉源 Runtime(TPU VM),通過 GCP TPU 服務變現。
- Microsoft:ONNX Runtime 開源,跨平台,與 Azure ML 和 Windows 深度整合,是去碎片化的戰略產品;OLIVE 工具鏈自動選擇最優 Runtime。
- Intel:OpenVINO、oneAPI Level Zero,配合自家 CPU/GPU/Gaudi 加速器,推動硬體銷售。
- AMD:ROCm(對標 CUDA),MIGraphX(推論最佳化),採取開源相容策略,追趕 NVIDIA。
- 獨立廠商/初創:OctoML(Apache TVM 商業化)、BentoML(模型服務化執行時)、Seldon(推論執行時管理),多聚焦於多雲端、多硬體部署的便捷性。
投資邏輯
- 生態鎖定價值:NVIDIA 的 CUDA Runtime + cuDNN 組合讓使用者模型遷移成本極高,構成持續收費的護城河。
- 去碎片化機遇:ONNX、MLIR 等標準 Runtime 如果成功,將削弱單一硬體繫結,使推論部署更靈活,相關服務商受益(如模組化推論平台)。
- 大型模型推論爆發:隨著 LLM 推論成本成為企業最大支出,Runtime 最佳化的價值凸顯,尤其能降低 token 生成延遲和成本的技術(Continuous batching、KV cache 管理)成為創業熱點。
- 風險:開源 Runtime 大多免費,純 Runtime 最佳化商需要轉型為平台或結合硬體才能產生穩定營收;硬體廠商自研 Runtime 加劇碎片化。
常見誤讀糾偏
- “Runtime 只是推論引擎” 糾偏:Runtime 涵蓋訓練和推論兩個階段。分散式訓練執行時(AllReduce 通訊、彈性容錯)同樣複雜且關鍵,只是使用者感知不強。推論引擎是 Runtime 的一個子集。
- “用 PyTorch 訓好模型,部署時原樣跑就行”
糾偏:Eager Runtime 的靈活性帶來大量效能損失,直接用於生產延遲高、吞吐低。通常必須經過
torch.export、TensorRT 或 ONNX 最佳化,生產中的 Runtime 和訓練時可能完全不同。 - “ONNX Runtime 跑任何模型都能達到最佳效能” 糾偏:ONNX 有運算元覆蓋問題,部分自定義運算元會 fallback 到 CPU 或以 subgraph 形式交給低效後端,最終效能可能遠不如原生 Runtime(如 TensorRT 對 NVIDIA GPU 的極致調優)。實際部署需 benchmark。
- “Runtime 效能瓶頸在單卡算力,和軟體層無關” 糾偏:糟糕的 Runtime 排程(如頻繁 CPU-GPU 同步、未做運算元融合)能讓高階 GPU 利用率不到 30%,好的 Runtime 最佳化比提升硬體能效比更經濟。
學習路徑
- 入門(2-4 周):瞭解 PyTorch
torch.compile、torch.cuda.Stream基本用法;執行 ONNX Runtime 示例轉換 ResNet,觀察延遲變化。 - 進階(1-2 個月):學習 CUDA 程式設計基礎(記憶體模型、流、核心啟動);閱讀 NCCL 官方文件理解集合通訊;剖析 TensorRT 的 builder 日誌,分析融合圖層。
- 專家(3 個月以上):閱讀 TVM Bring Your Own Codegen 教程,嘗試為自定義運算元生成程式碼;研究 PyTorch Dynamo 原始碼,瞭解 FX Graph 捕獲;參與 ONNX Runtime 或 TorchInductor 開源貢獻;精讀論文《Efficiently Scaling Transformer Inference》、《GSPMD》、《Alpa》,理解編譯器與 Runtime 協同。
一句話總結
AI Runtime 是演算法與算力之間的“無縫翻譯層”,它決定了模型程式碼在真實晶片上能跑到多快、多省,以及能否彈性、容錯地服務億萬使用者——是 AI 產業不可忽視的底層作業系統。
延伸閱讀與來源
注意:以下為通用權威來源建議,本文因聯網檢索失敗,所有技術描述均為定性行業通識,未引具體定量資料,請讀者查閱原始資料獲取精確規格。
- PyTorch 官方部落格:《A deep dive into TorchDynamo》
- NVIDIA 開發者文件:CUDA Runtime API、TensorRT Developer Guide
- ONNX Runtime GitHub 倉庫及效能測試報告
- 論文:XLA: Optimizing Compiler for Machine Learning (Google);TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
- 行業分析:IDC/Forrester 關於 AI 推論基礎設施的報告(可自行搜尋最新版)
- 分散式訓練:NCCL 官方文件 & Megatron-LM 論文