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?


Ответы (0 шт):