Skip to main content

DLSlime Transfer Engine

Project description

DLSlime Transfer Engine

A Peer to Peer RDMA Transfer Engine.

Usage

RDMA READ

devices = available_nic()
assert devices, "No RDMA devices."

# Initialize RDMA endpoint
initiator = RDMAEndpoint(device_name=devices[0], ib_port=1, link_type="RoCE")
# Register local GPU memory with RDMA subsystem
local_tensor = torch.tensor(...)
initiator.register_memory_region("buffer", local_tensor...)

# Initialize target endpoint on different NIC
target = RDMAEndpoint(device_name=devices[-1], ib_port=1, link_type="RoCE")
# Register target's GPU memory
remote_tensor = torch.tensor(...)
target.register_memory_region("buffer", remote_tensor...)

# Establish bidirectional RDMA connection:
# 1. Target connects to initiator's endpoint information
# 2. Initiator connects to target's endpoint information
# Note: Real-world scenarios typically use out-of-band exchange (e.g., via TCP)
target.connect_to(initiator.local_endpoint_info)
initiator.connect_to(target.local_endpoint_info)

# Execute asynchronous batch read operation:
asyncio.run(initiator.async_read_batch("buffer", [0], [8], 8))

SendRecv

Sender

# RDMA init and RDMA Connect just like RDMA Read
...

# RDMA Send
ones = torch.ones([16], dtype=torch.uint8)
endpoint.register_memory_region("buffer", ones.data_ptr(), 16)
asyncio.run(endpoint.send_async("buffer", 0, 8))

Receiver

# RDMA init and RDMA Connect just like RDMA Read
...

# RDMA Recv
zeros = torch.zeros([16], dtype=torch.uint8)
endpoint.register_memory_region("buffer", zeros.data_ptr(), 16)
asyncio.run(endpoint.recv_async("buffer", 8, 8))

Build

# on CentOS
sudo yum install cppzmq-devel gflags-devel  cmake

# on Ubuntu
sudo apt install libzmq-dev libgflags-dev cmake

# build from source
mkdir build; cd build
cmake -DBUILD_BENCH=ON -DBUILD_PYTHON=ON ..; make

Benchmark

# Target
./bench/transfer_bench                \
  --remote-endpoint=10.130.8.138:8000 \
  --local-endpoint=10.130.8.139:8000  \
  --device-name="mlx5_bond_0"         \
  --mode target                       \
  --block-size=2048000                \
  --batch-size=160

# Initiator
./bench/transfer_bench                \
  --remote-endpoint=10.130.8.139:8000 \
  --local-endpoint=10.130.8.138:8000  \
  --device-name="mlx5_bond_0"         \
  --mode initiator                    \
  --block-size=16384                  \
  --batch-size=16                     \
  --duration 10

Cross node performance

  • H800 with NIC ("mlx5_bond_0"), RoCE v2.
Batch Size Block Size (Bytes) Total Trips Total Transferred (MiB) Duration (s) Average Latency (ms/trip) Throughput (MiB/s)
160 8,192 59,391 74,238 10.0001 0.168377 7,423.8
160 16,384 51,144 127,860 10.0002 0.195530 12,785.8
160 32,768 36,614 183,070 10.0002 0.273124 18,306.7
160 65,536 21,021 210,210 10.0003 0.475729 21,020.4
160 128,000 11,419 223,027 10.0006 0.875789 22,301.3
160 256,000 5,839 228,085 10.0015 1.712880 22,805.2
160 512,000 2,956 230,937 10.0010 3.383300 23,091.3
160 1,024,000 1,486 232,187 10.0006 6.729860 23,217.4
160 2,048,000 742 231,875 10.0010 13.478400 23,185.2

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dlslime-0.0.1.post5.tar.gz (162.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dlslime-0.0.1.post5-cp312-cp312-manylinux2014_x86_64.whl (276.0 kB view details)

Uploaded CPython 3.12

File details

Details for the file dlslime-0.0.1.post5.tar.gz.

File metadata

  • Download URL: dlslime-0.0.1.post5.tar.gz
  • Upload date:
  • Size: 162.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for dlslime-0.0.1.post5.tar.gz
Algorithm Hash digest
SHA256 1a4ddc51f7c3d1957d6e0f00fbe5621c4bbf54807366420bbd0235da2c3cc643
MD5 ee535c92577dd0e52d48ccb7792f3304
BLAKE2b-256 dc97b3f751c44d4473ada1d97f59d9b57a40dbfb1ff8603152178a28364238c9

See more details on using hashes here.

File details

Details for the file dlslime-0.0.1.post5-cp312-cp312-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for dlslime-0.0.1.post5-cp312-cp312-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9cb4ac762a6dd23a2ef91e4d3f1aa3d829e16c877dc07c901a8f66eadd76c678
MD5 de45fdd0b698637138b8617f3eeab547
BLAKE2b-256 0b3533a5ba9b63d9eebb2793fdf55e3b4a53c75250ab4d0e435a83c4093ac51d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page