Хочешь уверенно проходить IT-интервью?
Мы понимаем, как сложно подготовиться: стресс, алгоритмы, вопросы, от которых голова идёт кругом. Но с AI тренажёром всё гораздо проще.
💡 Почему Т1 тренажёр — это мастхэв?
- Получишь настоящую обратную связь: где затык, что подтянуть и как стать лучше
- Научишься не только решать задачи, но и объяснять своё решение так, чтобы интервьюер сказал: "Вау!".
- Освоишь все этапы собеседования, от вопросов по алгоритмам до диалога о твоих целях.
Зачем листать миллион туториалов? Просто зайди в Т1 тренажёр, потренируйся и уверенно удиви интервьюеров. Мы не обещаем лёгкой прогулки, но обещаем, что будешь готов!
Реклама. ООО «Смарт Гико», ИНН 7743264341. Erid 2VtzqwP8vqy
Что такое Gradio?
Gradio — это пакет Python с открытым исходным кодом, который позволяет быстро создавать простые в использовании настраиваемые компоненты пользовательского интерфейса для вашей модели машинного обучения, любого API или даже произвольной функции Python с помощью нескольких строк кода. Вы можете интегрировать графический интерфейс Gradio непосредственно в Jupyter notebook или поделиться им в виде ссылки с кем угодно.
Установка Gradio
Gradio можно установить с помощью PIP из командной строки или в Google Colab, используя:
Если вы используете Jupyter Notebook, вы также можете использовать:
Как запускать приложения Gradio
Теперь, когда в системе установлен Gradio, покажем, как запускать приложения Gradio.
Рассмотрим простое приложение на Python, которое принимает имя пользователя в качестве входных данных и генерирует приветственное сообщение для пользователя:
Запуск приложений Gradio в командной строке
Вы можете запустить приложение с помощью командной строки. Мы рассмотрим все параметры приложения позже. В командной строке запустите:
Чтобы вывести на экран приложение, откройте URL-адрес: http://127.0.0.1:7862. У вас визуализация может отличаться.
При выполнении приведенного выше кода у вас должно получиться что-то похожее на приведенный ниже результат:
Данное изображение и все остальные взяты отсюда.
Запустите приложение Gradio из Jupyter Notebook
Кроме того, вы можете запустить свой код в Jupyter Notebook. После создания интерфейса вы можете запустить приложение, вызвав функцию launch()
с помощью app.launch()
.
Будет создан новый виджет.
Класс Interface
Interface
— основной класс высокого уровня позволяет создавать графический интерфейс для функций и моделей машинного обучения.
В приложении выше, класс Interface имеет три обязательных параметра: Interface(fn, inputs, outputs, ...).
Fn — это произвольная функция или модель машинного обучения, обернутая интерфейсом Gradio. Функция принимает как минимум один параметр и возвращает одно или несколько значений:
- Inputs — определяет тип(ы) компонента ввода. Gradio предоставляет множество готовых компонентов, таких как
text
,image
илиmic
. Количество компонентов ввода должно соответствовать количеству параметров, указанных вfn
. Если для входных компонентов установлено значениеNone
, отображаются только компоненты вывода. - Outputs — указывает тип(ы) компонента вывода. Gradio предоставляет множество готовых компонентов вывода, таких как
image
,text
илиlabel
. Количество выходных компонентов должно совпадать с количеством значений, которые выводитfn
. Если для компонентов вывода установлено значениеNone
, отображаются только компоненты ввода.
Дополнительные параметры и их функции представлены в документации Gradio .
Если вы создали несколько интерфейсов, то у Gradio как раз есть такие классы, как TabbedInterface
, Parallel
и Series
, для объединения интерфейсов.
Например, для приложения-приветствия мы можем определить другую произвольную функцию, которая отображает то, что пользователь хотел бы сделать и использовать TabbedInterface
для объединения интерфейсов.
В результате виджет будет таким:
Компоненты Gradio
Gradio содержит готовые компоненты для различных функций. Компоненты варьируются от текста и мультимедиа, таких как аудио, изображения и видео, до диаграмм, созданных с использованием таких пакетов, как Plotly и Altair.
В этом разделе мы рассмотрим, как Gradio отображает различные компоненты.
Отображение текста в Gradio
Текст можно отобразить с помощью gradio.Text
или gradio.Textbox
. Каждый метод предоставляет область для ввода строкового ввода или отображения строкового вывода.
Отображение данных в Gradio
Такие типы данных, как «str», «number», «bool», «date» и «markdown», могут отображаться в Gradio. По умолчанию вы получите Pandas DataFrame.
Вы можете получить другие типы данных, указав желаемый тип вывода. Например, массив NumPy может быть получен при указании numpy
, а array
– для массива Python.
Отображение мультимедиа в Gradio
Вы можете отображать медиафайлы, например, изображения, в Gradio. Кроме того, вы можете преобразовывать изображения с помощью фильтров, например, сепия или фильтр синего оттенка. Чтобы вывести на экран различные типы мультимедиа, нужно передать в качестве входных данных Image
, Video
, Audio
или File
.
В приведенном ниже примере показано, как визуализировать изображение после применения фильтра синего оттенка.
Кроме того, вы можете отображать видеофайлы без какой-либо предварительной обработки следующим образом:
Отображение кода в Gradio
Используйте gradio.Textbox
для отображения кода.
Отображение прогресса и статуса в Gradio
Мы показываем ход и состояние ожидающего процесса, указывая show_progress = True
в компонентах, поддерживающих change()
.
Например, в gradio.Textbox.change()
или gradio.Slider.change()
.
Статус основного процесса отображается в параметре status_tracker
в change()
В приведенном выше приложении использование show_progress = False
дает следующий результат:
Отображение диаграмм в Gradio
Элементы диаграммы отображаются в Gradio с помощью gradio.Plot()
. После создания диаграммы вы можете указать fn = your_ploting_function
, input = None
и output = gradio.Plot()
.
Plotly
Получатели событий Grade
Получатель событий запускает заранее определенный процесс в случае наступления конкретного события. Следовательно, разные компоненты имеют разных получателей событий. Например, компонент gradio.Video()
поддерживает получателя события play()
, срабатывающего, когда пользователь нажимает кнопку play, а gradio.Text()
поддерживает получателя события change()
, который изменяет текст по мере ввода.
Потоковые компоненты в Gradio
Во время потоковой передачи данные непрерывно отправляются на серверную часть, в то время как Interface
работает непрерывно. У некоторых компонентов, например, Audio
, есть режим потоковой передачи в режиме микрофона, а у компонента Image
– режим веб-камеры.
Во время потоковой передачи требуются дополнительные разрешения для доступа к звуку и камере в зависимости от типа передачи.
Интерактивные компоненты в Gradio
Интерактивность – важная характеристика Gradio. Gradio обеспечивает интерактивность благодаря использованию различных функций, как будет показано в следующих подразделах.
Кнопка
С помощью gradio.Button()
вы можете определить кнопку отправки для вашего приложения, указав value = "Submit"
и добавив событие gradio.Button.click()
.
Флажок
В дополнение к ползунку вы можете добавить флажок для выбора. В приведенном ниже примере сочетаются ползунок и флажок для выбора времени.
Check box
Check box создается с помощью gradio.CheckboxGroup()
. Этот компонент позволяет указать список записей для выбора.
Ввод даты
В настоящее время Gradio не поддерживает выбор дат с помощью виджета. Однако вы можете отображать текущую дату среди других операций, используя datetime
в качестве входных данных компонента Textbox()
.
Выбор цвета
Для генерации случайных цветов вы можете использовать gradio.ColorPicker()
.
Слайдер
gradio.Slider()
создает ползунок с диапазоном значений от minimum
до maximum
с шагом размера step
. Положение ползунка по умолчанию определяется value
. Например, ниже приведена реализация для случая minimum = 20
, maximum = 100
, step = 5
с положением ползунка по умолчанию.
Выпадающий список
Функция Dropdown()
в Gradio позволяет указать элемент из списка. В нашем приложении мы можем задать дополнительный параметр watch, который будет показывать, что пользователь еще мог бы сделать.
Кэширование в Gradio
Вы будете терять примеры с вашего сервера при каждом обновлении вашего приложения. Вы можете указать cache_examples = True
в основном интерфейсе Gradio, то есть в gradio.Interface()
, после определения вашего examples
.
Конфигурации Gradio
Приложения Gradio настраиваются в launch()
процессе. Однако вы можете выполнить настройку с помощью переменных среды.
Настройка через переменные среды
Чтобы сделать приложение доступным в локальной сети, вам нужно будет установить значение «0.0.0.0» в параметре server_name
в gradio.Interface.launch()
. Это также можно установить с помощью переменной окружения GRADIO_SERVER_NAME
. Если значение равно None
, по умолчанию будет 127.0.0.1
.
Интеграция библиотек визуализации с Gradio
Gradio предоставляет простой в использовании инструмент Plot output component для визуализации данных с помощью различных библиотек Python, включая Matplotlib, Bokeh и Plotly.
Использование Matplotlib и Seaborn в Gradio
Визуализация данных с помощью Seaborn или Matplotlib в Gradio происходит по тому же синтаксису.
Для matplotlib используйте matplotlib.plot()
, а для Seaborn – seaborn.plot()
.
Matplotlib
Seaborn
Seaborn использует тот же синтаксис, что и Matplotlib. Во-первых, определите интерфейсы функции построения графика. Задайте диаграмму как выходной параметр.
Интеграция Plotly в Gradio
В функции построения gdp_change(...)
определите объект визуализации plotly и передайте его в gradio.Plot()
.
Визуализируйте карты с помощью Gradio
Объекты карты, созданные с помощью таких пакетов, как Plotly или Seaborn, также можно визуализировать с помощью gradio.Plot()
.
Добавление состояния в приложения Gradio
Отслеживание состояния в Gradio может выполняться как в глобальном, так и в сеансовом состояниях.
Глобальное состояние
Глобальное состояние в Blocks имеет ту же функциональность, что и в интерфейсе. Любая переменная или данные, определенные вне функции, доступны для всех функций.
В приведенном ниже примере с track_gdp
переменная gdps
используется всеми пользователями. Пользователи, которые получают доступ к приложению, будут добавлять свои баллы в список.
Состояние сеанса
Gradio поддерживает состояние сеанса, при котором данные сохраняются при нескольких отправках в рамках сеанса страницы и в приложениях Blocks. Для состояния сеанса:
- Дайте определение объекту
gradio.State()
. - Поместите объект
State
в получатель событий в качестве входных и выходных данных. - В функции получателя событий добавьте переменную как входной параметр и возвращаемое значение.
Чтобы показать состояние сеанса приложения, мы будем использовать игру «Виселица».
Вы заметите, что сеанс сохраняется на странице, но, если вы загрузите приложение на новой вкладке или обновите приложение, приложение не будет делиться историей «догадок».
Разметка вашего приложения Gradio
Компоновку блоков приложения можно настроить с помощью таких классов, как gradio.Row()
, gradio.Columns()
, gradio.Tab()
и gradio.Accordion().
Строки
При использовании макета строки в Blocks все дочерние элементы в вашем приложении будут отображаться горизонтально.
Столбцы
С помощью gradio.Column()
вы можете отображать дочерние элементы вашего приложения вертикально. Вы можете указать ширину столбцов, указав параметры scale
и min_width
.
Табы и accordion
Приложения Gradio также могут быть представлены в табличной форме с использованием файлов gradio.Tab()
. Компоненты на определенной вкладке отобразятся, когда пользователь перейдет к соответствующему файлу Tab
. Каждому Tab
присваивается метка.
Accordion возвращает функцию компонента update(), которая позволяет переключать и скрывать содержимое.
Видимость
После передачи функции в интерфейс Gradio или даже в Block происходит возврат типичного значения. gradio.update
обновляет это значение. При этом свойства выходного компонента также могут быть обновлены. Обновления касаются количества строк Textbox
или видимости Image
, возвращая функцию компонента update()
.
В приведенном ниже примере показано приложение для обновления видимости компонента интерфейса.
Многостраничные приложения Gradio
После создания различных приложений вы можете использовать такие методы, как:
gradio.TabbedInterfaces()
иgradio.Parallel()
для сравнения выходных данных из нескольких приложенийgradio.Series()
для подачи ввода из одного приложения в другое для объединения приложений.
В этом разделе мы будем использовать gradio.TabbedInterface()
для создания многостраничного приложения для Dropdown и Seaborn, которые мы создали ранее.
Кастомизация при помощи CSS и Javascript в Gradio
Вы можете стилизовать свое приложение в соответствии с индивидуальными спецификациями, передав любой CSS в свое приложение с помощью css = kwarg
. Например, в примере макета с Tab
вы можете определить пользовательский CSS фона следующим образом:
Точно так же вы можете определить собственный JS для своего приложения.
Аутентификация приложений Gradio
При запуске приложения Gradio вы можете определить метод аутентификации, указав параметр auth
. Если auth
передано, для доступа к интерфейсу потребуются имя пользователя и пароль (или список кортежей имени пользователя и пароля).
Вы также можете добавить auth_message
, чтобы указать пользователю, что нужно добавить.
Загрузка и обработка файлов в Gradio
Вы можете загружать и отображать общие файлы в вывод. Кроме того, вы можете обработать загруженные файлы.
Загрузка одного файла
gradio.File()
позволяет загружать общие файлы, такие как zip-файлы.
Загрузка нескольких файлов
Чтобы загрузить несколько файлов, добавьте параметр file_count
, указывающий количество файлов, которые вы можете загрузить за один сеанс.
Загрузка и обработка данных
При загрузке файлов вы можете определить функцию, которая выполняет предварительную обработку данных и возвращает результат предварительно обработанного файла. Например, вы можете изменить оттенок ваших изображений.
Установка флагов в Gradio
Пометка позволяет собирать данные о пользователях, использующих ваше приложение/модель, особенно о точках ввода данных, в которых приложение ведет себя неожиданно. В Gradio есть простой способ установки флагов.
Включив кнопку «Flag
» в каждом интерфейсе, пользователь может отправлять данные обратно в место, где запущено приложение.
Gradio допускает четыре параметра в компоненте gradio.Interface()
, которые определяют, как работает установка флагов. Параметры следующие: allow_flagging
, flagging_options
, flagging_dir
и flagging_callback
.
allow_flagging
по умолчанию является manual
, при котором образцы будут отмечены, когда пользователь нажмет кнопку Flag. Затем вы можете использовать flagging_dir = "path/to/store"
, который указывает каталог для хранения данных журнала. В противном случае журналы будут храниться в новой папке в том месте, где запущено приложение.
Мы можем добавить пометку в приложение визуализации Altair, как показано ниже.
См. документацию Gradio для параметров.
Создайте классификацию изображений с помощью Vision Transformers в Gradio
Transformers предлагают API и инструменты для быстрой загрузки и обучения современных предобученных моделей. Как показано ниже, вы можете легко создать приложение для классификации, используя vision transformers.
Llama: Photo by Raspopova Marina, on Unsplash
Дополнительные модели трансформеров см. в документации Hugging face .
Используйте Hugging face для разработки приложения чат-бота с Gradio
Создание чат-бота упрощается за счет использования предварительно обученных моделей Hugging face. Вам понадобится предварительно обученный токенизатор и диалоговая модель, такая как DialoGPT .
В приведенном ниже примере мы используем токенизатор DialoGPT и модель разговорной речи.
Развертывание приложений Gradio
Пакет Gradio упрощает создание общедоступного графического интерфейса и общедоступной ссылки для вашей модели. Это верно до тех пор, пока модель работает в вашей локальной среде. Но когда у вас возникнет потребность в долгосрочном хостинговом решении, вам придется поискать другой вариант.
Здесь на помощь приходят хостинговые сервисы, такие как места Heroku и Hugging Face.
Heroku
Развертывание приложения Gradio в Heroku выполняется в пять шагов:
- Создайте свое приложение (
app.py
) и сохраните его в новом каталоге. - Напишите свой файл
requirements.txt
Вам потребуется учетная запись Heroku и, возможно, для удобства интерфейс командной строки Heroku. Создайте учетную запись Heroku и загрузите CLI, если вы еще этого не сделали:
- Создайте файл
setup.sh
. Чтобы ваше приложение работало правильно, убедитесь, что оно обслуживается по правильному URL-адресу и порту. Добавьтеexport GRADIO_SERVER_NAME=0.0.0.0
иexport GRADIO_SERVER_PORT="$PORT"
в файлsetup.sh
. - Создайте Procfile. Procfile определяет команды, которые будут выполняться для запуска приложения Gradio. Команд всего две: запустить bash-скрипт, а затем запустить приложение. Так выглядит ваш Procfile:
web: source setup.sh && python app.py
- Выполните развертывание! После этого вы можете продолжить свой обычный процесс развертывания при помощи Heroku.
Hugging Face
Создайте учетную запись пользователя на https://huggingface.co/. Перейдите к Spaces на панели навигации и создайте New Space.
Предоставьте необходимую информацию.
Будет создана ссылка с репо. Скопируйте ссылку в командной строке. В нашем случае мы получили ссылку, как показано ниже, но она может отличаться в зависимости от ваших данных.
Будет создана новая папка (Gradio_machine_learning
).
- Сделайте копию файлов, необходимых для запуска вашего приложения Gradio, например
app.py
,requirements.txt
, в ту новую папку. - Вернитесь в терминал и выполните следующие команды, заменив на соответствующие имена вашего рабочего пространства.
Вам будет предложено ввести свои учетные данные Hugging Face. Для пользователей Windows-виджет будет выглядеть примерно так:
Если вы выполнили все требования, перейдите в spaces и нажмите на space. Вы должны увидеть работающее приложение.
Ссылка на приложение «Hugging face» из этого руководства.
И напоследок
В то время как разработка модели машинного обучения часто происходит в локальной среде, ее предполагаемое применение – в процессе развертывания. В этом руководстве вы узнали, как создавать простые в использовании настраиваемые компоненты пользовательского интерфейса для вашей модели машинного обучения, любого API или даже произвольной функции Python с помощью нескольких строк кода и Gradio.
Вот и все!
Комментарии