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.2.5.tar.gz (37.9 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.2.5-cp313-cp313-manylinux_2_34_x86_64.whl (83.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.34+ x86-64

starway-0.2.5-cp312-cp312-manylinux_2_34_x86_64.whl (83.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

starway-0.2.5-cp311-cp311-manylinux_2_34_x86_64.whl (83.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

starway-0.2.5-cp310-cp310-manylinux_2_34_x86_64.whl (84.2 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

File details

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

File metadata

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

File hashes

Hashes for starway-0.2.5.tar.gz
Algorithm Hash digest
SHA256 7a0028ffe5ba7597a76900dbf6e858423e0c4568995d1ead03613f3ae9cad655
MD5 32139b0160a9c5f8ba8c559023520115
BLAKE2b-256 e6cd89cc91816bd231ad3199df86076f6bdfef6dd084de391dd6fea3a5eb5d23

See more details on using hashes here.

Provenance

The following attestation bundles were made for starway-0.2.5.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.2.5-cp313-cp313-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for starway-0.2.5-cp313-cp313-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 a9ee0cc02278dfcfe9cd78ab0c11208b43f628d955ee270c76bd29d834f82a34
MD5 b7ab537beda21cebe4ef09c92cc6c3ed
BLAKE2b-256 c841177ed56a725f9a973ab95e2b084cd942e91fe6ab86447a8678fb6b802b0e

See more details on using hashes here.

Provenance

The following attestation bundles were made for starway-0.2.5-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.2.5-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for starway-0.2.5-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 442e97ac21b9e8b5af5016830cb4c24f11aeb9fe84ea42a9872953abf96d27a8
MD5 abf31b8fb4828a2ef7dac73086c64eeb
BLAKE2b-256 89c6063cacb655ee1b0736faf9010108e2d1ac6c7b1f363e5164053c42cac58f

See more details on using hashes here.

Provenance

The following attestation bundles were made for starway-0.2.5-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.2.5-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for starway-0.2.5-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 3a219136f6741bfa9560ae13193de887648e21bb86095c64bf49cd2fe1133cfe
MD5 a7e02f5176e2f2c014e9df1dae428ff0
BLAKE2b-256 0e9b485bd26e6ef7c41106555db2005cf1b5e45c9782e3bf4b0af9c5791e5d00

See more details on using hashes here.

Provenance

The following attestation bundles were made for starway-0.2.5-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.2.5-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for starway-0.2.5-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 a1e775ebd79e299d445eb6233c4c564403874ba53a440a8a4d3453d013c448c6
MD5 4c7e53a3dc7a4fc681eb42aae843c26e
BLAKE2b-256 3c19cb354124d12b8197d103cc91b190198d06c610ac345302c5eb04177f0092

See more details on using hashes here.

Provenance

The following attestation bundles were made for starway-0.2.5-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