Model deployment infrastructure for RationAI using Ray Serve on Kubernetes.
This repository contains:
- A Helm chart (
helm/rayservice/) that renders and deploys a KubeRayRayService. - A static RayService manifest (
ray-service.yaml) for reference/manual apply workflows. - Model implementations under
models/(reference:models/binary_classifier.py). - Documentation under
docs/(MkDocs).
- MkDocs content:
docs/ - Key pages:
docs/get-started/quick-start.mddocs/guides/deployment-guide.mddocs/guides/adding-models.mddocs/guides/configuration-reference.mddocs/guides/troubleshooting.mddocs/architecture/overview.mddocs/architecture/request-lifecycle.mddocs/architecture/queues-and-backpressure.mddocs/architecture/batching.md
Full walkthrough: docs/get-started/quick-start.md.
- Kubernetes cluster with KubeRay operator installed
kubectlconfigured for the clusterhelminstalled locally
helm upgrade --install <release-name> helm/rayservice -n <namespace>
kubectl get rayservice <release-name> -n <namespace>Use a dedicated test release name (for example rayservice-model-my-model) so local testing actions do not affect a shared main deployment.
kubectl port-forward -n <namespace> svc/<release-name>-serve-svc 8000:8000The reference deployment in helm/rayservice/applications/prostate-classifier-1.yaml exposes an app at the route prefix:
/prostate-classifier-1
models/binary_classifier.py expects a request body that is LZ4-compressed raw bytes of a single RGB tile:
- dtype:
uint8 - shape:
(tile_size, tile_size, 3) - byte order: row-major (NumPy default)
Example (Python):
pip install numpy lz4 requestsimport lz4.frame
import numpy as np
import requests
tile_size = 512 # must match RayService user_config.tile_size
tile = np.zeros((tile_size, tile_size, 3), dtype=np.uint8)
payload = lz4.frame.compress(tile.tobytes())
resp = requests.post(
"http://localhost:8000/prostate-classifier-1/",
data=payload,
headers={"Content-Type": "application/octet-stream"},
timeout=60,
)
resp.raise_for_status()
print(resp.json() if resp.headers.get("content-type", "").startswith("application/json") else resp.text)helm uninstall <release-name> -n <namespace>- Issues: Report bugs or request features via GitHub Issues
- Contact: RationAI team at Masaryk University
This project is licensed under the MIT License. See the LICENSE file for details.
Developed and maintained by the RationAI team at Masaryk University, Faculty of Informatics.