模型跑得慢,你知唔知邊度慢?多數 ML 工程師對「點樣調快模型」有直覺,但「點樣分析呢個模型點解慢」就冇乜概念。AWS 喺 Hugging Face 發布嘅 TorchNeuron 性能分析教學系列(Profiling TorchNeuron)第一篇,就係由「零 profiling 經驗」開始,一步一步教你用系統層面嘅工具追蹤推理時間去向。

呢篇教學以 AWS Trainium 為底。Trainium 係 Amazon 自家嘅 AI 晶片,專為深度學習訓練同推理而設計;而 TorchNeuron 係對應嘅開源 PyTorch 原生後端,支持標準 PyTorch workflow,包括 eager execution、torch.compile 同標準 PyTorch API,代碼改動最小。另外 TorchNeuron 仲同 Neuron Kernel Interface(NKI)打通,俾你可以寫 custom operators 針對 Trainium 硬件做性能優化。

先講架構:Neuron 後端係通過 PyTorch 嘅 PrivateUse1 擴充點接入框架,呢個機制令一個加速器可以同 PyTorch 整合,而唔使另外加一個好似 cuda 咁嘅 dispatch key。torch_neuronx 就係利用呢個機制,將 Neuron 註冊成 PyTorch 嘅原生 backend。

做 profiling 嘅核心係兩個物件:NeuronConfig 決定捕邊啲 Neuron 數據流同邊啲 NeuronCores,仲有寫去邊;NeuronProfiler 接收 NeuronConfig,提供 export_trace 回調,將框架層 trace(trace.json)同 Neuron 系統層 trace 一齊寫落。correlate_device_time=True 會將硬件時間帶入 key_averages() 表格,令你喺同一個表入面比 CPU 時間同 Neuron 裝置時間。modes 參數揀要捕嘅數據流(device instructions、runtime trace 等),capture_enabled_for_nc 揀邊幾核要 trace。

分析完之後,輸出目錄除咗系統 trace,如果有 device 數據就會有配對嘅 .neff(編譯後 Neuron 可執行檔)同 .ntff(對應硬件指令 trace)檔,兩檔共享一個數值 hash 去配對。用 Neuron Explorer(瀏覽器版 viewer,可以透過 SSH tunnel 或 VS Code 擴充開)你可以確認 key_averages() 所報嘅數值,同埋逐操作跟緊佢哋由框架 dispatch 到 runtime scheduling,再落到 NeuronCore 上嘅硬件執行。

模姐驗嚇貨:呢篇係教學文,冇獨立測試數據。佢教嘅係「點樣睇」,唔係「快慢點」。要真係知道 Trainium 對你嘅模型快幾多,自己跑自己嘅 workload、用呢套工具抓真實數據先至算數。AWS 寫自己晶片嘅 profiling 文,讀者要分清呢係廠商嘅工具文檔定係獨立性能評估——係前者。Trainium 喺實際部署環境嘅成本效益、同 NVIDIA 或者其他 ASIC 嘅實際差異,呢篇教學文唔會回答,都唔該期望佢回答。