Ray Serve - обработка запросов не только из локальной сети
Как настроить Ray Serve таким образом, чтобы он обрабатывал не только запросы, которые пришли из локальной сети? Как задеплоить уже готовую модель?
У нас в компании поднят кластер Ray, состоящий из 2х виртуальных машин. Я на них задеплоил простейшую модельку на кластер со своей рабочей машины и тут же пытаюсь получить ответ:
import ray
import requests
from ray import serve
from typing import Dict
from starlette.requests import Request
ray.init(address='ray://xxx.xx.xxx.xx:10001')
xxx.xx.xxx.xx:10001 - хост:порт хед ноды, к которой подключаемся
@serve.deployment(route_prefix="/some_prefix")
class model:
def __init__(self, msg: str):
# Initialize model state: could be very large neural net weights.
self._msg = msg
def __call__(self, request: Request) -> Dict:
return {"result": self._msg}
serve.run(model.bind(msg="Hello world!"))
print(requests.get("http://yyy.yy.yyy.yy:8000/").json())
# yyy.yy.yyy.yy - порт актора, который показан на ray dashboard
# 8000 - стандартный порт, как сказано в документации
В ответ на всё это дело я получаю такую ошибку:
requests.exceptions.ConnectionError: HTTPConnectionPool(host='yyy.yy.yyy.yy', port=8000): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object
at 0x0000026A2A3C5DC0>: Failed to establish a new connection: [WinError 10061] Подключение не установлено, т.к. конечный компьютер отверг запрос на подключение'))
2023-04-05 17:55:00,067 WARNING long_poll.py:149 -- LongPollClient connection failed, shutting down.
Когда я из виртуальной машины (на которой хед нода) по localhost:8000 делаю запрос, то получаю свой заветный hello world. Вопрос №1: как можно настроить ray serve таким образом, чтобы он мог отвечать не только на вопросы из локальной сети, но и из внешней?
Вопрос №2: Есть уже рабочая модель, которая версионируется и допиливается в mlflow. Я использую обёртку @serve.deployment на классе модели, а затем вызываю метод model.bind() (или model.deploy(), без разницы, ни как не работает). Модель не проходит health_check, в логах написано "Модель с таким именем/раном/etc. не найдена", хотя она и её артефакты хранятся в репозитории mlflow и в бакетах minio. Как задеплоить её в Ray Serve?