You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+26-46Lines changed: 26 additions & 46 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,8 +1,6 @@
1
1
## Contributing Guidelines
2
2
3
-
Thank you for your interest in contributing to llm-d Fast Model Actuation (FMA). Community involvement is highly valued and crucial for the project's growth and success. The FMA project accepts contributions via GitHub pull requests. This outlines the process to help get your contribution accepted.
4
-
5
-
To ensure a clear direction and cohesive vision for the project, the project leads have the final decision on all contributions. However, these guidelines outline how you can contribute effectively to FMA.
3
+
FMA is currently developed by a small team in a focused development spike. We welcome contributions that align with the project's goals. The FMA project accepts contributions via GitHub pull requests.
6
4
7
5
## How You Can Contribute
8
6
@@ -32,7 +30,7 @@ This project adheres to the llm-d [Code of Conduct and Covenant](CODE_OF_CONDUCT
32
30
33
31
## Contributing Process
34
32
35
-
We follow a **lazy consensus** approach: changes proposed by people with responsibility for a problem, without disagreement from others, within a bounded time window of review by their peers, should be accepted.
33
+
We are a small team with defined responsibilities. All proposals must be reviewed by at least one relevant human reviewer, with broader review expected for changes with particularly wide impact.
36
34
37
35
### Types of Contributions
38
36
@@ -70,13 +68,11 @@ The current testing documentation can be found within the respective components
70
68
***All code changes** must be submitted as pull requests (no direct pushes)
71
69
***All changes** must be reviewed and approved by a maintainer other than the author
72
70
***All repositories** must gate merges on compilation and passing tests
73
-
***All experimental features** must be off by default and require explicit opt-in
74
71
75
72
## Commit and Pull Request Style
76
73
77
74
***Pull requests** should describe the problem succinctly
78
-
***Rebase and squash** before merging
79
-
***Use minimal commits** and break large changes into distinct commits
75
+
***Prefer smaller PRs** over larger ones; when a PR adds multiple commits, prefer smaller commits
80
76
***Commit messages** should have:
81
77
* Short, descriptive titles
82
78
* Description of why the change was needed
@@ -88,43 +84,42 @@ The current testing documentation can be found within the respective components
88
84
89
85
## API Changes and Deprecation
90
86
91
-
***No breaking changes**: The no-breaking-changes policy will apply once we reach GA
92
-
***Includes**: All protocols, API endpoints, internal APIs, command line flags/arguments
93
-
***Exception**: Bug fixes that don't impact significant number of consumers (As the project matures, we will be stricter about such changes - Hyrum's Law is real)
94
-
***Versioning**: All protocols and APIs should be versionable with clear forward and backward compatibility requirements. A new version may change behavior and fields. For Go modules and Python packages use semver v0.x.x. For Kubernetes API object types we use the Kubernetes versioning structure and evolution rules
87
+
***Includes**: All protocols, API endpoints, internal APIs, command line flags/arguments, and Kubernetes API object type (resource) definitions
88
+
***Versioning**: We use [Semantic Versioning](https://semver.org) at major version 0 for Go modules and Python packages, which grants freedom to make breaking changes. For Kubernetes API object types we use the Kubernetes versioning structure and evolution rules (currently at `v1alpha1`). Since the project has no installed base, we currently make changes without regard to backward compatibility.
95
89
***Documentation**: All APIs must have documented specs describing expected behavior
96
90
97
91
## Testing Requirements
98
92
99
93
We use two tiers of testing:
100
94
101
-
1.**Behavioral tests**: Fast verification of code parts, testing different arguments
95
+
1.**Behavioral unit tests**: Fast verification of individual units of code, testing different arguments
102
96
* Best for fast verification of parts of code, testing different arguments
103
-
*Doesn't cover interactions between code
97
+
*Does not cover interaction between units of code
104
98
2.**End-to-end (e2e) tests**: Whole system testing including benchmarking
105
-
* Best for preventing end to end regression and verifying overall correctness
99
+
* Best for preventing end-to-end regression and verifying overall correctness
106
100
* Execution can be slow
107
101
108
-
Strong e2e coverage is required for deployed systems to prevent functional regression. Appropriate test coverage is an important part of code review.
102
+
Appropriate test coverage is an important part of code review.
109
103
110
104
## Security
111
105
112
106
Maintain appropriate security mindset for production serving. The project will establish a project email address for responsible disclosure of security issues that will be reviewed by the project maintainers. Prior to the first GA release we will formalize a security component and process. More details on security can be found in the [SECURITY.md](./SECURITY.md) file.
113
107
114
108
## Project Structure and Ownership
115
109
116
-
The repository contains the following deployable components:
110
+
The repository contains the following deployable components.
117
111
118
112
| Component | Language | Source | Description |
119
113
|---|---|---|---|
120
-
|**Dual-Pods Controller**| Go |`cmd/dual-pods-controller/`, `pkg/controller/dual-pods/`| Manages server-providing Pods in reaction to server-requesting Pods. Handles binding, sleep/wake, and readiness relay. |
114
+
|**Dual-Pods Controller**| Go |`cmd/dual-pods-controller/`, `pkg/controller/dual-pods/`| Manages server-providing Pods (milestone 2) and launched vLLM instances (milestone 3) in reaction to server-requesting Pods. Handles binding, sleep/wake, and readiness relay. |
121
115
|**Launcher-Populator Controller**| Go |`cmd/launcher-populator/`, `pkg/controller/launcher-populator/`| Proactively creates launcher pods on nodes based on `LauncherPopulationPolicy` CRDs. |
122
116
|**Requester**| Go |`cmd/requester/`, `pkg/server/requester/`| Lightweight binary running in server-requesting Pods. Exposes SPI endpoints for GPU info and readiness relay. |
123
117
|**Launcher**| Python |`inference_server/launcher/`| FastAPI service managing multiple vLLM subprocess instances via REST API. |
124
-
|**Test Requester**| Go |`cmd/test-requester/`| Test binary simulating a requester with GPU allocation. |
118
+
|**Test Requester**| Go |`cmd/test-requester/`| Test binary simulating a requester (does not use real GPUs). |
125
119
|**Test Server**| Go |`cmd/test-server/`| Test binary simulating a vLLM-like inference server. |
120
+
|**Test Launcher**| Python |`dockerfiles/Dockerfile.launcher.cpu`| CPU-based launcher image for testing without GPUs. |
126
121
127
-
The two controllers are deployed via Helm charts in `charts/`.
122
+
The two controllers are deployed via a single Helm chart in `charts/fma-controllers/`.
***Maintainers** are listed in the [OWNERS](OWNERS) file. The file follows Kubernetes conventions for future Prow compatibility but is not currently consumed by automation. Additional OWNERS files can be added per-directory as the project grows.
164
+
***Maintainers** are listed in the [OWNERS](OWNERS) file. The file follows [Kubernetes OWNERS conventions](https://www.kubernetes.dev/docs/guide/owners/) for future Prow compatibility but is not currently consumed by automation. Additional OWNERS files can be added per-directory as the project grows.
177
165
***Contributors** can become maintainers through consistent, quality contributions
178
-
* Code ownership follows Kubernetes project conventions with OWNERS files
179
166
180
167
### Incubation Status
181
168
182
169
FMA is currently in the **llm-d-incubation** organization, which means:
183
170
184
171
***Rapid iteration**: Greater freedom for testing new ideas and approaches
185
-
***Experimental features**: Components may change significantly as we learn
172
+
***Components may change significantly** as we learn
186
173
***Best effort support**: Not yet ready for production use
187
174
***Graduation path**: Working toward integration with core llm-d components
188
175
189
-
### Graduation Criteria
190
-
191
-
To graduate to the core `llm-d` organization, FMA must demonstrate:
176
+
### Graduation
192
177
193
-
1.**Stability**: Proven reliability in test environments
194
-
2.**Performance**: Measurable improvements in model actuation speed
195
-
3.**Documentation**: Complete user and developer documentation
196
-
4.**Testing**: Comprehensive unit, integration, and E2E test coverage
197
-
5.**Community adoption**: Active use and feedback from early adopters
198
-
6.**API maturity**: Stable APIs ready for production use
178
+
Graduation criteria are defined by the llm-d organization (not this repo). This repo tracks its progress toward meeting those criteria. See the llm-d organization documentation for details.
**NOTE:** "DCO sign-off" is different from commit "signing". The former affirms your compliance with the DCO, while the latter adds a cryptographic signature that is rarely displayed. See [the git book](https://git-scm.com/book/en/v2/Git-Tools-Signing-Your-Work) about signing. For commit signoff, do a web search on `git signoff`. GitHub has a concept of [a commit being "verified"](https://docs.github.com/en/authentication/managing-commit-signature-verification) that extends the Git concept of signing.
12
4
13
5
In order to get a pull request approved, you must first complete a DCO
14
6
sign-off for each commit that the request is asking to add to the
@@ -20,8 +12,7 @@ repository](https://github.com/llm-d/llm-d/blob/main/DCO). In
20
12
the case of an individual, DCO sign-off is accomplished by doing a Git
21
13
"sign-off" on the commit.
22
14
23
-
We prefer that commits contributed to this repository be signed and
24
-
GitHub verified, but this is not strictly necessary or enforced.
15
+
Commits contributed to this repository must be signed and GitHub verified, as enforced by the [signed commits CI check](.github/workflows/ci-signed-commits.yaml).
0 commit comments