Эта статья перенесена из сердца машины, автор: Адриен Трей, сердце машины, участие: черт же, если есть какие-то нарушения, то можно удалить.
Насколько сложно разработчику машинного обучения создать приложение? По сути, вам нужно знать только код Python, а всю остальную работу можно передать инструменту. Недавно соучредитель Streamlit Адриан Трей написал статью о разработанной им среде разработки инструментов машинного обучения — Streamlit, которая представляет собой бесплатную среду разработки приложений с открытым исходным кодом, созданную для инженеров по машинному обучению. Этот инструмент обновляет ваше приложение в режиме реального времени, когда вы пишете код Python. В настоящее время GitHub Star of Streamlit превысил 3400, а популярность на medim достигла 9000+.
Веб-сайт Streamlit:https://streamlit.io/
Адрес гитхаба:https://github.com/streamlit/streamlit/
В 300 строках кода Python запрограммируйте семантический поисковик, который выполняет вывод нейронной сети в режиме реального времени..
По моему опыту, каждый нетривиальный проект машинного обучения собирается с использованием полных ошибок и сложных в обслуживании внутренних инструментов. Эти инструменты обычно написаны в Jupyter Notebooks и приложениях Flask, их сложно развернуть, они требуют анализа архитектуры клиент-сервер (архитектура C/S) и плохо интегрируются с компонентами машинного обучения, такими как сеансы графического процессора Tensorflow.
Первый раз я видел такие инструменты в университете Карнеги Меллона, а затем в Беркли, Google X, Zoox см.. Эти инструменты изначально являются небольшими ноутбуками Jupyter: Sensor Calibration Tool, контрастность приложения для симуляции, приложение для выравнивания лазерного радара, воспроизводимые сцены.
Когда инструмент становится все более и более важным, в дело вступает менеджер проекта: процессы и требования продолжают расти. Эти отдельные проекты превратились в сценарии кода и постепенно превратились в длительные «кошмары обслуживания»…
Процесс создания приложения инженером по машинному обучению (специально).
И когда инструмент имеет решающее значение, мы формируем группу инструментов. Они умело пишут на Vue и React, а на их ноутбуках есть наклейки с декларативными фреймворками. Процесс их проектирования выглядит примерно так:
Процесс, с помощью которого команда инструментов создает приложение (чистое и аккуратное, начиная с нуля)..
Это фантастика!但是所有这些工具都需要新功能,比如每周上线新功能。然而工具团队可能同时支持 10 多个项目,他们会说:「我们会在两个月内更新您的工具。」
Мы возвращаемся к предыдущему процессу создания наших собственных инструментов: развертывание приложения Flask, написание HTML, CSS и JavaScript, попытка контролировать версии всего, от блокнотов до таблиц стилей. Мой друг Тьяго Тейшейра, работающий в Google X, и я начали думать: что, если бы создавать инструменты было так же просто, как писать скрипты на Python?
Мы хотим, чтобы инженеры по машинному обучению создавали отличные приложения без команды разработчиков. Эти внутренние инструменты должны стать естественными побочными продуктами рабочих процессов машинного обучения. Написание таких инструментов похоже на обучение нейронной сети или выполнение специального анализа в Jupyter! В то же время мы также хотели сохранить гибкость мощной платформы приложений. Мы хотим создавать отличные инструменты, которыми инженеры могли бы гордиться.
Наш желаемый процесс сборки приложения выглядит следующим образом:
Процесс сборки приложения Streamlit.
Вместе с инженерами из Uber, Twitter, Stitch Fix, Dropbox и других компаний мы потратили год на создание Streamlit, бесплатной среды приложений с открытым исходным кодом для инженеров по машинному обучению. Независимо от прототипа, основные принципы Streamlit проще и чище.
Основные принципы Streamlit заключаются в следующем:
- Примите Python
Приложения Streamlit — это полностью нисходящие сценарии без скрытого состояния. Вы можете использовать вызовы функций для обработки кода. Пока вы можете писать сценарии Python, вы можете писать приложения Streamlit. Например, вы можете написать на экран следующим образом:
import streamlit as stst.write('Hello, world!')
- Рассматривайте виджеты как переменные
В Streamlit нет обратного вызова! Каждое взаимодействие просто перезапускает сценарий сверху вниз. Этот метод делает код очень чистым:
import streamlit as stx = st.slider('x')
st.write(x, 'squared is', x * x)
Интерактивное приложение Streamlit, написанное в 3 строки кода.
- Повторное использование данных и расчетов
Что делать, если вы хотите загрузить большие объемы данных или выполнить сложные вычисления? Ключевым моментом является безопасное повторное использование информации при нескольких запусках. Streamlit представляет примитив кэша, который действует как постоянное неизменяемое хранилище данных по умолчанию, позволяя приложениям Streamlit повторно использовать информацию легко и безопасно. Например, следующий код взят только из проекта беспилотного вождения Udacity (GitHub.com/Ubig city/Сатир…приложение:
* Используйте st.cache для сохранения данных при нескольких запусках Streamlit. Инструкции по запуску кода см.gist.GitHub.com/Слишком горячий пользовательский интерфейс/С 6…
Вывод запуска примера st.cache выше.
Вкратце рабочий процесс Streamlit выглядит следующим образом:
-
Каждое взаимодействие с пользователем требует запуска всего сценария с нуля.
-
Streamlit присваивает каждой переменной последнее значение в зависимости от состояния виджета.
-
Кэширование гарантирует, что Streamlit повторно использует данные и вычисления.
Как показано ниже:
Триггер пользовательского события Streamlit запускает сценарий с самого начала. Держите только в разных операциях.
Если вам интересно, вы можете попробовать прямо сейчас! Просто запустите следующую строку:
Веб-браузер автоматически откроется и перенаправит вас к собственному приложению Streamlit. Если окно браузера не появляется, просто нажмите на ссылку.
Эти идеи изящны, но эффективны, и использование Streamlit не помешает вам создавать многофункциональные и полезные приложения. Когда я работал в Zoox и Google X, я наблюдал, как проекты беспилотных автомобилей превращаются в гигабайты визуальных данных, которые необходимо искать и понимать, включая запуск моделей на данных изображений для сравнения производительности. Над каждым проектом беспилотного автомобиля, который я вижу, работает целая команда.
Создать такие инструменты в Streamlit очень просто. Следующая демонстрация Streamlit может выполнять семантический поиск по всему набору фотографий беспилотных автомобилей Udacity, визуализировать аннотированные человеком метки достоверности и запускать полную нейронную сеть (YOLO) в режиме реального времени в приложении.
Написано 300 строк кода Streamlit, демо-привязка семантического поиска и интерактивная визуальная оценка нейронной сети.
Все приложение состоит всего из 300 строк кода Python, большая часть из которых — код машинного обучения. На самом деле во всем приложении всего 23 вызова Streamlit. Вы можете попробовать:
Когда мы работали с командами по машинному обучению над их проектами, мы поняли, что эти простые идеи дают ряд важных преимуществ:
Приложения Streamlit — это чистые файлы Python. Вы можете использовать свой любимый редактор и отладчик.
Мне нравится использовать редактор VSCode (слева) и Chrome (справа) при создании приложений с помощью Streamlit..
Чистый код Python может быть беспрепятственно с другим программным обеспечением управления GIT Source, включая коммиты, запросы, проблемы и комментарий потянуть. Поскольку TreamLit основной язык - это Python, поэтому вы можете воспользоваться этими бесплатными инструментами совместной работы.
Приложение Streamlit представляет собой скрипт Python, поэтому вы можете легко выполнять контроль версий с помощью Git..
Streamlit предоставляет среду программирования непосредственного режима. Когда Streamlit обнаружит изменения в исходном файле, просто нажмите «Всегда перезапускать».
Нажмите «Всегда перезапускать», чтобы обеспечить программирование в реальном времени..
Кэширование упрощает процесс расчета. Цепочка функций кэширования автоматически создает эффективный поток вычислений! Вы можете попробовать следующий код:
Простой поток вычислений в *Streamlit. Запустите приведенный выше код, см. инструкции:gist.GitHub.com/Слишком горячий интерфейс/AC…
По сути, процесс включает в себя такие шаги, как загрузка метаданных для создания сводки (load_metadata → create_summary). Streamlit нужно пересчитывать только подмножество процесса каждый раз, когда запускается скрипт.
Чтобы приложение оставалось исполняемым, Streamlit вычисляет только те части, которые необходимы для обновления пользовательского интерфейса..
Streamlit доступен для графических процессоров. Streamlit обеспечивает прямой доступ к примитивам машинного уровня (таким как TensorFlow, PyTorch) и дополняет эти библиотеки. Например, в приведенной ниже демонстрации в кэше Streamlit хранится весь PGGAN NVIDIA. Такой подход позволяет приложению практически мгновенно делать выводы, когда пользователь обновляет левый ползунок.
Это приложение Streamlit демонстрирует эффекты NVIDIA PGGAN с использованием TL-GAN..
Streamlit — это бесплатная библиотека с открытым исходным кодом, а не частное веб-приложение. Вы можете развернуть приложение Streamlit локально, не связываясь с нами заранее. Вы даже можете запускать Streamlit локально на своем ноутбуке без подключения к Интернету. Кроме того, существующие проекты также могут постепенно использовать Streamlit.
Несколько способов постепенного использования Streamlit.
Вышеизложенное — лишь верхушка айсберга возможностей Streamlit. Одна из самых захватывающих вещей в этом заключается в том, что эти примитивы могут легко создавать сложные приложения, которые выглядят как простые сценарии. Это будет связано с принципами работы и функциями архитектуры, которые не будут обсуждаться в этой статье.
Иллюстрация компонентов Streamlit.
Мы рады поделиться Streamlit с сообществом и надеемся, что это поможет вам легко превратить ваши скрипты Python в красивые и функциональные приложения для машинного обучения.
Оригинальная ссылка:https://towardsdatascience.com/coding-ml-tools-like-you-code-ml-models-ddba3357eace
использованная литература:
[1] J. Redmon and A. Farhadi, YOLOv3: An Incremental Improvement (2018), arXiv.
[2] T. Karras, T. Aila, S. Laine, and J. Lehtinen, Progressive Growing of GANs for Improved Quality, Stability, and Variation (2018), ICLR.
[3] S. Guan, Controlled image synthesis and editing using a novel TL-GAN model (2018), Insight Data Science Blog.