- Начало работы с 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-запрос к развернутой модели.