RayService 快速入门#
先决条件#
本指南专注于 Ray Serve 多应用 API,该 API 自 Ray 版本 2.4.0 起可用。本指南主要关注 KubeRay v1.1.1 和 Ray 2.9.0 的行为。
Ray 2.4.0 或更新版本。
KubeRay 0.6.0, KubeRay nightly, 或更新版本。
什么是 RayService?#
RayService 管理这些组件:
RayCluster:管理 Kubernetes 集群中的资源。
Ray Serve 应用: 管理用户的应用。
RayService 提供了什么?#
Kubernetes 原生支持 Ray 集群和 Ray Serve 应用: 在使用 Kubernetes 配置定义 Ray 集群及其 Ray Serve 应用后,您可以使用
kubectl
来创建集群及其应用。Ray Serve 应用程序的就地更新: 更多详情请参见 RayService。
Ray 集群的零停机升级: 更多详情请参见 RayService。
高可用服务: 详情请参阅 RayService 高可用性。
示例:使用 RayService 提供两个简单的 Ray Serve 应用程序#
步骤 1:使用 Kind 创建一个 Kubernetes 集群#
kind create cluster --image=kindest/node:v1.26.0
步骤 2:安装 KubeRay 操作员#
按照 此文档 从 Helm 仓库安装最新稳定版的 KubeRay 操作员。请注意,此示例中的 YAML 文件使用 serveConfigV2
来指定多应用程序 Serve 配置,该功能从 KubeRay v0.6.0 开始可用。
步骤 3:安装 RayService#
kubectl apply -f https://raw.githubusercontent.com/ray-project/kuberay/v1.1.1/ray-operator/config/samples/ray-service.sample.yaml
步骤 4:验证 Kubernetes 集群状态#
# Step 4.1: List all RayService custom resources in the `default` namespace.
kubectl get rayservice
# [Example output]
# NAME AGE
# rayservice-sample 2m42s
# Step 4.2: List all RayCluster custom resources in the `default` namespace.
kubectl get raycluster
# [Example output]
# NAME DESIRED WORKERS AVAILABLE WORKERS STATUS AGE
# rayservice-sample-raycluster-6mj28 1 1 ready 2m27s
# Step 4.3: List all Ray Pods in the `default` namespace.
kubectl get pods -l=ray.io/is-ray-node=yes
# [Example output]
# ervice-sample-raycluster-6mj28-worker-small-group-kg4v5 1/1 Running 0 3m52s
# rayservice-sample-raycluster-6mj28-head-x77h4 1/1 Running 0 3m52s
# Step 4.4: List services in the `default` namespace.
kubectl get services
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# ...
# rayservice-sample-head-svc ClusterIP 10.96.34.90 <none> 10001/TCP,8265/TCP,52365/TCP,6379/TCP,8080/TCP,8000/TCP 4m58s
# rayservice-sample-raycluster-6mj28-head-svc ClusterIP 10.96.171.184 <none> 10001/TCP,8265/TCP,52365/TCP,6379/TCP,8080/TCP,8000/TCP 6m21s
# rayservice-sample-serve-svc ClusterIP 10.96.161.84 <none> 8000/TCP 4m58s
当 Ray Serve 应用程序健康且准备就绪时,KubeRay 为 RayService 自定义资源创建一个头部服务和一个 Ray Serve 服务。例如,第 4.4 步中的 rayservice-sample-head-svc
和 rayservice-sample-serve-svc
。
步骤 5:验证 Serve 应用程序的状态#
# (1) Forward the dashboard port to localhost.
# (2) Check the Serve page in the Ray dashboard at http://localhost:8265/#/serve.
kubectl port-forward svc/rayservice-sample-head-svc 8265:8265
有关 RayService 可观测性的更多详情,请参阅 rayservice-troubleshooting.md。以下是 Ray 仪表板中 Serve 页面的截图示例。
步骤6:通过Kubernetes服务向Serve应用程序发送请求#
# Step 6.1: Run a curl Pod.
# If you already have a curl Pod, you can use `kubectl exec -it <curl-pod> -- sh` to access the Pod.
kubectl run curl --image=radial/busyboxplus:curl -i --tty
# Step 6.2: Send a request to the fruit stand app.
curl -X POST -H 'Content-Type: application/json' rayservice-sample-serve-svc:8000/fruit/ -d '["MANGO", 2]'
# [Expected output]: 6
# Step 6.3: Send a request to the calculator app.
curl -X POST -H 'Content-Type: application/json' rayservice-sample-serve-svc:8000/calc/ -d '["MUL", 3]'
# [Expected output]: "15 pizzas please!"
步骤 7:清理 Kubernetes 集群#
# Delete the RayService.
kubectl delete -f https://raw.githubusercontent.com/ray-project/kuberay/v1.1.1/ray-operator/config/samples/ray-service.sample.yaml
# Uninstall the KubeRay operator.
helm uninstall kuberay-operator
# Delete the curl Pod.
kubectl delete pod curl
下一步#
请参阅 RayService 文档以获取 RayService 功能的完整列表,包括就地更新、零停机升级和高可用性。
如果在使用过程中遇到任何问题,请参阅 RayService 故障排除指南。
更多 RayService 示例请参见 示例。MobileNet 示例 是一个很好的起点,因为它不需要 GPU 并且易于在本地机器上运行。