Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] master from ray-project:master #140

Open
wants to merge 6,169 commits into
base: master
Choose a base branch
from
Open

Conversation

pull[bot]
Copy link

@pull pull bot commented Jun 29, 2023

See Commits and Changes for more details.


Created by pull[bot]

Can you help keep this open source service alive? 💖 Please sponsor : )

justinvyu and others added 28 commits February 13, 2025 07:05
…mark (#50399)

Adds a `.skip_training.fault_tolerance` variant to the image
classification training ingest release test which **kills a node every N
seconds and tests the worker recovery.**

---------

Signed-off-by: Justin Yu <justinvyu@anyscale.com>
<!-- Thank you for your contribution! Please review
https://github.com/ray-project/ray/blob/master/CONTRIBUTING.rst before
opening a pull request. -->

<!-- Please add a reviewer to the assignee section when you create a PR.
If you don't have the access to it, we will shortly find a reviewer and
assign them to your PR. -->

## Why are these changes needed?

This is the first step towards
#47933

It is not very tested at the moment (on Python 3.13), but it compiles
locally (with `pip install -e . --verbose`) and can execute a simple
workload like
```
>>> import ray
>>> ray.init()
2024-10-10 16:03:31,857	INFO worker.py:1799 -- Started a local Ray instance.
RayContext(dashboard_url='', python_version='3.13.0', ray_version='3.0.0.dev0', ray_commit='{{RAY_COMMIT_SHA}}')
>>> @ray.remote
... def f():
...     return 42
...     
>>> ray.get(f.remote())
42
>>> 
```
(and similar for actors).

The main thing that needed to change to make Ray work on Python 3.13 was
to upgrade Cython to 3.0.11 which seems to be the first version of
Cython to support Python 3.13. Unfortunately it has a compiler bug
cython/cython#3235 (the fix is not released yet)
that I had to work around.

I also had to work around cython/cython#5750
by changing some typing from `float` to `int | float`.

## Related issue number

<!-- For example: "Closes #1234" -->

## Checks

- [ ] I've signed off every commit(by using the -s flag, i.e., `git
commit -s`) in this PR.
- [ ] I've run `scripts/format.sh` to lint the changes in this PR.
- [ ] I've included any doc changes needed for
https://docs.ray.io/en/master/.
- [ ] I've added any new APIs to the API Reference. For example, if I
added a
method in Tune, I've added it in `doc/source/tune/api/` under the
           corresponding `.rst` file.
- [ ] I've made sure the tests are passing. Note that there might be a
few flaky tests, see the recent failures at https://flakey-tests.ray.io/
- Testing Strategy
   - [ ] Unit tests
   - [ ] Release tests
   - [ ] This PR is not tested :(

---------

Signed-off-by: Philipp Moritz <pcmoritz@gmail.com>
Co-authored-by: pcmoritz <pcmoritz@anyscale.com>
Co-authored-by: srinathk10 <68668616+srinathk10@users.noreply.github.com>
Co-authored-by: Edward Oakes <ed.nmi.oakes@gmail.com>
…#50462)

<!-- Thank you for your contribution! Please review
https://github.com/ray-project/ray/blob/master/CONTRIBUTING.rst before
opening a pull request. -->

<!-- Please add a reviewer to the assignee section when you create a PR.
If you don't have the access to it, we will shortly find a reviewer and
assign them to your PR. -->

## Why are these changes needed?

Next step after #50160 to make it
more convenient to use UV with Ray.

This is a useful runtime environment hook for mirroring the environment
of `uv run` to the workers (currently the args to uv run and the
working_dir). This is useful because it will allow people to intuitively
use `uv run` in a distributed application with the same behavior as for
a single python process.

This only modifies the environment if the driver was run with `uv run`
and could conceivably become the default for drivers run with uv run.

This is currently a developer API as implied by the fact that it is in
the `_private` namespace. It is currently for experimentation and can
needs to be opted in via

```shell
export RAY_RUNTIME_ENV_HOOK=ray._private.runtime_env.uv_runtime_env_hook.hook
```

If it works well, we might make it the default in the `uv run` case.

## Related issue number

<!-- For example: "Closes #1234" -->

## Checks

- [ ] I've signed off every commit(by using the -s flag, i.e., `git
commit -s`) in this PR.
- [ ] I've run `scripts/format.sh` to lint the changes in this PR.
- [ ] I've included any doc changes needed for
https://docs.ray.io/en/master/.
- [ ] I've added any new APIs to the API Reference. For example, if I
added a
method in Tune, I've added it in `doc/source/tune/api/` under the
           corresponding `.rst` file.
- [ ] I've made sure the tests are passing. Note that there might be a
few flaky tests, see the recent failures at https://flakey-tests.ray.io/
- Testing Strategy
   - [ ] Unit tests
   - [ ] Release tests
   - [ ] This PR is not tested :(

---------

Signed-off-by: Philipp Moritz <pcmoritz@gmail.com>
Co-authored-by: Edward Oakes <ed.nmi.oakes@gmail.com>
Co-authored-by: angelinalg <122562471+angelinalg@users.noreply.github.com>
especially on building c/c++ parts. this should makes the use of build
caches much more efficient

Signed-off-by: Lonnie Liu <lonnie@anyscale.com>
… Don't broadcast more than once per `training_step()`. (#50477)
<!-- Thank you for your contribution! Please review
https://github.com/ray-project/ray/blob/master/CONTRIBUTING.rst before
opening a pull request. -->

<!-- Please add a reviewer to the assignee section when you create a PR.
If you don't have the access to it, we will shortly find a reviewer and
assign them to your PR. -->

## Why are these changes needed?

This is part of #48133.
Continuing the approach taken in
#49426, make all the encoders
work in append mode

## Related issue number

#49426

## Checks

- [x] I've signed off every commit(by using the -s flag, i.e., `git
commit -s`) in this PR.
- [x] I've run `scripts/format.sh` to lint the changes in this PR.
- [x] I've included any doc changes needed for
https://docs.ray.io/en/master/.
- [ ] I've added any new APIs to the API Reference. For example, if I
added a
method in Tune, I've added it in `doc/source/tune/api/` under the
           corresponding `.rst` file.
- [ ] I've made sure the tests are passing. Note that there might be a
few flaky tests, see the recent failures at https://flakey-tests.ray.io/
- Testing Strategy
   - [x] Unit tests
   - [ ] Release tests
   - [ ] This PR is not tested :(

---------

Signed-off-by: Martin Bomio <martinbomio@spotify.com>
Signed-off-by: Richard Liaw <rliaw@berkeley.edu>
Co-authored-by: Richard Liaw <rliaw@berkeley.edu>
The `map_batches.numpy` release test previously ran slowly and
encountered OOM errors because of a memory leak with PyArrow. Since the
issue has been worked around by
#50403, this PR marks the test as
stable again.

Signed-off-by: Balaji Veeramani <bveeramani@berkeley.edu>
Signed-off-by: Kai-Hsun Chen <kaihsun@anyscale.com>
for guarding incoming refactor efforts

Signed-off-by: Lonnie Liu <lonnie@anyscale.com>
Signed-off-by: Kai-Hsun Chen <kaihsun@anyscale.com>
Signed-off-by: Kai-Hsun Chen <kaihsun@anyscale.com>
Signed-off-by: Kai-Hsun Chen <kaihsun@anyscale.com>
Follow-up of #50435

---------

Signed-off-by: Justin Yu <justinvyu@anyscale.com>
easier to read, and removes the `RAY_CI_*_AFFECTED` variable pattern.

also removes unused `compiled_python` tag

Signed-off-by: Lonnie Liu <lonnie@anyscale.com>
Use `cd -` instead to be resilient to future directory topology changes.

## Checks

- [x] I've signed off every commit(by using the -s flag, i.e., `git
commit -s`) in this PR.
- [x] I've run `scripts/format.sh` to lint the changes in this PR.
- [x] I've included any doc changes needed for
https://docs.ray.io/en/master/.
- [ ] I've added any new APIs to the API Reference. For example, if I
added a
method in Tune, I've added it in `doc/source/tune/api/` under the
           corresponding `.rst` file.
- [x] I've made sure the tests are passing. Note that there might be a
few flaky tests, see the recent failures at https://flakey-tests.ray.io/
- Testing Strategy
   - [x] Unit tests
   - [ ] Release tests
   - [ ] This PR is not tested :(

Signed-off-by: David Xia <david@davidxia.com>
Signed-off-by: Kai-Hsun Chen <kaihsun@anyscale.com>
- Add operator id
- Store operator id as labels of task and operators

Test:
- CI

Signed-off-by: can <can@anyscale.com>
Signed-off-by: Lonnie Liu <lonnie@anyscale.com>
Signed-off-by: Kai-Hsun Chen <kaihsun@anyscale.com>
do not use `x()`.

Signed-off-by: Lonnie Liu <lonnie@anyscale.com>
…ToleranceOptions field (#50519)

Signed-off-by: Rueian <rueiancsie@gmail.com>
Signed-off-by: Kai-Hsun Chen <kaihsun@anyscale.com>
…kAccessor`, `PandasBlockAccessor` (#50498)

## Why are these changes needed?

Abstracting common methods, removing duplication in
`ArrowBlockAccessor`, `PandasBlockAccessor`.

---------

Signed-off-by: Alexey Kudinkin <ak@anyscale.com>
#50580)

Signed-off-by: Kai-Hsun Chen <kaihsun@anyscale.com>
Signed-off-by: Kai-Hsun Chen <kaihsun@anyscale.com>
we are using images everywhere now

Signed-off-by: Lonnie Liu <lonnie@anyscale.com>
to docker hub.

Signed-off-by: Lonnie Liu <lonnie@anyscale.com>
comaniac and others added 30 commits February 26, 2025 15:52
## Why are these changes needed?

Support structural outputs in vLLM v0.

## Checks

- [x] I've signed off every commit(by using the -s flag, i.e., `git
commit -s`) in this PR.
- [x] I've run `scripts/format.sh` to lint the changes in this PR.
- [x] I've included any doc changes needed for
https://docs.ray.io/en/master/.
- [x] I've added any new APIs to the API Reference. For example, if I
added a
method in Tune, I've added it in `doc/source/tune/api/` under the
           corresponding `.rst` file.
- [x] I've made sure the tests are passing. Note that there might be a
few flaky tests, see the recent failures at https://flakey-tests.ray.io/
- Testing Strategy
   - [x] Unit tests
   - [ ] Release tests
   - [ ] This PR is not tested :(

---------

Signed-off-by: Cody Yu <hao.yu.cody@gmail.com>
Signed-off-by: Rui Qiao <ruisearch42@gmail.com>
<!-- Thank you for your contribution! Please review
https://github.com/ray-project/ray/blob/master/CONTRIBUTING.rst before
opening a pull request. -->

<!-- Please add a reviewer to the assignee section when you create a PR.
If you don't have the access to it, we will shortly find a reviewer and
assign them to your PR. -->

## Why are these changes needed?

<!-- Please give a short summary of the change and the problem this
solves. -->

## Related issue number

<!-- For example: "Closes #1234" -->

## Checks

- [ ] I've signed off every commit(by using the -s flag, i.e., `git
commit -s`) in this PR.
- [ ] I've run `scripts/format.sh` to lint the changes in this PR.
- [ ] I've included any doc changes needed for
https://docs.ray.io/en/master/.
- [ ] I've added any new APIs to the API Reference. For example, if I
added a
method in Tune, I've added it in `doc/source/tune/api/` under the
           corresponding `.rst` file.
- [ ] I've made sure the tests are passing. Note that there might be a
few flaky tests, see the recent failures at https://flakey-tests.ray.io/
- Testing Strategy
   - [ ] Unit tests
   - [ ] Release tests
   - [ ] This PR is not tested :(

---------

Signed-off-by: akshay-anyscale <122416226+akshay-anyscale@users.noreply.github.com>
Fixes #50882

---------

Signed-off-by: kaihsun <kaihsun@anyscale.com>
Before:
```
[~/ray] (master) 
ubuntu@hjiang-devbox-pg$ bazel-bin/src/ray/util/tests/process_cleanup_test
Running main() from gmock_main.cc
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from ProcessCleanerTest
[ RUN      ] ProcessCleanerTest.BasicTest
[       OK ] ProcessCleanerTest.BasicTest (0 ms)
[----------] 1 test from ProcessCleanerTest (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[  PASSED  ] 1 test.
[       OK ] ProcessCleanerTest.BasicTest (2 ms)
[----------] 1 test from ProcessCleanerTest (2 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (2 ms total)
[  PASSED  ] 1 test.
[       OK ] ProcessCleanerTest.BasicTest (2002 ms)
[----------] 1 test from ProcessCleanerTest (2002 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (2002 ms total)
[  PASSED  ] 1 test.
```
after:
```
[~/ray] (master) 
ubuntu@hjiang-devbox-pg$ bazel-bin/src/ray/util/tests/process_cleanup_test
Running main() from gmock_main.cc
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from ProcessCleanerTest
[ RUN      ] ProcessCleanerTest.BasicTest
[       OK ] ProcessCleanerTest.BasicTest (2001 ms)
[----------] 1 test from ProcessCleanerTest (2001 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (2001 ms total)
[  PASSED  ] 1 test.
```

Signed-off-by: dentiny <dentinyhao@gmail.com>
Signed-off-by: Kourosh Hakhamaneshi <kourosh@anyscale.com>
Signed-off-by: dentiny <dentinyhao@gmail.com>
Signed-off-by: dayshah <dhyey2019@gmail.com>
so that it is defined clearer

Signed-off-by: Lonnie Liu <lonnie@anyscale.com>
no longer being used anywhere; all moved into ray_ci wrappers now

Signed-off-by: Lonnie Liu <lonnie@anyscale.com>
<!-- Thank you for your contribution! Please review
https://github.com/ray-project/ray/blob/master/CONTRIBUTING.rst before
opening a pull request. -->

<!-- Please add a reviewer to the assignee section when you create a PR.
If you don't have the access to it, we will shortly find a reviewer and
assign them to your PR. -->

## Why are these changes needed?

<!-- Please give a short summary of the change and the problem this
solves. -->

Fix warnings from Cython compiler.

<img width="1521" alt="Screenshot 2025-02-27 at 12 54 17 AM"
src="https://github.com/user-attachments/assets/865f1fe4-4fdc-4818-b00e-60513c138a50"
/>


## Related issue number

<!-- For example: "Closes #1234" -->

## Checks

- [ ] I've signed off every commit(by using the -s flag, i.e., `git
commit -s`) in this PR.
- [ ] I've run `scripts/format.sh` to lint the changes in this PR.
- [ ] I've included any doc changes needed for
https://docs.ray.io/en/master/.
- [ ] I've added any new APIs to the API Reference. For example, if I
added a
method in Tune, I've added it in `doc/source/tune/api/` under the
           corresponding `.rst` file.
- [ ] I've made sure the tests are passing. Note that there might be a
few flaky tests, see the recent failures at https://flakey-tests.ray.io/
- Testing Strategy
   - [ ] Unit tests
   - [ ] Release tests
   - [ ] This PR is not tested :(

Signed-off-by: kaihsun <kaihsun@anyscale.com>
…50873)

Signed-off-by: Justin Ji <justin.ji@justinji-NM2NK6KXX6.local>
Signed-off-by: Justin Ji <justinji@college.harvard.edu>
Co-authored-by: Justin Ji <justin.ji@justinji-NM2NK6KXX6.local>
Signed-off-by: Mengjin Yan <mengjinyan3@gmail.com>
## Why are these changes needed?

For checks like `A==-1`, AST parser creates a special type of node

```
Compare(left=Name(id='a'), ops=[Eq()],
        comparators=[UnaryOp(op=USub(), operand=Constant(value=1))])
```

This PR adds support for handling `UnaryOp` to handle `USub` op.

## Related issue number

Closes #50916

Signed-off-by: Praveen Gorthy <praveeng@anyscale.com>
Prometheus [restricts metric
names](https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels)
to:

> Metric names may contain ASCII letters, digits, underscores, and
colons. It must match the regex [a-zA-Z_:][a-zA-Z0-9_:]*.

We cannot enforce the same restriction in Python libraries that depend
on us (see [Mars E2E Integration Test
Failures](https://buildkite.com/ray-project/premerge/builds/34512/canvas?jid=0194f74f-c2b7-4a9b-b0fb-9a9895a72175#/1563-1597))
already emit metrics with names which are invalid.

Today, these metrics are not only allowed, but they also raise an
exception when scraped by prometheus and the entire batch of metrics
(including valid ones) to be dropped. See #40586 for the original issue.

This PR makes the following changes
1. The Metric class in C++ will fail a CHECK if you try to create a
metric with an invalid name
2. The Metric class in Python will
     - Log a warning 
- Prevent the creation of an underlying C++ Metric. This prevents
invalid metric names from raising Exceptions in the Metric Agent (when
scraped by Prometheus)
3. Tests for the Python Metric class to log warnings.  

Closes #40586

---------

Signed-off-by: Ibrahim Rabbani <irabbani@anyscale.com>
…0964)

This reverts commit 767c6ad.

the change was breaking all release tests
Signed-off-by: Edward Oakes <ed.nmi.oakes@gmail.com>
Signed-off-by: Edward Oakes <ed.nmi.oakes@gmail.com>
<!-- Thank you for your contribution! Please review
https://github.com/ray-project/ray/blob/master/CONTRIBUTING.rst before
opening a pull request. -->

<!-- Please add a reviewer to the assignee section when you create a PR.
If you don't have the access to it, we will shortly find a reviewer and
assign them to your PR. -->

## Why are these changes needed?

<!-- Please give a short summary of the change and the problem this
solves. -->

## Related issue number

<!-- For example: "Closes #1234" -->

## Checks

- [x] I've signed off every commit(by using the -s flag, i.e., `git
commit -s`) in this PR.
- [x] I've run `scripts/format.sh` to lint the changes in this PR.
- [x] I've included any doc changes needed for
https://docs.ray.io/en/master/.
- [ ] I've added any new APIs to the API Reference. For example, if I
added a
method in Tune, I've added it in `doc/source/tune/api/` under the
           corresponding `.rst` file.
- [ ] I've made sure the tests are passing. Note that there might be a
few flaky tests, see the recent failures at https://flakey-tests.ray.io/
- Testing Strategy
   - [ ] Unit tests
   - [ ] Release tests
   - [ ] This PR is not tested :(

Signed-off-by: Huaiwei Sun <scottsun94@gmail.com>
Created by release automation bot.

Update with commit 41ddf49

Signed-off-by: kevin <kevin@anyscale.com>
this allows skipping the wheel compiling when running cpp tests

Signed-off-by: Lonnie Liu <lonnie@anyscale.com>
Test fails in python 3.12 because TensorFlow is not installed.

---------

Signed-off-by: Matthew Deng <matt@anyscale.com>
in comments and docs

Signed-off-by: co63oc <co63oc@users.noreply.github.com>
Signed-off-by: dentiny <dentinyhao@gmail.com>
…ent groups (#50959)

Signed-off-by: Rueian <rueiancsie@gmail.com>
Cleaning up link build errors. This link doesn't exist anymore as far as
I can tell.
## Why are these changes needed?
Adding in per node metrics will allow us to debug more efficiently as we
can see a more granular view of what is happening at the per node level.

Currently for Ray Data we collect a number of metrics that we would want
to group by node, but we do not report node for these metrics. The stats
collector actor aggregates these across multiple nodes. This PR adds per
node metrics to `OpRuntimeMetrics` which will not be aggregated across
multiple nodes so we can visualize this data segmented by node in the
data dashboard.

## Example
### Script
```python
import ray
import time

def f(x):
    time.sleep(0.1)
    return x

file_path = "s3://air-example-data-2/100G-xgboost-data.parquet/"
ds = ray.data.read_parquet(file_path).limit(10_000_000)
ds = ds.map_batches(f)

for _ in ds.iter_batches():
    pass
```

### Output
```
(base) ray@ip-10-0-61-222:~/default$ python gen_metrics.py 
2025-01-16 16:33:49,968 INFO worker.py:1654 -- Connecting to existing Ray cluster at address: 10.0.61.222:6379...
2025-01-16 16:33:49,977 INFO worker.py:1832 -- Connected to Ray cluster. View the dashboard at https://session-64eiepsal97ynjwq1gb53c43vb.i.anyscaleuserdata-staging.com 
2025-01-16 16:33:49,979 INFO packaging.py:366 -- Pushing file package 'gcs://_ray_pkg_e7896c7ed49efce702fc2ded295073e96fe54a3a.zip' (0.00MiB) to Ray cluster...
2025-01-16 16:33:49,979 INFO packaging.py:379 -- Successfully pushed file package 'gcs://_ray_pkg_e7896c7ed49efce702fc2ded295073e96fe54a3a.zip'.
2025-01-16 16:33:51,418 INFO streaming_executor.py:108 -- Starting execution of Dataset. Full logs are in /tmp/ray/session_2025-01-16_16-33-18_905648_2451/logs/ray-data
2025-01-16 16:33:51,418 INFO streaming_executor.py:109 -- Execution plan of Dataset: InputDataBuffer[Input] -> TaskPoolMapOperator[ListFiles] -> TaskPoolMapOperator[PartitionFiles] -> TaskPoolMapOperator[ReadFiles] -> LimitOperator[limit=10000000] -> TaskPoolMapOperator[MapBatches(f)]
(autoscaler +1m19s) Tip: use `ray status` to view detailed cluster status. To disable these messages, set RAY_SCHEDULER_EVENTS=0.                                                                                                                                                                                                                                                     
✔️  Dataset execution finished in 113.05 seconds: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10.0M/10.0M [01:53<00:00, 88.5k row/s] 
- ListFiles: Tasks: 0; Queued blocks: 0; Resources: 0.0 CPU, 0.0B object store: : 1.00k row [01:53, 8.85 row/s]                                                                                                                                                                                                                                                                       
- PartitionFiles: Tasks: 0; Queued blocks: 0; Resources: 0.0 CPU, 87.3KB object store: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1.00k/1.00k [01:53<00:00, 8.85 row/s]
- ReadFiles: Tasks: 0; Queued blocks: 311; Resources: 0.0 CPU, 2.4GB object store: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 17.9M/17.9M [01:53<00:00, 159k row/s]
- limit=10000000: Tasks: 0; Queued blocks: 19; Resources: 0.0 CPU, 0.0B object store: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10.0M/10.0M [01:53<00:00, 88.5k row/s]
- MapBatches(f): Tasks: 0; Queued blocks: 0; Resources: 0.0 CPU, 1.2GB object store: 100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10.0M/10.0M [01:53<00:00, 88.5k row/s
```

### New Charts
<img width="1462" alt="image"
src="https://github.com/user-attachments/assets/218183df-243f-4c84-9af9-cc362fac0b7e"
/>
<img width="1465" alt="image"
src="https://github.com/user-attachments/assets/4bdfef16-c773-45c2-bc56-512df70ba0c4"
/>
<img width="1468" alt="image"
src="https://github.com/user-attachments/assets/da19ac5f-33f8-46fe-9677-afbe08a55af1"
/>
<img width="1471" alt="image"
src="https://github.com/user-attachments/assets/72a85d24-ea4e-4c7b-9d96-244325d6333d"
/>

---------

Signed-off-by: Matthew Owen <mowen@anyscale.com>
link is dead and hasn't been used in years
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.