Rgpu:用于 PyTorch 和 CUDA 的远程 GPU 执行
Rgpu 是一个框架,使开发者能够在远程 NVIDIA 机器上运行 GPU 加速的工作负载,同时将应用程序逻辑保留在本地客户端。这允许用户即使在未安装 CUDA 的机器(如 macOS 设备)上,也能在远程硬件上执行 PyTorch 操作并持有张量。
两种执行路径:PyTorch 设备和 CUDA 垫片
Rgpu 提供了两种不同的方法,将远程 GPU 执行集成到工作流中:
- PyTorch 设备: 这是更简单的集成路径。它允许 PyTorch 程序选择使用
rgpu设备,使torch操作能够通过 TCP 执行。 - CUDA 垫片: 此路径专为现有的 Linux CUDA 程序(包括标准 CUDA PyTorch)设计。它为
libcuda、CUDA 运行时、cuBLAS、cuBLASLt 和 cuDNN 提供垫片,通过将调用重定向到远程服务器,使现有二进制文件无需修改即可运行。
实现与部署
Rgpu 采用客户端-服务器架构,其中 rgpu-run 启动器负责连接和隧道配置。
PyTorch 快速入门
要使用 PyTorch 设备,用户通过 pip install rgpu 安装库,并在创建张量时将设备指定为 rgpu:
import torch
import rgpu
x = torch.ones(4, device="rgpu")
print((x * 2).sum().item())
执行通过 rgpu-run 命令处理,该命令管理到远程主机的 SSH 隧道:
rgpu-run --host user@gpu-host --ssh-port 2222 -i ~/.ssh/gpu_key python smoke.py
安全注意事项
PyTorch 和 CUDA 垫片协议均不原生支持连接的身份验证或加密。为确保通信安全,rgpu-opserver 应保持默认的 localhost 绑定,所有流量应通过 SSH 隧道路由。
项目结构
Rgpu 仓库由几个功能组件组成:
| 组件 | 用途 |
|---|---|
client/ |
CUDA 客户端垫片和传输 |
server/ |
CUDA 服务器和调度 |
common/ |
共享协议和生成的 API 元数据 |
python/ |
PyTorch 设备和启动器 |
codegen/ |
CUDA 头文件解析器和源代码生成器 |
技术评论与社区反馈
虽然 Rgpu 提供了一种灵活的方式将硬件与应用程序解耦,但一些社区成员对性能开销提出了担忧。
这是毫无意义的,因为在这个层面进行抽象意味着系统中对停顿最不敏感的部分反而承受了最多的停顿。这就像把发动机的活塞放在五个街区之外,然后传输扭矩,而不是把整个发动机放在五个街区之外,只传输转向输入。
这一评论表明,通过在操作层面而非任务层面进行抽象,系统可能会为对停顿高度敏感的操作引入显著的延迟,从而可能限制其在高性能训练工作负载中的实用性,相比传统的远程执行方法。
Sources
相关
- 项目
- 项目
- 项目
- 项目
- 项目