Развертывание моделей машинного обучения в виде 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. Это обеспечивает эффективное управление моделями, их развертывание и обслуживание в производственных средах.