跳转至

分布式 AI 系统的通信骨干

Actor 运行时。流式优先。零依赖。内置发现。


核心特性

构建分布式 AI 系统所需的一切,零外部依赖

🚀

零外部依赖

纯 Rust + Tokio 实现,无需 etcd、NATS 或 Consul。随处部署,占用资源极少。

🔍

SWIM 协议发现

内置基于 Gossip 的节点发现和故障检测。节点自动相互发现并组建集群。

🌐

位置透明

ActorRef 支持统一访问本地和远程 Actor,无论 Actor 在哪里运行,API 保持一致。

🔄

流式消息

原生支持流式请求和响应,非常适合 LLM Token 生成和实时数据处理。

🐍

Python 优先

通过 PyO3 提供完整的 Python API。使用 @remote 装饰器将任何类转换为分布式 Actor。

高性能

基于 Tokio 异步运行时和 HTTP/2 传输。高效处理数千个并发 Actor。

快速开始

1

安装 Pulsing

# Install from source
pip install maturin
maturin develop

# Or using uv
uv pip install -e .
2

创建你的第一个 Actor

import pulsing as pul

@pul.remote
class Calculator:
    def __init__(self, initial: int = 0):
        self.value = initial

    def add(self, n: int) -> int:
        self.value += n
        return self.value

    def get(self) -> int:
        return self.value
3

运行它

import asyncio

async def main():
    await pul.init()

    calc = await Calculator.spawn(initial=100)

    result = await calc.add(50)   # 150
    result = await calc.add(25)   # 175
    value = await calc.get()      # 175

    print(f"Final value: {value}")
    await pul.shutdown()

asyncio.run(main())

性能表现

为高吞吐量分布式计算而生

100K+
消息/秒 (本地)
<1ms
本地延迟 (P99)
0
外部依赖
~10MB
内存占用

* 基准测试在 Apple M2 MacBook Air 上进行。结果可能因工作负载和硬件而异。

应用场景

🤖

LLM 推理服务

构建可扩展的 LLM 推理后端,支持流式 Token 生成。原生集成 Transformers、vLLM 和 MLX。

🔀

增强 Ray 通信

为 Ray Actor 增加流式、发现和跨集群通信能力。Ray 负责调度,Pulsing 负责通信。

☸️

Kubernetes 原生

专为云原生部署设计。服务发现与 K8s Service IP 和滚动更新无缝配合。

为什么选择 Pulsing?

Pulsing 旨在填补重量级分布式系统(如 Ray)和简单异步编程之间的空白。 它提供了恰到好处的基础设施来构建分布式 AI 应用,而无需复杂的外部协调服务。 Actor 模型让分布式状态推理变得简单,而 SWIM 协议确保了自动的集群管理。

学习 Actor 模型 →

位置透明的消息传递

无需知道 Actor 的物理位置即可发送消息。 Pulsing 使用高效的 HTTP/2 传输自动在集群中路由消息。

Actor 可以是本地或远程的 - 你的代码保持不变。从单节点扩展到分布式部署,无需更改任何应用逻辑。

了解更多 →
# Node 1 - Start seed node with public actor
config = SystemConfig.with_addr("0.0.0.0:8000")
system = await create_actor_system(config)
await system.spawn(Worker(), "worker", public=True)

# Node 2 - Find and use remote actor
config = SystemConfig.with_addr("0.0.0.0:8001") \
    .with_seeds(["192.168.1.1:8000"])
system = await create_actor_system(config)

worker = await system.find("worker")
result = await worker.process(data)  # Same API!

自动集群发现

内置 SWIM 协议实现自动节点发现和故障检测。 无需外部协调服务 - 节点自动相互发现并组建集群。

基于 Gossip 的协议以最小的网络开销确保集群一致性。 节点优雅地加入和离开,自动进行状态协调。

了解更多 →
# Kubernetes deployment - just configure Service IP
config = SystemConfig.with_addr("0.0.0.0:8080") \
    .with_seeds(["actor-cluster.svc:8080"])

# Nodes automatically discover each other
# via K8s load balancing + SWIM protocol
system = await create_actor_system(config)

# Monitor cluster health
members = await system.get_members()
print(f"Cluster size: {len(members)}")

LLM 推理就绪

原生流式支持逐 Token 生成。内置 OpenAI 兼容的 API 路由器, 与现有工具无缝集成。

集成流行框架,包括 Transformers、vLLM 和 MLX(用于 Apple Silicon)。 一条命令即可部署生产级 LLM 服务。

了解更多 →
# Start OpenAI-compatible Router
pulsing actor pulsing.serving.Router \
    --addr 0.0.0.0:8000 \
    --http_port 8080 --model_name my-llm

# Start vLLM Worker
pulsing actor pulsing.serving.VllmWorker \
    --model Qwen/Qwen2.5-0.5B \
    --addr 0.0.0.0:8001 --seeds 127.0.0.1:8000

# Test with curl
curl http://localhost:8080/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "my-llm", "messages": [...]}'

加入社区

Pulsing 是开源的、社区驱动的项目。欢迎参与!