If we start Ray Serve and create a deployment in one script/process (ray.init(address = “ray://MACHINE_IP:10001”)), then it should be possible to list the Serve deployments from another script/process and get hold of the handle, given that we initialise Ray with the same ray address.
But instead we are getting the following error:
ray.serve.exceptions.RayServeException: There is no instance running on this Ray cluster. Please call `serve.start(detached=True) to start one.
I am sure there is something we are missing here, any help would be appreciated.
I agree, this should definitely be working if you are connected to the same cluster. Could you please give us a script that will reproduce the issue?
Figured out the issue. In the code below it works if I run ray.start(detached=True). If I set detached=False it does not work. Behaviour makes sense, but I think it is worth to mention this a bit more explicitly in the documentation.
The code for ray.serve.api states:
“If calling from the driver program, the Serve instance on this Ray cluster must first have been initialized using serve.start(detached=True)
.”
import time
import ray
import ray.serve as serve
ray.init(address="ray://RAY-HEAD:10001", namespace="hello")
serve.start(detached=True)
@serve.deployment
class MyFirstDeployment:
# Take the message to return as an argument to the constructor.
def __init__(self, msg):
self.msg = msg
def __call__(self, request):
return self.msg
def other_method(self, arg):
return self.msg
MyFirstDeployment.deploy("Hello world!")
# Serve will be shut down once the script exits, so keep it alive manually.
while True:
time.sleep(5)
print('Alive')