CUDA 零拷贝 IPC
首先假设您在 cuda 上有一个 pytorch tensor,并且您希望在节点之间共享它。
好消息是,您可以使用 CUDA 零拷贝 IPC 在不复制数据的情况下完成此操作。
安装
使用此特性,确保满足以下要求:
# 安装具有 Gpu 支持的 pyarrow
conda install pyarrow "arrow-cpp-proc=*=cuda" -c conda-forge
## 使用如下测试安装
python -c "import pyarrow.cuda"
# 安装从 arrow 至 torchl 转译的 numba
pip install numba
## 使用如下测试安装
python -c "import numba.cuda"
# 如果 torch 不存在请先安装
pip install torch
## 使用如下测试安装
python -c "import torch; assert torch.cuda.is_available()"
发送数据
创建在进程间发送的 IPC 句柄,执行以下操作:
import torch
from dora.cuda import torch_to_ipc_buffer
torch_tensor = torch.tensor([1, 2, 3], dtype=torch.int64, device="cuda")
ipc_buffer, metadata = torch_to_ipc_buffer(torch_tensor)
node.send_output("latency", ipc_buffer, metadata)