- Начало работы с ML Space
- Инструкции
- Использовать GitLab CI при работе с Environments
- Развертывание и эксплуатация моделей
- Начало работы с деплоями
- Сериализовать модель для использования в Deployments
- Скрипты для прогнозирования на основе обученных моделей
- Провалидировать serving-скрипт
- Создать образ для деплоя
- Развернуть модель (создать деплой)
- Отправить синхронный HTTP-запрос к развернутой модели
- Отправить асинхронный HTTP-запрос к развернутой модели
- Тарификация
- Термины и сокращения
- Обратиться в поддержку
Скрипты для прогнозирования на основе обученных моделей
Работа с деплоями предполагает наличие в объектном хранилище S3 в каталоге с моделью serving-скрипта, который описывает, каким образом взаимодействовать с моделью. В широком смысле он загружает обученную сериализованную модель и передает ей новые входные данные для прогнозирования.
В рамках сервиса мы предлагаем использовать kserve. Он позволяет ввести модель в эксплуатацию с минимальным объемом кода.
Возможно использовать KServe или KFServing.
Пример скрипта загрузки с помощью библиотеки boto3
import kfservingimport boto3from typing import List , Dictimport reimport osimport tensorflow as tffrom tensorflow.keras.preprocessing.image import load_imgfrom tensorflow.keras.preprocessing.image import img_to_arrayfrom tensorflow.keras.models import load_modelimport numpy as npimport jsonclass KFServingExplainModel ( kfserving . KFModel ):def __init__ ( self , name : str ):super () . __init__ ( name )self . name = nameself . ready = Falseself . model = Noneself . gpu = Truedef load ( self ):self . model = load_model ( 'final_model.h5' )self . ready = Truedef predict ( self , request : Dict ) -> Dict :image_link = request [ 'instances' ][ 0 ][ 'image_link' ]img = "your_image.jpg"session = boto3 . session . Session ()s3_client = session . client (service_name = 's3' ,aws_access_key_id = 'INPUT S3 ACCESS KEY HERE' ,aws_secret_access_key = 'INPUT S3 SECRET KEY HERE' ,endpoint_url = 'INPUT S3 CREDENTIALS HERE' ,region_name = 'ru-1a')s3_client . download_file ( 'INPUT S3 BUCKETNAME CREDENTIALS HERE' , image_link , img )img = load_img ( img , target_size = ( 224 , 224 ))img = img_to_array ( img )img = img . reshape ( 1 , 224 , 224 , 3 )img = img . astype ( 'float32' )img = img - [ 123.68 , 116.779 , 103.939 ]result = self . model . predict ( img )result = result [ 0 ][ 0 ]if ( result >= 0.5 ):result = 'dog'elif ( result < 0.5 ):result = 'cat'return { "predictions" : result }if __name__ == "__main__" :x = re . compile ( '(kfserving-\d+)' ) . search ( os . environ . get ( 'HOSTNAME' ))name = "kfserving-default"if x :name = x [ 0 ]model = KFServingExplainModel ( name )model . load ()kfserving . KFServer ( workers = 1 ) . start ([ model ])
Обязательные элементы serving-скрипта:
Пользовательские библиотеки, необходимые для работы сервиса (импортируются в начале скрипта).
Метод load, в котором осуществляется, например, десериализация модели, подготовка, подгрузка в модель чекпоинтов и весов.
Метод predict, в котором осуществляется обращение к самой модели, пре- или пост-процессинг.
Пользователь переопределяет методы load и predict в соответствии с поставленной задачей. Обратите внимание на то, что в метод predict тело запроса передается в переменную request в виде словаря (Dict) с обязательным ключом instances, которому подается значение в виде списка (list).
def predict ( self , request : Dict ) -> Dict :data = { "instances" :[]}
Ключ instances может состоять из нескольких элементов. Если элементы объемные, можно передать данные в виде JSON-файла. Для этого необходимо поместить этот файл в тело запроса (опция data binary в Postman), а в методе predict в serving-скрипте прописать принципы обработки этого файла. Отправить синхронный HTTP-запрос к развернутой модели.
- Пример скрипта загрузки с помощью библиотеки boto3