keras-team--keras
285 行
9.9 KiB
Markdown
285 行
9.9 KiB
Markdown
Keras 3 is a high-velocity open-source project. We welcome contributions!
|
|
|
|
Contributions can be made in a variety of ways, including coding, enriching documentation, refining docstrings, and providing code examples.
|
|
|
|
Please review our
|
|
[AI-Assisted Contribution Policy](#ai-assisted-contribution-policy).
|
|
|
|
## Current items open for contributions
|
|
At [this link](https://github.com/keras-team/keras/issues/18442), you'll find a list of items where your help is needed!
|
|
|
|
|
|
## How to contribute code
|
|
|
|
Follow these steps to submit your code contribution.
|
|
|
|
### Step 1. Open an issue
|
|
|
|
Before making any changes, we recommend opening an issue (if one doesn't already
|
|
exist) and discussing your proposed changes. This way, we can give you feedback
|
|
and validate the proposed changes. Unsolicited PRs that attempt to fix complex
|
|
issues without prior discussion in a GitHub issue may be closed.
|
|
|
|
If the changes are minor (simple bug fix or documentation fix), then feel free
|
|
to open a Pull Request (PR) without discussion.
|
|
|
|
### Step 2. Make code changes
|
|
|
|
To make code changes, you need to fork the repository. You will need to setup a
|
|
development environment and run the unit tests. This is covered in the section
|
|
"Setup environment".
|
|
|
|
### Step 3. Create a pull request
|
|
|
|
Once the change is ready, open a pull request from your branch in your fork to
|
|
the master branch in [keras-team/keras](https://github.com/keras-team/keras).
|
|
|
|
### Step 4. Sign the Contributor License Agreement
|
|
|
|
After creating the pull request, the `cla/google` check will be performed and,
|
|
if you haven't signed the Contributor License Agreement (CLA), it will fail with
|
|
instructions on how to do so. Please follow the instructions to sign the CLA and
|
|
the check will pass.
|
|
|
|

|
|
|
|
|
|
### Step 5. Code review
|
|
|
|
If the tests fail, look into the error messages and try to fix them.
|
|
|
|

|
|
|
|
A reviewer will review the pull request and provide comments. There may be
|
|
several rounds of comments and code changes before the pull request gets
|
|
approved by the reviewer.
|
|
|
|

|
|
|
|
### Step 6. Merging
|
|
|
|
Once the pull request is approved, a `ready to pull` tag will be added to the
|
|
pull request. A team member will take care of the merging.
|
|
|
|

|
|
|
|
Here is an [example pull request](https://github.com/keras-team/keras/pull/18848)
|
|
for your reference.
|
|
|
|
## Setup environment
|
|
|
|
We provide two ways of setting up a development environment. One is to use a
|
|
dev container, and the other one is to set up a local environment by installing
|
|
the dev tools needed.
|
|
|
|
### Option 1: GitHub Codespace or dev container
|
|
|
|
We support GitHub Codespaces, Visual Studio Code dev containers and JetBrain dev
|
|
containers. Please see the
|
|
[Dev container documentation](https://github.com/keras-team/keras/tree/master/.devcontainer).
|
|
|
|
### Option 2: Set up a local environment
|
|
|
|
To set up your local dev environment, you will need the following tools.
|
|
|
|
1. [git](https://github.com/) for code repository management.
|
|
2. [python](https://www.python.org/) to build and code in Keras.
|
|
|
|
The following commands check the tools above are successfully installed. Note
|
|
that Keras requires at least Python 3.10 to run.
|
|
|
|
```shell
|
|
git --version
|
|
python --version
|
|
```
|
|
|
|
Clone your forked repo to your local machine. Go to the cloned directory to
|
|
install the dependencies.
|
|
|
|
```shell
|
|
git clone https://github.com/YOUR_GITHUB_USERNAME/keras.git
|
|
cd keras
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
You then need to configure the backend to use, see the
|
|
[Configuring your backend](https://github.com/keras-team/keras/blob/master/README.md#configuring-your-backend)
|
|
section of the README.
|
|
|
|
You can also add GPU support to your environment, see the
|
|
[Adding GPU support](https://github.com/keras-team/keras/blob/master/README.md#adding-gpu-support)
|
|
section of the README.
|
|
|
|
## Generating public API and formatting the code
|
|
|
|
For the first time you are setting up the repo, please run `pre-commit install`.
|
|
Note that this needs to be done only once at the beginning.
|
|
|
|
Now, whenever you run `git commit -m "<message>"`, three things are
|
|
automatically done:
|
|
|
|
- Public API generation
|
|
- Code formatting
|
|
- Code linting
|
|
|
|
If there's any error, the commit will not go through. Please fix the error (
|
|
most of the times, the error is fixed automatically by the formatter/linter) and
|
|
re-run the following:
|
|
|
|
```
|
|
git add .
|
|
git commit -m "<message>" # This will not get logged as a duplicate commit.
|
|
```
|
|
|
|
In case you want to run the above manually on all files, you can do the
|
|
following:
|
|
|
|
```
|
|
pre-commit run --all-files
|
|
```
|
|
|
|
KerasHub uses [Ruff](https://docs.astral.sh/ruff/) to format the code.
|
|
|
|
### Docstrings
|
|
|
|
We do not have an automated way to check docstring style, so if you write
|
|
or edit any docstring, please make sure to check them manually.
|
|
Keras docstrings follow the conventions below:
|
|
|
|
A **class docstring** may contain the following items:
|
|
|
|
* A one-line description of the class.
|
|
* Paragraph(s) of more detailed information.
|
|
* Optional `Examples` section.
|
|
* `Args` section for arguments in `__init__()`.
|
|
* If it's a layer:
|
|
* `Call arguments` section for arguments in `Layer.call()`.
|
|
* `Returns` section for the return values of `Layer.call()`.
|
|
* Optional `Raises` section for possible errors.
|
|
|
|
You can check out `MultiHeadAttention` as an example
|
|
[(link)](https://github.com/keras-team/keras/blob/v3.0.0/keras/layers/attention/multi_head_attention.py#L20).
|
|
|
|
A **function docstring** may contain the following items:
|
|
|
|
* One-line description of the function.
|
|
* Paragraph(s) of more detailed information.
|
|
* Optional `Examples` section.
|
|
* `Args` section for the function arguments.
|
|
* `Returns` section for the return values.
|
|
* Optional `Raises` section for possible errors.
|
|
|
|
You can check out `text_dataset_from_directory` as an example
|
|
[(link)](https://github.com/keras-team/keras/blob/v3.0.0/keras/utils/text_dataset_utils.py#L27).
|
|
|
|
## Run tests
|
|
|
|
We use [pytest](https://pytest.org/) to run the tests.
|
|
|
|
### Run a test file
|
|
|
|
To run the tests in `keras/src/losses/losses_test.py`, use the following command
|
|
at the root directory of the repo.
|
|
|
|
```shell
|
|
pytest keras/src/losses/losses_test.py
|
|
```
|
|
|
|
### Run a single test case
|
|
|
|
You can specify a single test class to run within a file.
|
|
|
|
```shell
|
|
pytest keras/src/losses/losses_test.py::MeanSquaredErrorTest
|
|
```
|
|
|
|
You can also specify a single test method to run within a class.
|
|
|
|
```shell
|
|
pytest keras/src/losses/losses_test.py::MeanSquaredErrorTest::test_sample_weighted
|
|
```
|
|
|
|
### Run all tests
|
|
|
|
You can run all the tests locally by running the following command in the repo
|
|
root directory.
|
|
|
|
```shell
|
|
pytest keras
|
|
```
|
|
|
|
Note that you can skip the Keras applications tests using the
|
|
`SKIP_APPLICATIONS_TESTS` environment variable. This will cut down the testing
|
|
time significantly.
|
|
|
|
```shell
|
|
SKIP_APPLICATIONS_TESTS=True pytest keras
|
|
```
|
|
|
|
To run all tests using a different backend, you can simply specify it on the
|
|
command line.
|
|
|
|
```shell
|
|
KERAS_BACKEND=jax SKIP_APPLICATIONS_TESTS=True pytest keras
|
|
```
|
|
|
|
## AI-Assisted Contribution Policy
|
|
|
|
The Keras project relies on a vibrant, collaborative open-source community. As
|
|
an organization at the forefront of machine learning, we recognize and support
|
|
the use of AI-assisted coding tools to enhance developer productivity.
|
|
|
|
The ultimate responsibility for any code contributed to Keras rests entirely
|
|
with the human author. To maintain the high quality, security, and architectural
|
|
integrity of the Keras codebase, and to respect the time of our maintainers, we
|
|
require all contributors to adhere to the following policy.
|
|
|
|
### 1. Disclosure Requirements
|
|
|
|
If you used an AI coding agent in any capacity in the process of creating the
|
|
pull request, you must disclose this in the PR description. This provides
|
|
necessary context for the reviewers. By opening a pull request which includes AI
|
|
generated code, you accept all responsibility for the code in question and
|
|
guarantee that the content of the pull request complies with the terms of Keras’
|
|
open source license and intellectual property policies.
|
|
|
|
### 2. Acceptable vs. Unacceptable Use
|
|
|
|
#### Acceptable Use:
|
|
|
|
- Using AI tools while writing code you understand.
|
|
- Generating boilerplate code, documentation drafts, or unit test templates that
|
|
you manually review, refine, and test.
|
|
- Using LLMs to help you understand a complex bug or explain a piece of the
|
|
existing Keras codebase locally.
|
|
|
|
#### Unacceptable Use:
|
|
|
|
- **Zero-Review Agent PRs:** Allowing an autonomous AI agent to read an issue,
|
|
generate a patch, and open a Pull Request without comprehensive manual review
|
|
and testing by you.
|
|
- **Blind Copy-Pasting:** Submitting patches generated by an LLM where you do
|
|
not fully grasp the underlying mechanics of the fix.
|
|
- **AI-Generated Code Review Responses:** Using an LLM to automatically generate
|
|
replies to maintainer feedback. Code reviews require human-to-human
|
|
communication. If a maintainer asks an architectural question, you must answer
|
|
it yourself.
|
|
|
|
### 3. Enforcement and PR Closure
|
|
|
|
To keep the project moving efficiently, the Keras maintainer team reserves the
|
|
right to enforce this policy strictly:
|
|
|
|
- **Unaddressed Feedback:** If a maintainer leaves structural or architectural
|
|
feedback and the PR is abandoned, or the responses demonstrate a lack of
|
|
understanding of the submitted code, the PR will be closed.
|
|
- **Policy Violation:** Repeated submission of low-effort, poorly understood
|
|
AI-generated code will result in PR closure and potential restriction from
|
|
contributing to the repository.
|
|
|
|
### Acknowledgment
|
|
|
|
By submitting a Pull Request to Keras, you confirm that you have read this
|
|
policy, understand the code you are submitting, and take full responsibility for
|
|
its accuracy and integration into the codebase.
|