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 指令碼進行修改。

相關

  • 專案
  • 專案
  • 專案
  • 專案