| 1 |
1 |
|
# EveryCycle
|
| 2 |
2 |
|
|
| 3 |
|
- |
A Linux system service for heterogeneous GPU compute. `everycycled` owns the GPU fleet on a host, intermediates between the system and the silicon, and exposes a unified API to userspace clients — across vendors, generations, and the long tail of hardware whose vendors have moved on.
|
|
3 |
+ |
A Linux system service for heterogeneous GPU compute. `everycycled` owns the GPU fleet on a host, intermediates between the system and the silicon, and exposes a unified API to userspace clients, across vendors, generations, and the long tail of hardware whose vendors have moved on.
|
| 4 |
4 |
|
|
| 5 |
5 |
|
EveryCycle makes a box's mix of GPUs behave as one programmable resource. The first reference client is OpenAI-compatible LLM serving; other workloads (vision, scientific compute, batch ML pipelines) follow.
|
| 6 |
6 |
|
|
| 9 |
9 |
|
## Two co-equal goals
|
| 10 |
10 |
|
|
| 11 |
11 |
|
1. **The daemon and ecosystem.** A Linux system service (`everycycled`) plus its clients, libraries, and operator tools. MIT-licensed, distributed via standard distro packaging. Open and permissive on principle.
|
| 12 |
|
- |
2. **Reference appliances.** Specific hardware designs that ship pre-configured with EveryCycle — sold and supported as products. Hardware revenue funds the open-source software work.
|
|
12 |
+ |
2. **Reference appliances.** Specific hardware designs that ship pre-configured with EveryCycle, sold and supported as products. Hardware revenue funds the open-source software work.
|
| 13 |
13 |
|
|
| 14 |
14 |
|
## Wedge
|
| 15 |
15 |
|
|
| 20 |
20 |
|
|
| 21 |
21 |
|
EveryCycle is the GPU-compute analog of what PipeWire is to audio, NetworkManager is to networking, CUPS is to printing. A Linux system service that owns a device class and provides a stable API to userspace, replacing the current chaos in which every program directly drives the GPU via vendor SDKs.
|
| 22 |
22 |
|
|
| 23 |
|
- |
## Components
|
|
23 |
+ |
## Crates in this repo
|
|
24 |
+ |
|
|
25 |
+ |
Eight workspace members under `crates/`. None is published to crates.io: the unit of
|
|
26 |
+ |
publication is this repo, not the individual crates, so they version together and none
|
|
27 |
+ |
of them is a stable dependency surface for outside code.
|
|
28 |
+ |
|
|
29 |
+ |
| Crate | Role |
|
|
30 |
+ |
|---|---|
|
|
31 |
+ |
| `everycycle-runtime` | Inference runtime: model execution, heterogeneous layer placement, kernel dispatch |
|
|
32 |
+ |
| `everycycle-scheduler` | Continuous batching, paged kv-cache, admission control, speculative-decode coordination |
|
|
33 |
+ |
| `everycycle-orchestrator` | Multi-box control plane: capability map, request routing, fleet management |
|
|
34 |
+ |
| `everycycle-hal` | Hardware abstraction: device enumeration, topology, memory pools, IPC primitives, telemetry |
|
|
35 |
+ |
| `everycycle-api` | The stable client surface: request/event types, IPC framing, transport trait |
|
|
36 |
+ |
| `everycycle-tui` | Operator dashboard over structured telemetry |
|
|
37 |
+ |
| `everycycle-appraise` | Probe runner, canonical serializer, signer, and CLI for GPU appraisal reports |
|
|
38 |
+ |
| `everycycle-bmc-agent` | Agent for the OpenBMC fork on EveryCycle boxes: telemetry, fan curves, power capping |
|
|
39 |
+ |
|
|
40 |
+ |
## Planned components
|
|
41 |
+ |
|
|
42 |
+ |
The shape the above is being built toward. These do not exist yet.
|
| 24 |
43 |
|
|
| 25 |
44 |
|
| Binary | Role |
|
| 26 |
45 |
|
|---|---|
|
| 27 |
46 |
|
| `everycycled` | The system daemon. Audit, supervise, plan, dispatch. |
|
| 28 |
47 |
|
| `everycycle-cli` | Operator CLI |
|
| 29 |
|
- |
| `everycycle-tui` | Operator dashboard |
|
| 30 |
48 |
|
| `everycycle-serving` | OpenAI-compatible HTTP/SSE server (first-party client) |
|
| 31 |
|
- |
| `everycycle-exec-{cuda,rocm,cpu,vulkan}` | Executor modules — sidecars or in-process depending on libc constraints |
|
|
49 |
+ |
| `everycycle-exec-{cuda,rocm,cpu,vulkan}` | Executor modules; sidecars or in-process depending on libc constraints |
|
| 32 |
50 |
|
| `libeverycycle` / `everycycle-client` | Client SDK (C ABI; Rust crate; other bindings to follow) |
|
| 33 |
|
- |
| `everycycle-bmc-agent` | Separate binary for OpenBMC; structured telemetry |
|
| 34 |
51 |
|
|
| 35 |
52 |
|
## Platform
|
| 36 |
53 |
|
|
| 37 |
54 |
|
**Linux only by design.** macOS-native is not on the roadmap. Apple Silicon may eventually be supported via Asahi Linux as the project's GPU stack matures.
|
| 38 |
55 |
|
|
| 39 |
|
- |
**Pinned to Ubuntu LTS (24.04).** Ubuntu LTS is the single supported distro — the only target that gets formal support, the same distro MNW production servers run on. The codebase is generic Linux and should work elsewhere, but issues outside Ubuntu LTS are addressed best-effort. Executor isolation (in-process vs sidecar) is a per-executor choice driven by vendor SDK stability and crash blast-radius, not by libc compatibility.
|
|
56 |
+ |
**Pinned to Ubuntu LTS (24.04).** Ubuntu LTS is the single supported distro, the only target that gets formal support, the same distro MNW production servers run on. The codebase is generic Linux and should work elsewhere, but issues outside Ubuntu LTS are addressed best-effort. Executor isolation (in-process vs sidecar) is a per-executor choice driven by vendor SDK stability and crash blast-radius, not by libc compatibility.
|
| 40 |
57 |
|
|
| 41 |
58 |
|
## Building
|
| 42 |
59 |
|
|
| 54 |
71 |
|
|
| 55 |
72 |
|
## Status and contact
|
| 56 |
73 |
|
|
| 57 |
|
- |
Pre-public. The project is unlisted on SourceHut until milestone A1 runs. Documentation will be incomplete until then. If you have somehow found this and want to talk, the founder's contact is in the commit history.
|
|
74 |
+ |
Early. Pre-milestone-A1, and documentation will be incomplete until it runs.
|
|
75 |
+ |
|
|
76 |
+ |
The repo is the release: it is public and clonable at
|
|
77 |
+ |
[makenot.work/git/max/everycycle](https://makenot.work/git/max/everycycle), and there are
|
|
78 |
+ |
no crates.io releases to depend on. Take it by cloning it or as a git dependency.
|
|
79 |
+ |
|
|
80 |
+ |
If you want to talk, the founder's contact is in the commit history.
|