Skip to main content

Starway UCX P2P communication lib.

Project description

Starway

Starway aims to be an ultra-fast communication library, which features:

  1. Zero Copy, supports sending from pointer and receiving into pre-allocated buffer.
  2. RDMA support, by utilizing OpenMPI/OpenUCX for transportation.
  3. Ease of use, generally should work out of the box, and don't require much configuration efforts.
  4. Full-duplex, asynchronous API.

Current Python alternatives are lacking core features:

  1. ZeroMQ, no support for RDMA.
  2. MPI, hard to use, hard to setup environment properly.

Installation

Starway depends on OpenUCX, which must be linked dynamically. There are two options:

  1. Install OpenUCX system-wide, or whatever method you like as long as it can be found dynamically.
  2. Install libucx-cu12 wheel package, which contains libucx.so files that can be loaded by Starway during initialization.

We don't add libucx-cu12 as Starway Python dependency by default, but generally you can install it on your cluster machines as a fallback option: when libucx cannot be found in system, it would look for wheel installation.

You can use environment variable to control System/Wheel preference:

import os
os.environ["STARWAY_USE_SYSTEM_UCX"] = "false" # defaults to true
import starway  # now we will use libucx-cu12 pypi wheel package, while falling back to system if not found

Full-Duplex Communication

Starway now supports full-duplex communication, allowing for simultaneous, two-way data exchange between the client and server. This feature significantly improves the library's responsiveness and efficiency in handling real-time data streams.

Usage

Here's an example of how to use the full-duplex communication feature:

import asyncio
import time
import numpy as np
from starway import Client, Server

async def tester():
    server = Server("127.0.0.1", 19198)
    client = Client("127.0.0.1", 19198)
    
    # Client to Server
    send_buf_c2s = np.arange(10, dtype=np.uint8)
    recv_buf_c2s = np.empty(10, dtype=np.uint8)
    
    # Server to Client
    send_buf_s2c = np.arange(20, dtype=np.uint8)
    recv_buf_s2c = np.empty(10, dtype=np.uint8)

    # Wait for client to connect
    while not (clients := server.list_clients()):
        time.sleep(0.1)
    client_ep = clients[0]

    # Perform concurrent send and receive
    client_send_future = client.asend(send_buf_c2s, tag=1)
    server_recv_future = server.arecv(recv_buf_c2s, tag=1, tag_mask=0xFFFF)
    server_send_future = server.asend(client_ep, send_buf_s2c, tag=2)
    client_recv_future = client.arecv(recv_buf_s2c, tag=2, tag_mask=0xFFFF)

    await asyncio.gather(
        client_send_future,
        server_recv_future,
        server_send_future,
        client_recv_future
    )

    assert np.allclose(send_buf_c2s, recv_buf_c2s)
    assert np.allclose(send_buf_s2c, recv_buf_s2c)
    
asyncio.run(tester())

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

starway-0.3.0.tar.gz (39.0 kB view details)

Uploaded Source

Built Distributions

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

starway-0.3.0-cp313-cp313-manylinux_2_34_x86_64.whl (84.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

starway-0.3.0-cp312-cp312-manylinux_2_34_x86_64.whl (84.5 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

starway-0.3.0-cp311-cp311-manylinux_2_34_x86_64.whl (84.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

starway-0.3.0-cp310-cp310-manylinux_2_34_x86_64.whl (84.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

File details

Details for the file starway-0.3.0.tar.gz.

File metadata

  • Download URL: starway-0.3.0.tar.gz
  • Upload date:
  • Size: 39.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for starway-0.3.0.tar.gz
Algorithm Hash digest
SHA256 52aeb442e1296930cbb6656d27cd33c910ae486a36735378a980ed1bf2cfe2ba
MD5 5d7ceda55b72a777ebbd563eafba0a42
BLAKE2b-256 acbcbf46509770d731b6d3e3935a1f3b50c8894acfccd0ff5021838b2246f468

See more details on using hashes here.

Provenance

The following attestation bundles were made for starway-0.3.0.tar.gz:

Publisher: wheels.yml on Clouder0/starway

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file starway-0.3.0-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for starway-0.3.0-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1d767b0ff4901eff773b9ae190812ef32e7b4d1c15fea5388f914711f644618b
MD5 fad6f78b0ed9be7029188b79b09ba4af
BLAKE2b-256 d5eb169507a9f854db214c2b26b6748f443755792235cfb786315ec35c6d65be

See more details on using hashes here.

Provenance

The following attestation bundles were made for starway-0.3.0-cp313-cp313-manylinux_2_34_x86_64.whl:

Publisher: wheels.yml on Clouder0/starway

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file starway-0.3.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for starway-0.3.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 e005526b30518e6d6561f5e99bd18750fa89e12b0c42a595e39977cdbab350d9
MD5 0c880720dc2c310eb9946817fdee9d98
BLAKE2b-256 9012895b0932f25eb562d05bbb295e70c812f65b715801cdc8f6d5c62a5d965a

See more details on using hashes here.

Provenance

The following attestation bundles were made for starway-0.3.0-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: wheels.yml on Clouder0/starway

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file starway-0.3.0-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for starway-0.3.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 b438f07ec9296550d5797158c15bf2b79361557002d65fdc3ebb552ac46aa78c
MD5 665ae9f851a80e139be04f4be2b0c3db
BLAKE2b-256 da132798f7703165e428fe0ce5b837806aeb7b247b2d351df90087144c56fdef

See more details on using hashes here.

Provenance

The following attestation bundles were made for starway-0.3.0-cp311-cp311-manylinux_2_34_x86_64.whl:

Publisher: wheels.yml on Clouder0/starway

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file starway-0.3.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for starway-0.3.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 0402ed25613da715daab6be507f363412ee066978cd6cf4cba39512bacce8be3
MD5 170b3db757f2ffae1feb64ae74727807
BLAKE2b-256 f77f19dc24241e521c8b5b0a69a25e2e8c95c000a3dbd567df950e7302f3909a

See more details on using hashes here.

Provenance

The following attestation bundles were made for starway-0.3.0-cp310-cp310-manylinux_2_34_x86_64.whl:

Publisher: wheels.yml on Clouder0/starway

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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