В заметке я расскажу как до определенного уровня использования бесплатно задеплоить модель и на заморачиваться с написанием микросервиса. Отмечу, что такое решение легко интегрируется, например, в веб-сервис. Всё, что вам нужно это использовать Google Cloud Functions.
Google Cloud Functions это serverless подход, т.е. серверные услуги предоставляются без аренды или покупки оборудования. При таком подходе управлением ресурсами инфраструктуры, её настройкой и обслуживанием занимается провайдер.
Основной плюс Google Cloud Functions это автоматическая масштабируемость, высокая доступность и отказоустойчивость.
Цены
Цены на Google Cloud Functions зависят от того, как долго работает ваша функция, сколько раз она вызывается и сколько ресурсов вы выделяете для этой функции. Если ваша функция делает исходящий сетевой запрос, также взимается дополнительная плата за передачу данных. Но самая важное, что Google Cloud Functions включает бессрочный бесплатный уровень для вызовов, чтобы вы могли бесплатно экспериментировать с платформой. От себя могу отметить, что для MVP и небольших проектов бесплатного тарифа хватает с головой.
Таблица с ценами:
Вызовов в месяц | Цена/млн. |
---|
Первые 2 миллиона | Бесплатно |
Более 2 миллионов | 0,40 доллара США |
Цены на обращение к Google Cloud FunctionsВремя вычислений
Время вычислений измеряется с момента, когда ваша функция получает запрос, до момента его завершения, либо через сигнал о завершении, либо через тайм-аут, другой сбой или любое другое завершение. Время вычислений измеряется с приращением в 100 мс и округляется до ближайшего приращения. Например, функция, выполняющаяся в течение 260 мс, будет оплачиваться как 300 мс.
Более подробно можно почитать в официальной документации
Пример использования
Для одного проекта у меня была задача определять по тексту вакансии её категорию. Например: BACKEND, FRONTEND, MOBILE DEV, DESIGN, PRODUCT, DA/DS и другие. В качестве модели обучен CatBoostClassifier. Средний ROC AUC модели 0.979
Confusion Matrix на валидации:
Вот именно эту модель мы и будем деплоить с использованием Google Cloud Functions.
Настройка Google Cloud Functions
Переходим в google cloud console и нажимаем create function.
- Environment выбираем 2nd gen.
- Даём имя нашей функции, например: model1.
- В Authentication, выбираем Allow unauthenticated invocations.
- Кликаем по Next.
Затем для использования библиотек Python нам надо прописать 8080 PORT во вкладке Runtime, build, connections and security settings → BUILD
Дальше у вас есть два варианта написать код для вашей Google Cloud Function:
- Во вкладке Код можно выбрать Inline editor. И там написать код вашей функции и указать её как Entry Point.
- Можно загрузить весь код в формате zip архива. И указать так же Entry Point.
Я предпочитаю второй вариант, он гораздо проще и быстрее.
В коде стоит обратить внимание на 3 вещи:
- Использовать библиотеку functions_framework
- Использовать декоратор @functions_framework.http для вашей Entry Point функции
- Лучше не указывать версии библиотек в requirements.txt
Пример кода
@functions_framework.http
def main(request):
text = request.args.get('vactext')
corpus = remove_links_and_quotes(text)
corpus = ' '.join(re.split('\W+', corpus.lower()))
corpus = tokenize_me(corpus)
После чего кликните Deploy.
Если всё в порядке ваш сервис будет поднят. Обратить к нему нужно по URL.
В моём случае в функции используется vactext с описанием вакансии, а возвращается категория вакансии.
Заключение
Google Cloud Function — это сервис, упрощающий процесс развертывания простых функций. Весь процесс развертывания функции можно выполнить менее чем за 1 час, что делает его хорошим инструментом для работы с MVP или для функцией, где не требуется много обращений.
Дополнительный материал
https://cloud.google.com/functions
Разговоры о Data Science – закрытый канал для общения на тему карьеры, развития профессиональных навыков и применения навыков на работе.