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

[Doc] [KubeRay] Add end-to-end tutorial for real-world RayJob workload (batch inference) #38857

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
d34a528
add docs
kevin85421 Aug 20, 2023
8030e26
update
kevin85421 Aug 21, 2023
7f1c300
add rayservice doc
kevin85421 Aug 21, 2023
f2ab31b
remove RayService
kevin85421 Aug 21, 2023
7225343
update
kevin85421 Aug 22, 2023
b92099f
update
kevin85421 Aug 22, 2023
9d602ba
kubeflow doc
kevin85421 Aug 22, 2023
e5564a8
update
kevin85421 Aug 22, 2023
26bc93a
update
kevin85421 Aug 22, 2023
7a573d3
update
kevin85421 Aug 22, 2023
743f078
update
kevin85421 Aug 22, 2023
70928ce
update
kevin85421 Aug 22, 2023
e7f4a58
update
kevin85421 Aug 22, 2023
0a46948
update
kevin85421 Aug 22, 2023
5d2b814
update
kevin85421 Aug 22, 2023
702f129
update
kevin85421 Aug 22, 2023
dbe0bb5
update
kevin85421 Aug 23, 2023
b5b6437
update
kevin85421 Aug 23, 2023
8c0dab7
update
kevin85421 Aug 23, 2023
3f43229
Update doc/source/cluster/kubernetes/benchmarks/memory-scalability-be…
kevin85421 Aug 23, 2023
c8e4fbc
Update doc/source/cluster/kubernetes/k8s-ecosystem/prometheus-grafana.md
kevin85421 Aug 23, 2023
856d8bc
Update doc/source/cluster/kubernetes/benchmarks/memory-scalability-be…
kevin85421 Aug 23, 2023
5b7c2b0
Update doc/source/cluster/kubernetes/benchmarks/memory-scalability-be…
kevin85421 Aug 23, 2023
4d86c7c
Update doc/source/cluster/kubernetes/benchmarks/memory-scalability-be…
kevin85421 Aug 23, 2023
d2df3ed
Update doc/source/cluster/kubernetes/k8s-ecosystem/prometheus-grafana.md
kevin85421 Aug 23, 2023
76831fd
Apply suggestions from code review
kevin85421 Aug 23, 2023
99a97d7
Apply suggestions from code review
kevin85421 Aug 23, 2023
7bc8d3d
Apply suggestions from code review
kevin85421 Aug 23, 2023
22730dd
update
kevin85421 Aug 23, 2023
2f2794d
Apply suggestions from code review
kevin85421 Aug 23, 2023
21dceba
update
kevin85421 Aug 23, 2023
6909059
update
kevin85421 Aug 23, 2023
6f18b98
Apply suggestions from code review
kevin85421 Aug 23, 2023
5a52048
update
kevin85421 Aug 23, 2023
d43ec07
update
kevin85421 Aug 23, 2023
2c4f191
update
kevin85421 Aug 23, 2023
3eb8b50
update
kevin85421 Aug 24, 2023
ec19d15
update
kevin85421 Aug 24, 2023
442dade
Add batch inference KubeRay RayJob example
architkulkarni Aug 24, 2023
16b2523
Address comments
architkulkarni Aug 25, 2023
e86b7bd
Add TOC and examples.md reference
architkulkarni Aug 25, 2023
b0ab8f7
Merge branch 'master' of https://github.com/ray-project/ray into rayj…
architkulkarni Aug 25, 2023
e33a63b
Unify with GCP GKE GPU doc
architkulkarni Aug 28, 2023
4bda040
Merge branch 'master' into rayjob-batch-inference
architkulkarni Aug 28, 2023
4a016a8
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 28, 2023
ba11002
Merge branch 'master' into rayjob-batch-inference
architkulkarni Aug 28, 2023
07aa515
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 28, 2023
85b6247
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 28, 2023
2274732
Update rayjob-batch-inference-example.md
architkulkarni Aug 28, 2023
b71a152
Update doc/source/cluster/kubernetes/user-guides/gcp-gke-gpu-cluster.md
architkulkarni Aug 29, 2023
570b90c
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 29, 2023
9a4effd
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 29, 2023
df9eff4
Merge branch 'master' into rayjob-batch-inference
architkulkarni Aug 29, 2023
9e66c61
Add note: GKE will automatically configure taints and tolerations and…
architkulkarni Aug 29, 2023
1786620
Merge branch 'rayjob-batch-inference' of https://github.com/architkul…
architkulkarni Aug 29, 2023
bd1ba72
Revert accelerator type change and provide different config
architkulkarni Aug 29, 2023
1b5cf91
Fix typo ((
architkulkarni Aug 29, 2023
5daadff
Fix typo remove extra \
architkulkarni Aug 29, 2023
22580d7
alpha warning
architkulkarni Aug 29, 2023
3a0d589
Merge branch 'rayjob-batch-inference' of https://github.com/architkul…
architkulkarni Aug 29, 2023
b0d08aa
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 31, 2023
f024c34
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 31, 2023
cc372d1
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 31, 2023
c2e1cd4
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 31, 2023
ac6c478
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 31, 2023
57849a0
Update doc/source/cluster/kubernetes/user-guides/gcp-gke-gpu-cluster.md
architkulkarni Aug 31, 2023
61303bc
Update doc/source/cluster/kubernetes/user-guides/gcp-gke-gpu-cluster.md
architkulkarni Aug 31, 2023
a788a76
Update doc/source/cluster/kubernetes/user-guides/gcp-gke-gpu-cluster.md
architkulkarni Aug 31, 2023
b8a229c
Update doc/source/cluster/kubernetes/user-guides/gcp-gke-gpu-cluster.md
architkulkarni Aug 31, 2023
03bd331
Update doc/source/cluster/kubernetes/user-guides/gcp-gke-gpu-cluster.md
architkulkarni Aug 31, 2023
fb2b69a
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 31, 2023
515fda7
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 31, 2023
36c190e
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 31, 2023
f356222
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 31, 2023
104d388
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 31, 2023
62af039
Update doc/source/cluster/kubernetes/examples/rayjob-batch-inference-…
architkulkarni Aug 31, 2023
0418ebe
Add to examples.rst
architkulkarni Aug 31, 2023
7d70b3a
Merge branch 'master' into rayjob-batch-inference
architkulkarni Aug 31, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/source/_toc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -314,6 +314,7 @@ parts:
- file: cluster/kubernetes/examples/stable-diffusion-rayservice.md
- file: cluster/kubernetes/examples/mobilenet-rayservice.md
- file: cluster/kubernetes/examples/text-summarizer-rayservice.md
- file: cluster/kubernetes/examples/rayjob-batch-inference-example.md
- file: cluster/kubernetes/k8s-ecosystem
sections:
- file: cluster/kubernetes/k8s-ecosystem/ingress.md
Expand Down
1 change: 1 addition & 0 deletions doc/source/cluster/kubernetes/examples.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ This section presents example Ray workloads to try out on your Kubernetes cluste
- {ref}`kuberay-mobilenet-rayservice-example` (CPU-only)
- {ref}`kuberay-stable-diffusion-rayservice-example`
- {ref}`kuberay-text-summarizer-rayservice-example`
- {ref}`kuberay-batch-inference-example`
Original file line number Diff line number Diff line change
@@ -0,0 +1,159 @@
(kuberay-batch-inference-example)=

# RayJob Batch Inference Example

This example demonstrates how to use the RayJob custom resource to run a batch inference job on a Ray cluster.

This example uses an image classification workload, which is based on <https://docs.ray.io/en/latest/data/examples/huggingface_vit_batch_prediction.html>. See that page for a full explanation of the code.

## Prerequisites

You must have a Kubernetes cluster running,`kubectl` configured to use it, and GPUs available. This example provides a brief tutorial for setting up the necessary GPUs on Google Kubernetes Engine (GKE), but you can use any Kubernetes cluster with GPUs.

## Step 0: Create a Kubernetes cluster on GKE (Optional)
architkulkarni marked this conversation as resolved.
Show resolved Hide resolved

If you already have a Kubernetes cluster with GPUs, you can skip this step.


Otherwise, follow [this tutorial](kuberay-gke-gpu-cluster-setup), but substitute the following GPU node pool creation command to create a Kubernetes cluster on GKE with four Nvidia T4 GPUs:

```sh
gcloud container node-pools create gpu-node-pool \
--accelerator type=nvidia-tesla-t4,count=4,gpu-driver-version=default \
--zone us-west1-b \
--cluster kuberay-gpu-cluster \
--num-nodes 1 \
--min-nodes 0 \
--max-nodes 1 \
--enable-autoscaling \
--machine-type n1-standard-64
```

This example uses four [Nvidia T4](https://cloud.google.com/compute/docs/gpus#nvidia_t4_gpus) GPUs. The machine type is `n1-standard-64`, which has [64 vCPUs and 240 GB RAM](https://cloud.google.com/compute/docs/general-purpose-machines#n1_machine_types).

## Step 1: Install the KubeRay Operator
kevin85421 marked this conversation as resolved.
Show resolved Hide resolved

Follow [this document](kuberay-operator-deploy) to install the latest stable KubeRay operator from the Helm repository.

It should be scheduled on the CPU pod.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
It should be scheduled on the CPU pod.
Schedule it on the CPU pod.


## Step 2: Submit the RayJob

Create the RayJob custom resource. The RayJob spec is defined in [ray-job.batch-inference.yaml](https://github.com/ray-project/kuberay/blob/master/ray-operator/config/samples/ray-job.batch-inference.yaml).

Download the file with `curl`:

```bash
curl -LO https://raw.githubusercontent.com/ray-project/kuberay/master/ray-operator/config/samples/ray-job.batch-inference.yaml
```

Note that the `RayJob` spec contains a spec for the `RayCluster` that is to be created for the job. For this tutorial, we use a single-node cluster with 4 GPUs. For production use cases, we recommend using a multi-node cluster where the head node does not have GPUs, so that Ray can automatically schedule GPU workloads on worker nodes and they won't interfere with critical Ray processes on the head node.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Note that the `RayJob` spec contains a spec for the `RayCluster` that is to be created for the job. For this tutorial, we use a single-node cluster with 4 GPUs. For production use cases, we recommend using a multi-node cluster where the head node does not have GPUs, so that Ray can automatically schedule GPU workloads on worker nodes and they won't interfere with critical Ray processes on the head node.
Note that the `RayJob` spec contains a spec for the `RayCluster` that you need to create for the job. This tutorial, uses a single-node cluster with 4 GPUs. For production use cases, use a multi-node cluster where the head node does not have GPUs, so that Ray can automatically schedule GPU workloads on worker nodes that won't interfere with critical Ray processes on the head node.


Note the following fields in the `RayJob` spec, which specify the Ray image and the GPU resources for the Ray node:

```yaml
spec:
containers:
- name: ray-head
image: rayproject/ray-ml:2.6.3-gpu
resources:
kevin85421 marked this conversation as resolved.
Show resolved Hide resolved
limits:
nvidia.com/gpu: "4"
cpu: "54"
memory: "54Gi"
requests:
nvidia.com/gpu: "4"
cpu: "54"
memory: "54Gi"
volumeMounts:
- mountPath: /home/ray/samples
name: code-sample
nodeSelector:
cloud.google.com/gke-accelerator: nvidia-tesla-t4 # This is the GPU type we used in the GPU node pool.
```

To submit the job, run the following command:

```bash
kevin85421 marked this conversation as resolved.
Show resolved Hide resolved
kubectl apply -f ray-job.batch-inference.yaml
```

Check the status with `kubectl describe rayjob rayjob-sample`.

Sample output:

```
[...]
Status:
Dashboard URL: rayjob-sample-raycluster-j6t8n-head-svc.default.svc.cluster.local:8265
End Time: 2023-08-22T22:48:35Z
Job Deployment Status: Running
Job Id: rayjob-sample-ft8lh
Job Status: SUCCEEDED
Message: Job finished successfully.
Observed Generation: 2
Ray Cluster Name: rayjob-sample-raycluster-j6t8n
Ray Cluster Status:
Endpoints:
Client: 10001
Dashboard: 8265
Gcs - Server: 6379
Metrics: 8080
Head:
Pod IP: 10.112.1.3
Service IP: 10.116.1.93
Last Update Time: 2023-08-22T22:47:44Z
Observed Generation: 1
State: ready
Start Time: 2023-08-22T22:48:02Z
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Created 36m rayjob-controller Created cluster rayjob-sample-raycluster-j6t8n
Normal Created 32m rayjob-controller Created k8s job rayjob-sample
```

To view the logs, first find the name of the pod running the job with `kubectl get pods`.

Sample output:

```bash
NAME READY STATUS RESTARTS AGE
kuberay-operator-8b86754c-r4rc2 1/1 Running 0 25h
rayjob-sample-raycluster-j6t8n-head-kx2gz 1/1 Running 0 35m
rayjob-sample-w98c7 0/1 Completed 0 30m
```

The Ray cluster is still running because `shutdownAfterJobFinishes` is not set in the `RayJob` spec. If you set `shutdownAfterJobFinishes` to `true`, the cluster is shut down after the job finishes.

Next, run:

```text
kubetcl logs rayjob-sample-w98c7
```

to get the standard output of the `entrypoint` command for the `RayJob`. Sample output:

```text
[...]
Running: 62.0/64.0 CPU, 4.0/4.0 GPU, 955.57 MiB/12.83 GiB object_store_memory: 0%| | 0/200 [00:05<?, ?it/s]
Running: 61.0/64.0 CPU, 4.0/4.0 GPU, 999.41 MiB/12.83 GiB object_store_memory: 0%| | 0/200 [00:05<?, ?it/s]
Running: 61.0/64.0 CPU, 4.0/4.0 GPU, 999.41 MiB/12.83 GiB object_store_memory: 0%| | 1/200 [00:05<17:04, 5.15s/it]
Running: 61.0/64.0 CPU, 4.0/4.0 GPU, 1008.68 MiB/12.83 GiB object_store_memory: 0%| | 1/200 [00:05<17:04, 5.15s/it]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a bit weird: 1/200 -> 1/1.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, it's also a bit weird that out of all five of the samples there are only two distinct memory locations (and they're all labeled "tench"). @amogkam any ideas about this (or do you know who might know?) Here's the code we're running https://github.com/ray-project/kuberay/pull/1361/files#diff-730a5adb3d338965921ab6f6faa635f5a08f93c69b6e5ab2806f6a97a168b2daR47

Running: 61.0/64.0 CPU, 4.0/4.0 GPU, 1008.68 MiB/12.83 GiB object_store_memory: 100%|██████████| 1/1 [00:05<00:00, 5.15s/it]

2023-08-22 15:48:33,905 WARNING actor_pool_map_operator.py:267 -- To ensure full parallelization across an actor pool of size 4, the specified batch size should be at most 5. Your configured batch size for this operator was 16.
<PIL.Image.Image image mode=RGB size=500x375 at 0x7B37546CF7F0>
Label: tench, Tinca tinca
<PIL.Image.Image image mode=RGB size=500x375 at 0x7B37546AE430>
Label: tench, Tinca tinca
<PIL.Image.Image image mode=RGB size=500x375 at 0x7B37546CF430>
Label: tench, Tinca tinca
<PIL.Image.Image image mode=RGB size=500x375 at 0x7B37546AE430>
Label: tench, Tinca tinca
<PIL.Image.Image image mode=RGB size=500x375 at 0x7B37546CF7F0>
Label: tench, Tinca tinca
2023-08-22 15:48:36,522 SUCC cli.py:33 -- -----------------------------------
2023-08-22 15:48:36,522 SUCC cli.py:34 -- Job 'rayjob-sample-ft8lh' succeeded
2023-08-22 15:48:36,522 SUCC cli.py:35 -- -----------------------------------
```
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# RayJob Quickstart

:::{warning}
RayJob support in KubeRay is in alpha. Ongoing improvements are possible in the future releases.
RayJob support in KubeRay v0.x is in alpha.
:::

## Prerequisites
Expand Down
45 changes: 11 additions & 34 deletions doc/source/cluster/kubernetes/user-guides/gcp-gke-gpu-cluster.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

# Start Google Cloud GKE Cluster with GPUs for KubeRay

See <https://cloud.google.com/kubernetes-engine/docs/how-to/gpus> for full details, or continue reading for a quick start.
kevin85421 marked this conversation as resolved.
Show resolved Hide resolved

## Step 1: Create a Kubernetes cluster on GKE

Run this command and all following commands on your local machine or on the [Google Cloud Shell](https://cloud.google.com/shell). If running from your local machine, you will need to install the [Google Cloud SDK](https://cloud.google.com/sdk/docs/install). The following command creates a Kubernetes cluster named `kuberay-gpu-cluster` with 1 CPU node in the `us-west1-b` zone. In this example, we use the `e2-standard-4` machine type, which has 4 vCPUs and 16 GB RAM.
Run this command and all following commands on your local machine or on the [Google Cloud Shell](https://cloud.google.com/shell). If running from your local machine, you need to install the [Google Cloud SDK](https://cloud.google.com/sdk/docs/install). The following command creates a Kubernetes cluster named `kuberay-gpu-cluster` with 1 CPU node in the `us-west1-b` zone. This example uses the `e2-standard-4` machine type, which has 4 vCPUs and 16 GB RAM.

```sh
gcloud container clusters create kuberay-gpu-cluster \
Expand All @@ -16,37 +18,29 @@ gcloud container clusters create kuberay-gpu-cluster \

## Step 2: Create a GPU node pool

Run the following command to create a GPU node pool for Ray GPU workers.
(You can also create it from the Google Cloud Console; see the [GKE documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/node-taints#create_a_node_pool_with_node_taints) for more details.)
Run the following command to create a GPU node pool for Ray GPU workers. You can also create it from the Google Cloud Console: <https://cloud.google.com/kubernetes-engine/docs/how-to/gpus#console>

```sh
gcloud container node-pools create gpu-node-pool \
architkulkarni marked this conversation as resolved.
Show resolved Hide resolved
--accelerator type=nvidia-l4-vws,count=1 \
--accelerator type=nvidia-l4-vws,count=1,gpu-driver-version=default \
--zone us-west1-b \
--cluster kuberay-gpu-cluster \
--num-nodes 1 \
--min-nodes 0 \
--max-nodes 1 \
--enable-autoscaling \
--machine-type g2-standard-4 \
--node-taints=ray.io/node-type=worker:NoSchedule
```

The `--accelerator` flag specifies the type and number of GPUs for each node in the node pool. In this example, we use the [NVIDIA L4](https://cloud.google.com/compute/docs/gpus#l4-gpus) GPU. The machine type `g2-standard-4` has 1 GPU, 24 GB GPU Memory, 4 vCPUs and 16 GB RAM.
architkulkarni marked this conversation as resolved.
Show resolved Hide resolved
The `--accelerator` flag specifies the type and number of GPUs for each node in the node pool. This example uses the [NVIDIA L4](https://cloud.google.com/compute/docs/gpus#l4-gpus) GPU. The machine type `g2-standard-4` has 1 GPU, 24 GB GPU Memory, 4 vCPUs and 16 GB RAM.

The taint `ray.io/node-type=worker:NoSchedule` prevents CPU-only Pods such as the Kuberay operator, Ray head, and CoreDNS Pods from being scheduled on this GPU node pool. This is because GPUs are expensive, so we want to use this node pool for Ray GPU workers only.
.. note::

Concretely, any Pod that does not have the following toleration will not be scheduled on this GPU node pool:
GKE automatically installs the GPU drivers for you. For more details, see [GKE documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/gpus#create-gpu-pool-auto-drivers).

```yaml
tolerations:
- key: ray.io/node-type
operator: Equal
value: worker
effect: NoSchedule
```
.. note::

For more on taints and tolerations, see the [Kubernetes documentation](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/).
GKE automatically configures taints and tolerations so that only GPU pods are scheduled on GPU nodes. For more details, see [GKE documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/gpus#create)

## Step 3: Configure `kubectl` to connect to the cluster

Expand All @@ -56,21 +50,4 @@ Run the following command to download Google Cloud credentials and configure the
gcloud container clusters get-credentials kuberay-gpu-cluster --zone us-west1-b
```

For more details, see the [GKE documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl).

## Step 4: Install NVIDIA GPU device drivers
architkulkarni marked this conversation as resolved.
Show resolved Hide resolved

This step is required for GPU support on GKE. See the [GKE documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/gpus#installing_drivers) for more details.

```sh
# Install NVIDIA GPU device driver
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded-latest.yaml

# Verify that your nodes have allocatable GPUs
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"

# Example output:
# NAME GPU
# gke-kuberay-gpu-cluster-gpu-node-pool-xxxxx 1
# gke-kuberay-gpu-cluster-default-pool-xxxxx <none>
```
For more details, see [GKE documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-access-for-kubectl).
7 changes: 7 additions & 0 deletions doc/source/ray-overview/examples.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1402,3 +1402,10 @@ Ray Examples
:link-type: ref

Distributed Training with Hugging Face Accelelate and TorchTrainer

.. grid-item-card:: :bdg-secondary:`Code example`
:class-item: gallery-item inference huggingface cv
:link: kuberay-batch-inference-example
:link-type: ref

RayJob Batch Inference Example on Kubernetes with Ray
Loading