Создание модели машинного обучения — это здорово, но превратить ее в живое веб-приложение — это совсем другая история. Необходимо принимать во внимание такие вещи, как безопасность, масштабируемость, мониторинг, управление API и возможность совместного использования. Сегодня я хочу показать вам, как вы можете легко превратить свою модель Python в живое веб-приложение, используя только знания Python, Ubiops и Streamlit. Большим преимуществом объединения этих двух вещей является то, что вам не нужно ни глубоких знаний в области ИТ, ни опыта в разработке интерфейса.

Об УбиОпс

UbiOps — это сервис SaaS, который превращает ваш код Python или R в масштабируемое живое приложение за считанные минуты. UbiOps работает с развертываниями и конвейерами. Короче говоря, UbiOps создает контейнер вокруг вашего кода, запуская его как микросервис внутри UbiOps, способный получать запросы на преобразование входных данных в выходные данные. UbiOps также создает конечную точку API для развертывания.

Также можно объединить разные развертывания в цепочку для создания конвейера, но давайте поговорим об этом в другой раз.

Что такое Стримлит?

Streamlit — это платформа приложений, созданная для инженеров машинного обучения. Самое замечательное в Streamlit то, что если вы знаете, как писать сценарии Python, вы можете создавать приложения Streamlit. Приложения Streamlit, которые вы создаете, в основном представляют собой просто сценарии, которые выполняются сверху вниз. Все это он делает без использования обратных вызовов, что дает преимущество в том, что код всегда выглядит чистым и понятным. Чтобы обеспечить безопасность и убедиться, что ваши данные легко повторно использовать, Streamlit использует примитив кэша для хранения ваших данных.

1. Вариант использования

Недавно я создал модель, которая берет написанную от руки цифру и предсказывает, какое это число. Теперь я хочу вывести свою модель на следующий шаг и превратить ее в живое веб-приложение.

В этом примере мы притворяемся, что нам нужно распознавать рукописные цифры, чтобы определить номер чьего-то банковского счета и оцифровать его.

2. Пошаговое руководство и инструкции по скрипту

Ниже я покажу наиболее важные шаги для подключения вашего файла Streamlit к вашей среде UbiOps. Показанные шаги следующие:

(1) Как подключиться к вашей среде UbiOps,

(2) Как подключить среду UbiOps к Streamlit,

(3) Как запустить приложение Streamlit.

Чтобы превратить вашу модель в работающее веб-приложение, необходимо выполнить несколько шагов. Первый — подключиться к вашей среде UbiOps, создав токен API в веб-приложении UbiOps и заполнив этот токен и имя вашего проекта.

Шаг 1) показывает, как это выглядит в коде. Шаг 2) — подключить Streamlit к вашей среде UbiOps. Это делается путем копирования того же токена API и имени проекта из шага 1) в ваш файл Streamlit. Последний шаг (3) — запустить файл Sstreamlit и увидеть, как ваше веб-приложение оживает.

1. Подключитесь к вашей среде UbiOps

API_TOKEN = '<INSERT API_TOKEN WITH PROJECT EDITOR RIGHTS>' # Make sure this is in the format "Token token-code"
PROJECT_NAME = '<INSERT PROJECT NAME IN YOUR ACCOUNT>'
DEPLOYMENT_NAME = 'mnist-streamlit'
DEPLOYMENT_VERSION = 'v1'
#import all necessary libraries:
import os
import ubiops
client = ubiops.ApiClient(ubiops.Configuration(
   api_key={'Authorization': API_TOKEN}, 
    host="https://api.ubiops.com/v2.1"
))
api = ubiops.CoreApi(client)

2. Подключите Streamlit к вашей среде UbiOps.

st.title("Streamlit and UbiOps example")

# Connect with your UbiOps environment
API_TOKEN = '<INSERT API_TOKEN WITH PROJECT EDITOR RIGHTS>' # Make sure this is in the format "Token token-code"
PROJECT_NAME = '<INSERT PROJECT NAME IN YOUR ACCOUNT>'
DEPLOYMENT_NAME = 'mnist-streamlit'
# API setup
if PROJECT_NAME and API_TOKEN and DEPLOYMENT_NAME:
    # Only reconnect if API object is not in session state
    if 'ubiops_api' not in st.session_state:
        with st.spinner("Connecting to UbiOps API"):
            configuration = ubiops.Configuration(host="https://api.ubiops.com/v2.1")
            configuration.api_key['Authorization'] = API_TOKEN
            client = ubiops.ApiClient(configuration)
            st.session_state.ubiops_api = ubiops.CoreApi(client)
            deployment_info = st.session_state.ubiops_api.deployments_get(PROJECT_NAME,DEPLOYMENT_NAME)
            print(deployment_info)
            sleep(2) # sleep for 2s to showcase progress spinners
            # Use the streamlit session to store API object
            if(st.session_state.ubiops_api.service_status().status == 'ok' ):
                st.success("Connected to UbiOps API!")
           else:
              st.error("Not connected!")

3. Запустите файл Streamlit

!streamlit run mnist-streamlit.py

После запуска файла mnist-streamlit.py и первого запроса он должен выглядеть так:

3. Подведение итогов

И это все, что нужно, чтобы превратить вашу модель в живое веб-приложение! Мы надеемся, что это поможет вам в ваших повседневных проектах.

Если у вас есть какие-либо вопросы или предложения, присоединяйтесь к сообществу Slack Channel UbiOps или свяжитесь с нашей службой поддержки.

Загрузите блокнот Jupyter здесь.