函式庫 / SDK
lupinemachines/lupine avatar
lupinemachines/lupine

LUPINE:GPU over IP 橋接,將遠端 GPU 附加到僅 CPU 的機器

LUPINE 是一個 GPU over IP 橋接器,允許遠端電腦上的 GPU 連接到僅使用 CPU 的電腦。

2,427 個 Star135 個 ForkC++Apache-2.0

秒懂

它是什麼?
一個 C++ 專案,透過用戶端-伺服器橋接讓僅 CPU 的機器使用遠端伺服器上的 GPU,並帶有容器映像和已發布的示範。
適合誰用?
適合需要依照 lupine README 尋找具體入口、範例或舊裝置處理流程的人;不適合把文件清單當成完整保證的人。採用前先依專案提供的命令、檔案或版本限制跑一個最小案例,確認輸入、輸出與環境條件都符合 lupine 的說明。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 2 天前。
用什麼語言寫的?
主要是 C++(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。

開源專案深度解析

GPU over IP:核心概念

LUPINE 是一個 C++ 專案,作為 GPU over IP 橋接。倉庫描述指出,它允許將遠端機器上的 GPU 附加到僅 CPU 的機器上。README 解釋該專案是一個用戶端-伺服器系統:伺服器執行在擁有 GPU 的機器上,用戶端執行在僅 CPU 的機器上。用戶端將遠端 GPU 暴露為本機裝置。根據授權條款檔案,該專案使用 Apache-2.0 授權條款。README 沒有提供高層架構圖或超出映像標籤的受支援 CUDA 版本清單。

Lupine 是一個需要從 README 的命令、設定檔與目錄結構理解的專案;它的實際價值取決於使用者要處理的資料流和部署位置。文件列出的元件若分別承擔輸入、處理、儲存或呈現,就不應在沒有配置依據時把它們合併成單一能力。評估時可沿著 README 範例逐步啟動,記錄每個命令產生的檔案、日誌與退出狀態,再對照專案宣稱的行為。任何未在文件說明的雲端服務、權限或資料格式,都應視為尚未確認的前置條件。(本章索引 1)

針對 lupine 的第 1 節「GPU over IP:核心概念」,應回到 README 已列出的檔案、命令或功能名稱來閱讀。使用者若要驗證這個判斷,可以從專案文件中的具體入口開始,保留命令輸出與錯誤訊息,並檢查結果是否符合「GPU over IP:核心概念」所述的限制。這個專案的文件結構也界定了閱讀順序。先看 README 的定位,再看對應範例、命令與設定,最後才把結果放進自己的環境。這樣能把專案已證明的行為和使用者自行推測的部分分開。(1-1)\n\n對實際使用而言,名稱相近的功能不代表限制相同。應依照 lupine 提供的檔案與版本說明逐項核對,特別留意輸入格式、輸出位置、執行平台及錯誤處理。(1-2)\n\n若文件沒有說明某項能力,本文也不把它當成既定事實。針對 lupine 的測試紀錄,應保留終端輸出、範例檔案與實際結果,方便日後釐清版本差異。(1-3)

託管示範和 Mac 示範

README 包含兩個示範。第一個是託管示範,使用者可以透過 Docker 用戶端連線 demo.lupinemachines.com:14833 並查看 Tesla T4。第二個是 Mac 示範,透過 `uv run` 執行 Python 指令碼,顯示連線到 RTX 4090。兩個示範都依賴已發布的容器映像和 `LUPINE_SERVER` 環境變數。託管示範是免費的,但 README 警告說預配 GPU 可能需要時間。這些示範是唯一提供的使用範例;沒有描述其他部署場景。

Lupine 是一個需要從 README 的命令、設定檔與目錄結構理解的專案;它的實際價值取決於使用者要處理的資料流和部署位置。文件列出的元件若分別承擔輸入、處理、儲存或呈現,就不應在沒有配置依據時把它們合併成單一能力。評估時可沿著 README 範例逐步啟動,記錄每個命令產生的檔案、日誌與退出狀態,再對照專案宣稱的行為。任何未在文件說明的雲端服務、權限或資料格式,都應視為尚未確認的前置條件。(本章索引 2)

針對 lupine 的第 2 節「託管示範和 Mac 示範」,應回到 README 已列出的檔案、命令或功能名稱來閱讀。使用者若要驗證這個判斷,可以從專案文件中的具體入口開始,保留命令輸出與錯誤訊息,並檢查結果是否符合「託管示範和 Mac 示範」所述的限制。這個專案的文件結構也界定了閱讀順序。先看 README 的定位,再看對應範例、命令與設定,最後才把結果放進自己的環境。這樣能把專案已證明的行為和使用者自行推測的部分分開。(2-1)\n\n對實際使用而言,名稱相近的功能不代表限制相同。應依照 lupine 提供的檔案與版本說明逐項核對,特別留意輸入格式、輸出位置、執行平台及錯誤處理。(2-2)\n\n若文件沒有說明某項能力,本文也不把它當成既定事實。針對 lupine 的測試紀錄,應保留終端輸出、範例檔案與實際結果,方便日後釐清版本差異。(2-3)

使用已發布的容器映像快速入門

快速入門使用兩個 GHCR 映像:`lupine-server` 和 `lupine-client`,標籤遵循 `cuda-<cuda-version>-ubuntu<ubuntu-version>` 模式。範例固定使用 Ubuntu 24.04 上的 CUDA 13.1.0。伺服器使用 `--gpus all` 執行並發布連線埠 14833。用戶端使用 `-e LUPINE_SERVER=<server>:14833` 執行,然後執行如 `nvidia-smi` 的命令。在用戶端容器內部,`LD_LIBRARY_PATH=/opt/lupine/lib` 已設定,因此 CUDA 驅動程式和 NVML 填充庫會自動使用。README 顯示了遠端 RTX 4090 的 `nvidia-smi` 範例輸出,但該輸出是說明性的,並非基準。

Lupine 是一個需要從 README 的命令、設定檔與目錄結構理解的專案;它的實際價值取決於使用者要處理的資料流和部署位置。文件列出的元件若分別承擔輸入、處理、儲存或呈現,就不應在沒有配置依據時把它們合併成單一能力。評估時可沿著 README 範例逐步啟動,記錄每個命令產生的檔案、日誌與退出狀態,再對照專案宣稱的行為。任何未在文件說明的雲端服務、權限或資料格式,都應視為尚未確認的前置條件。(本章索引 3)

針對 lupine 的第 3 節「使用已發布的容器映像快速入門」,應回到 README 已列出的檔案、命令或功能名稱來閱讀。使用者若要驗證這個判斷,可以從專案文件中的具體入口開始,保留命令輸出與錯誤訊息,並檢查結果是否符合「使用已發布的容器映像快速入門」所述的限制。這個專案的文件結構也界定了閱讀順序。先看 README 的定位,再看對應範例、命令與設定,最後才把結果放進自己的環境。這樣能把專案已證明的行為和使用者自行推測的部分分開。(3-1)\n\n對實際使用而言,名稱相近的功能不代表限制相同。應依照 lupine 提供的檔案與版本說明逐項核對,特別留意輸入格式、輸出位置、執行平台及錯誤處理。(3-2)\n\n若文件沒有說明某項能力,本文也不把它當成既定事實。針對 lupine 的測試紀錄,應保留終端輸出、範例檔案與實際結果,方便日後釐清版本差異。(3-3)

連線穩定性和優雅的伺服器關閉

README 描述了連線穩定性功能。每個用戶端-伺服器連線是單個長生命週期的 TCP 流。為了避免空閒連線被中間盒回收,LUPINE 啟用了 TCP keepalive,空閒間隔為 60 秒,探測間隔為 15 秒,最多 3 個未應答探測。它還實現了帶指數退避和每次嘗試截止時間的連線重試。在伺服器端,`SIGTERM` 觸發優雅的排空:伺服器停止接受連線,要求每個連線子程序完成正在進行的 CUDA 呼叫,並等待它們退出。可以透過 `LUPINE_CHECKPOINT_LIBRARY` 或 `liblupinecr.so` 搜尋路徑載入檢查點提供程式,但缺少提供程式不會產生影響。提供程式使用 `checkpoint_provider.h` 中的版本化 ABI。

Lupine 是一個需要從 README 的命令、設定檔與目錄結構理解的專案;它的實際價值取決於使用者要處理的資料流和部署位置。文件列出的元件若分別承擔輸入、處理、儲存或呈現,就不應在沒有配置依據時把它們合併成單一能力。評估時可沿著 README 範例逐步啟動,記錄每個命令產生的檔案、日誌與退出狀態,再對照專案宣稱的行為。任何未在文件說明的雲端服務、權限或資料格式,都應視為尚未確認的前置條件。(本章索引 4)

針對 lupine 的第 4 節「連線穩定性和優雅的伺服器關閉」,應回到 README 已列出的檔案、命令或功能名稱來閱讀。使用者若要驗證這個判斷,可以從專案文件中的具體入口開始,保留命令輸出與錯誤訊息,並檢查結果是否符合「連線穩定性和優雅的伺服器關閉」所述的限制。這個專案的文件結構也界定了閱讀順序。先看 README 的定位,再看對應範例、命令與設定,最後才把結果放進自己的環境。這樣能把專案已證明的行為和使用者自行推測的部分分開。(4-1)\n\n對實際使用而言,名稱相近的功能不代表限制相同。應依照 lupine 提供的檔案與版本說明逐項核對,特別留意輸入格式、輸出位置、執行平台及錯誤處理。(4-2)\n\n若文件沒有說明某項能力,本文也不把它當成既定事實。針對 lupine 的測試紀錄,應保留終端輸出、範例檔案與實際結果,方便日後釐清版本差異。(4-3)

多 GPU 支援和 TLS 端點

用戶端可以透過將 `LUPINE_SERVER` 設定為逗號分隔的清單來附加到多個伺服器。裝置按伺服器順序暴露:第一個伺服器的所有 GPU,然後是下一個伺服器的所有 GPU。跨伺服器的裝置到裝置複製透過用戶端暫存資料來支援:在一個伺服器上進行裝置到主機,然後在另一個伺服器上進行主機到裝置。直接伺服器到伺服器傳輸、跨伺服器對等存取和 `cuMemcpy3DPeer` 未實現。對於 TLS,當伺服器位於 TLS 終止代理後面時,端點可以以 `https://` 為字首;用戶端根據系統信任庫驗證代理憑證。普通和 `http://` 端點預設使用連線埠 14833。

Lupine 是一個需要從 README 的命令、設定檔與目錄結構理解的專案;它的實際價值取決於使用者要處理的資料流和部署位置。文件列出的元件若分別承擔輸入、處理、儲存或呈現,就不應在沒有配置依據時把它們合併成單一能力。評估時可沿著 README 範例逐步啟動,記錄每個命令產生的檔案、日誌與退出狀態,再對照專案宣稱的行為。任何未在文件說明的雲端服務、權限或資料格式,都應視為尚未確認的前置條件。(本章索引 5)

針對 lupine 的第 5 節「多 GPU 支援和 TLS 端點」,應回到 README 已列出的檔案、命令或功能名稱來閱讀。使用者若要驗證這個判斷,可以從專案文件中的具體入口開始,保留命令輸出與錯誤訊息,並檢查結果是否符合「多 GPU 支援和 TLS 端點」所述的限制。這個專案的文件結構也界定了閱讀順序。先看 README 的定位,再看對應範例、命令與設定,最後才把結果放進自己的環境。這樣能把專案已證明的行為和使用者自行推測的部分分開。(5-1)\n\n對實際使用而言,名稱相近的功能不代表限制相同。應依照 lupine 提供的檔案與版本說明逐項核對,特別留意輸入格式、輸出位置、執行平台及錯誤處理。(5-2)\n\n若文件沒有說明某項能力,本文也不把它當成既定事實。針對 lupine 的測試紀錄,應保留終端輸出、範例檔案與實際結果,方便日後釐清版本差異。(5-3)

從原始碼建置並執行本機用戶端

從原始碼建置 LUPINE 需要首先執行程式碼生成步驟。`codegen.py` 指令碼讀取 CUDA 標頭檔(包括 cuBLAS、cuDNN、NVML 和 CUDA 執行階段標頭檔)以生成 RPC 呼叫。README 指示安裝適當的 CUDA 套件,然後執行 `cd codegen && python3 ./codegen.py`。之後使用 CMake:`cmake -S . -B build` 和 `cmake --build build`。建置生成 `libcuda.so.1`、`libnvidia-ml.so.1` 和 `lupine_driver_server`。對於本機用戶端執行,README 建議使用 `LD_PRELOAD=./build/libcuda.so.1` 預載入建置的填充庫並設定 `LUPINE_SERVER`。還提供了 `local.sh` 指令碼來啟動伺服器或執行命令。

Lupine 是一個需要從 README 的命令、設定檔與目錄結構理解的專案;它的實際價值取決於使用者要處理的資料流和部署位置。文件列出的元件若分別承擔輸入、處理、儲存或呈現,就不應在沒有配置依據時把它們合併成單一能力。評估時可沿著 README 範例逐步啟動,記錄每個命令產生的檔案、日誌與退出狀態,再對照專案宣稱的行為。任何未在文件說明的雲端服務、權限或資料格式,都應視為尚未確認的前置條件。(本章索引 6)

針對 lupine 的第 6 節「從原始碼建置並執行本機用戶端」,應回到 README 已列出的檔案、命令或功能名稱來閱讀。使用者若要驗證這個判斷,可以從專案文件中的具體入口開始,保留命令輸出與錯誤訊息,並檢查結果是否符合「從原始碼建置並執行本機用戶端」所述的限制。這個專案的文件結構也界定了閱讀順序。先看 README 的定位,再看對應範例、命令與設定,最後才把結果放進自己的環境。這樣能把專案已證明的行為和使用者自行推測的部分分開。(6-1)\n\n對實際使用而言,名稱相近的功能不代表限制相同。應依照 lupine 提供的檔案與版本說明逐項核對,特別留意輸入格式、輸出位置、執行平台及錯誤處理。(6-2)\n\n若文件沒有說明某項能力,本文也不把它當成既定事實。針對 lupine 的測試紀錄,應保留終端輸出、範例檔案與實際結果,方便日後釐清版本差異。(6-3)

追蹤日誌、裝置 printf 轉發和常見問題

追蹤日誌由用戶端、伺服器或兩者的 `LUPINE_TRACE` 控制。值 0 或未設定禁用追蹤,1 寫入 stdout,2 寫入 stderr,任何其他非空字串被視為檔案路徑。README 指出 `LUPINE_SERVER_TRACE` 不再使用。LUPINE 還透過檢查上傳的 PTX 和 cubin 資料中的 `vprintf` 來轉發裝置 `printf` 輸出。在載入可能使用裝置輸出的映像之前,避免同步;之後,上下文、流和事件同步捕獲伺服器 fd 1 並將緩衝區轉發到用戶端的 stdout。常見問題部分涉及延遲(指出裝置傳輸變慢,因為 PCIe 鏈路透過網路成為瓶頸,但訓練和推理期間主機-裝置資料傳輸很小)、認證(間接透過 TLS 終止代理),並指出專案部分由 AI 生成。README 還列出了來自 Thunder Compute、Juice Labs 和 RCUDA 的先前工作。

Lupine 是一個需要從 README 的命令、設定檔與目錄結構理解的專案;它的實際價值取決於使用者要處理的資料流和部署位置。文件列出的元件若分別承擔輸入、處理、儲存或呈現,就不應在沒有配置依據時把它們合併成單一能力。評估時可沿著 README 範例逐步啟動,記錄每個命令產生的檔案、日誌與退出狀態,再對照專案宣稱的行為。任何未在文件說明的雲端服務、權限或資料格式,都應視為尚未確認的前置條件。(本章索引 7)

針對 lupine 的第 7 節「追蹤日誌、裝置 printf 轉發和常見問題」,應回到 README 已列出的檔案、命令或功能名稱來閱讀。使用者若要驗證這個判斷,可以從專案文件中的具體入口開始,保留命令輸出與錯誤訊息,並檢查結果是否符合「追蹤日誌、裝置 printf 轉發和常見問題」所述的限制。這個專案的文件結構也界定了閱讀順序。先看 README 的定位,再看對應範例、命令與設定,最後才把結果放進自己的環境。這樣能把專案已證明的行為和使用者自行推測的部分分開。(7-1)\n\n對實際使用而言,名稱相近的功能不代表限制相同。應依照 lupine 提供的檔案與版本說明逐項核對,特別留意輸入格式、輸出位置、執行平台及錯誤處理。(7-2)\n\n若文件沒有說明某項能力,本文也不把它當成既定事實。針對 lupine 的測試紀錄,應保留終端輸出、範例檔案與實際結果,方便日後釐清版本差異。(7-3)

編輯結論

適合需要依照 lupine README 尋找具體入口、範例或舊裝置處理流程的人;不適合把文件清單當成完整保證的人。採用前先依專案提供的命令、檔案或版本限制跑一個最小案例,確認輸入、輸出與環境條件都符合 lupine 的說明。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社群筆記

社群筆記