deepseek-ai/DeepJIT
A lightweight library for xPU kernel JIT compilation
解決的問題
DeepJIT 提供一個輕量級的頭文件-only C++20 執行時,簡化 GPU 與 NPU 內核的即時(JIT)編譯流程。它消除了內核函式庫作者在執行階段編譯原始碼、快取二進位檔,以及將其載入硬體裝置時,必須自行建構基礎設施的負擔。
工作原理
DeepJIT 為兩個主要後端(NVIDIA CUDA GPU 與 HUAWEI Ascend NPU)提供統一介面。它管理內核的完整生命週期:使用適當的工具鏈(CUDA 使用 NVCC,Ascend 使用 Bisheng/ld.lld)編譯原始碼,將產生的二進位檔快取至磁碟與記憶體中,以避免重複編譯,並使用後端特定選項啟動內核。
主要技術機制包括:
- 雜湊與快取:根據原始碼、追蹤的標頭檔、編譯器版本與設定選項產生唯一的快取金鑰。這使得二進位檔可在不同流程、使用者之間,甚至透過共用檔案系統在不同節點間重複使用。
- 標頭檔解析器:一個逐行掃描器,用於追蹤特定的尖括號包含檔,以確保相依性標頭檔的變更會觸發重新編譯。
- PyTorch 整合:與 PyTorch 的 CUDA 或
torch_npu流整合,並可透過 pybind11 暴露給 Python。 - 延遲初始化:裝置與編譯器偵測會延遲至執行時實際使用時才進行,以減少啟動開銷。
適用對象
專為撰寫高效能裝置內核的 C++ 與 Python 擴充作者設計,他們希望為使用者提供 JIT 編譯體驗,而無需實作編譯與快取的底層細節。
特色亮點
- 多後端支援:統一的工作流程,適用於 NVIDIA CUDA 與 HUAWEI Ascend NPU。
- 分散式快取:支援透過 POSIX 相容檔案系統,在多個使用者與節點之間共享已編譯的內核。
- PyTorch 就緒:與 PyTorch 流無縫整合,並提供
get_jit()Python API。 - 編譯診斷:支援匯出 PTX/SASS(CUDA)或組合語言(Ascend)用於除錯與檢視。
- 編譯後鈎子:CUDA 後端支援在快取 CUBIN 檔案前執行自訂 Python 指令碼進行修改。
相關
- 專案
- 專案
- 專案
- 專案