lupinemachines/lupine

LUPINE is a GPU over IP bridge allowing GPUs on remote machines to be attached to CPU-only machines.

LUPINE – GPU-over-IP 桥接器

功能简介 – LUPINE 允许只有 CPU(无 GPU)的机器通过将 GPU 驱动程序调用通过网络转发到另一台实际拥有 GPU 的机器来运行基于 CUDA 的程序。远程 GPU 在本地表现为其驱动程序库(libcuda.so、libnvidia-ml.so 等)已安装在客户端上。

使用方法

  1. 在配备 GPU 的主机上运行服务器(Docker 镜像 lupine-server)。它监听 TCP 端口 14833,并通过 HTTP/2 RPC 接口暴露 GPU。
  2. 在仅 CPU 的主机上运行客户端(Docker 镜像 lupine-client)。设置环境变量 LUPINE_SERVER=<host>:14833。客户端预加载 LUPINE 垫片库,因此任何 CUDA 程序(例如 nvidia-smi、PyTorch、自定义内核)都会自动与远程 GPU 通信。
  3. 可选附加功能 – 启用跟踪(LUPINE_TRACE)、TLS(通过 HTTPS 代理前置服务器),或通过提供逗号分隔的 LUPINE_SERVER 端点列表实现跨多服务器的多 GPU。

关键技术要点

  • 仅转发驱动程序 – 只有底层驱动程序调用通过网络传输;应用程序仍然自带其 CUDA 运行时。
  • 垫片 – LUPINE 提供轻量级“垫片”库(libcuda.so.1、libnvidia-ml.so.1、NCCL、nvSHMEM),将驱动程序调用转换为 RPC。
  • 压缩与保持连接 – HTTP/2 主体使用 Zstd 压缩;TCP 保持连接(空闲 60 秒,探测 15 秒)防止空闲流超时。
  • 指标 – /metrics 端点暴露 Prometheus 兼容的 GPU 使用统计,无需额外监控代理。
  • 优雅关闭 – SIGTERM 排空正在进行的 CUDA 调用,并可选择运行通过 LUPINE_CHECKPOINT_LIBRARY 提供的检查点提供程序。
  • 多 GPU / 多服务器 – 来自多个服务器的设备呈现为单个序号列表;跨服务器 cuMemcpyPeer 通过客户端暂存实现。
  • 平台支持 – 预构建的客户端捆绑包适用于 Linux、macOS、Windows(amd64 和 arm64)。Linux 客户端针对 manylinux_2_28 ABI(glibc ≥ 2.28)。

典型工作流程

# GPU 主机
docker run --rm --gpus all -p 14833:14833 \
  ghcr.io/lupinemachines/lupine-server:cuda-13.3.1-ubuntu24.04

# 仅 CPU 主机 – 运行任何 CUDA 程序
docker run --rm -it -e LUPINE_SERVER=<gpu-host>:14833 \
  ghcr.io/lupinemachines/lupine-client:cuda-13.3.1-ubuntu24.04 nvidia-smi

您还可以构建基于 PyTorch 的客户端镜像(Dockerfile 见 README),并针对远程 GPU 运行小型训练任务(microgpt_train)。

适用对象 – 研究人员或工程师,他们可以访问位于独立数据中心或云虚拟机上的强大 GPU,但希望在轻量级仅 CPU 的工作站上进行开发,而无需在本地安装完整的 CUDA 驱动程序堆栈。

限制

  • 无内置身份验证;如果需要安全性,必须将服务器置于 TLS 终止代理之后。
  • 跨服务器点对点复制通过客户端暂存,增加了额外的主机内存流量。
  • 不再支持较旧的 Linux 发行版(CentOS 7、Ubuntu 18.04)。

了解更多 – 仓库包含有关检查点提供程序、跟踪以及如何在本地编译垫片的详细文档。Prometheus 指标可在 http://<server>:14833/metrics 获取。


以上所有信息均直接取自项目 README。

相关

  • 项目
  • 项目
  • 项目
  • Dispatch
  • 项目