Развертывание моделей машинного обучения в виде RESTful API позволяет легко интегрироваться с другими приложениями и службами. Kubeflow Pipelines предоставляет платформу для создания и развертывания конвейеров машинного обучения, а KFServing — это проект с открытым исходным кодом, который упрощает развертывание моделей машинного обучения в качестве бессерверных служб логического вывода в Kubernetes. В этом руководстве мы рассмотрим, как развертывать модели как RESTful API с использованием Kubeflow Pipelines и KFServing.

Предпосылки

Прежде чем мы начнем, убедитесь, что у вас установлено и настроено следующее:

  • Трубопроводы Kubeflow
  • KFServing
  • Кластер Kubernetes
  • Питон 3.х
  • Докер

Построение модели и конвейера

Во-первых, нам нужно построить модель машинного обучения и создать конвейер для ее обучения и развертывания. В этом руководстве мы будем использовать простой пример обучения и развертывания модели анализа настроений с использованием набора данных обзоров фильмов IMDb. Мы будем использовать TensorFlow и Keras для обучения модели.

# Import libraries
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

# Load the IMDb movie reviews dataset
imdb = keras.datasets.imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
# Preprocess the data
train_data = keras.preprocessing.sequence.pad_sequences(train_data, value=0, padding='post', maxlen=250)
test_data = keras.preprocessing.sequence.pad_sequences(test_data, value=0, padding='post', maxlen=250)
# Build the model
model = keras.Sequential([
    layers.Embedding(10000, 16),
    layers.GlobalAveragePooling1D(),
    layers.Dense(16, activation='relu'),
    layers.Dense(1, activation='sigmoid')
])
# Compile the model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Train the model
model.fit(train_data, train_labels, epochs=10, batch_size=32, validation_data=(test_data, test_labels))
# Save the model
model.save('model.h5')

Определение конвейера развертывания

Далее нам нужно определить конвейер развертывания с помощью Kubeflow Pipelines. Этот конвейер будет использовать KFServing для развертывания обученной модели в виде RESTful API.

import kfp
from kfp import dsl
from kubernetes.client import V1EnvVar

@dsl.pipeline(name='Sentiment Analysis Deployment', description='Deploy the sentiment analysis model as a RESTful API')
def sentiment_analysis_pipeline(model_dir: str, api_name: str, namespace: str):
    kfserving_op = kfp.components.load_component_from_file('kfserving_component.yaml')
    # Define the deployment task
    deployment_task = kfserving_op(
        action='apply',
        model_name=api_name,
        namespace=namespace,
        storage_uri=model_dir,
        model_class='tensorflow',
        service_account='default',
        envs=[
            V1EnvVar(name='MODEL_NAME', value=api_name),
            V1EnvVar(name='NAMESPACE', value=namespace)
        ]
    )
if __name__ == '__main__':
    kfp.compiler.Compiler().compile(sentiment_analysis_pipeline, 'sentiment_analysis_pipeline.tar.gz')

Определение конвейера включает задачу развертывания, которая использует компонент KFServing для применения развертывания модели. Он указывает каталог модели, имя API и пространство имен Kubernetes для развертывания.

Развертывание модели как RESTful API

Чтобы развернуть модель как RESTful API, выполните следующие действия:

Создайте образ Docker для модели:

docker build -t sentiment-analysis-model:latest .

Отправьте образ Docker в реестр контейнеров:

docker push <registry>/<namespace>/sentiment-analysis-model:latest

Создайте файл YAML для конфигурации KFServing, например, kfserving.yaml:

apiVersion: serving.kubeflow.org/v1alpha2
kind: InferenceService
metadata:
  name: sentiment-analysis
spec:
  default:
    predictor:
      tensorflow:
        storageUri: <registry>/<namespace>/sentiment-analysis-model:latest

Разверните модель как RESTful API с помощью KFServing:

kubectl apply -f kfserving.yaml

Получите доступ к RESTful API:

kubectl get inferenceservice sentiment-analysis

# Get the service URL
kubectl get inferenceservice sentiment-analysis -o jsonpath='{.status.url}'

С моделью, развернутой как RESTful API, теперь вы можете делать прогнозы, отправляя HTTP-запросы на URL-адрес службы.

В этом руководстве мы рассмотрели, как развертывать модели машинного обучения в виде RESTful API с использованием Kubeflow Pipelines и KFServing. Мы построили модель анализа тональности, определили конвейер развертывания с помощью Kubeflow Pipelines и использовали KFServing для развертывания модели как RESTful API в кластере Kubernetes. Такой подход позволяет легко интегрировать модели машинного обучения в приложения и сервисы, что позволяет делать прогнозы и выводы в реальном времени.

Комбинируя Kubeflow Pipelines и KFServing, вы можете упростить процесс обучения и развертывания моделей машинного обучения в виде масштабируемых и надежных API-интерфейсов RESTful в Kubernetes. Это обеспечивает эффективное управление моделями, их развертывание и обслуживание в производственных средах.