ИИ сейчас так быстро растет и помогает людям во многих областях. Мы могли бы легко получить предварительно обученную модель для решения конкретной проблемы или потратить немного времени на настройку модели с новой проблемой.
Но сложность заключается в том, как развернуть модель ИИ на этапе производства, чтобы обслуживать множество запросов от клиентов.
В этой статье мы начнем с простого способа масштабного развертывания модели ИИ в микросервисной архитектуре с Seldon.
Что такое Селдон?
Это корпоративная платформа для масштабного развертывания машинного обучения (см. https://www.seldon.io/)
Это очень простой способ заставить службу поддерживать как Rest API, так и протокол gRPC для связи.
Начнем!
Во-первых, давайте подготовим простую модель ИИ от Tensorflow Hub. Мы начнем с модели обнаружения объектов, которая является очень популярной задачей.
Импорт необходим
# For running inference on the TF-Hub module. import tensorflow as tf import tensorflow_hub as hub
затем загрузите предварительно обученную модель из концентратора tensorflow. Здесь я использую модель ssd mobilenet
model_url = 'https://tfhub.dev/tensorflow/ssd_mobilenet_v2/2' hub_model = hub.load(model_url)
наконец, запустите вывод с одним изображением
import cv2 image_np = cv2.imread("Naxos_Taverna.jpg") # running inference results = hub_model(np.expand_dims(image_np, axis=0)) result = {key:value.numpy() for key,value in results.items()}
необязательно, некоторые полезные функции для визуализации результата, вы можете найти здесь
https://gist.github.com/Phelan164/262c8c50781b832ef653789d7aab2f3f
Итак, с помощью нескольких строк кода у нас есть одна модель для обнаружения объектов. Что дальше?
Разверните эту модель с помощью Seldon, чтобы создать службу, которая получает входное изображение и возвращает ответ обнаруженных объектов.
- Модель AI-оболочки с шаблоном имеет метод прогнозирования
Примечание: имя файла должно совпадать с именем класса.
### WrapperModel.py ### class WrapperModel(object): """ Model template. You can load your model parameters in __init__ from a location accessible at runtime """ def __init__(self): """ Add any initialization parameters. These will be passed at runtime from the graph definition parameters defined in your seldondeployment kubernetes resource manifest. """ print("Initializing") self.hub_model = hub.load('https://tfhub.dev/tensorflow/ssd_mobilenet_v2/2') def predict(self, X, features_names=None): """ Return a prediction. Parameters ---------- X : array-like feature_names : array of feature names (optional) """ print("Predict called - will run identity function") return self.hub_model(np.expand_dims(X, axis=0))
2. Определите Dockerfile, для которого необходимо установить seldon-core и tensorflow, tensorflow-hub.
### Dockerfile ### FROM python:3.7-slim COPY . /app WORKDIR /app RUN pip install seldon-core tensorflow tensorflow-hub EXPOSE 5000 # Define environment variable ENV MODEL_NAME WrapperModel ENV SERVICE_TYPE MODEL ENV PERSISTENCE 0 CMD exec seldon-core-microservice $MODEL_NAME --service-type $SERVICE_TYPE --persistence $PERSISTENCE
3. Создайте образ докера и запустите его.
docker build . -t seldon-example docker run -e MODEL_NAME=WrapperModel seldon-example:latest
После того, как сервис уже запущен, мы тестируем его с помощью API проверки работоспособности.
curl localhost:5000/health/ping --output - # output: @@ ?
Мы почти закончили, давайте протестируем сервис