Gradio-Lite Безсерверный Gradio, работающий полностью в вашем браузере

Gradio-Lite Безсерверный Градио, работающий напрямую в вашем браузере

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

Вот где на сцену выходит Gradio-lite (@gradio/lite): библиотека, которая использует Pyodide для запуска Gradio прямо в вашем браузере. В этой статье мы рассмотрим, что такое @gradio/lite, приведем пример кода и обсудим преимущества его использования для запуска приложений Gradio.

Что такое @gradio/lite?

@gradio/lite – это JavaScript-библиотека, которая позволяет запускать приложения Gradio непосредственно в вашем веб-браузере. Она достигает этого, используя Pyodide, рантайм Python для WebAssembly, позволяющий выполнять код на Python в среде браузера. С @gradio/lite вы можете писать обычный код на Python для ваших приложений Gradio, которые будут бесшовно работать в браузере без необходимости серверной инфраструктуры.

Начало работы

Давайте создадим приложение Gradio “Hello World” в @gradio/lite

1. Импортировать JS и CSS

Начните с создания нового HTML-файла, если у вас его еще нет. Импортируйте JavaScript и CSS, соответствующие пакету @gradio/lite, используя следующий код:

<html>    <head>        <script type="module" crossorigin src="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.js"></script>        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.css" />    </head></html>

Обратите внимание, что вы обычно должны использовать последнюю доступную версию @gradio/lite. Доступные версии можно увидеть здесь.

2. Создайте теги <gradio-lite>

Где-то в теле вашей HTML-страницы (где вы хотите, чтобы Gradio-приложение отображалось), создайте открывающие и закрывающие теги <gradio-lite>.

<html>    <head>        <script type="module" crossorigin src="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.js"></script>        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.css" />    </head>    <body>        <gradio-lite>        </gradio-lite>    </body></html>

Примечание: вы можете добавить атрибут theme к тегу <gradio-lite>, чтобы принудительно установить тему на темную или светлую (по умолчанию она следует системной теме). Например:

<gradio-lite theme="dark">...</gradio-lite>

3. Напишите ваше Gradio-приложение внутри тегов

Теперь напишите ваше Gradio-приложение, как обычно, на Python! Имейте в виду, что, так как это Python, пробелы и отступы важны.

<html>    <head>        <script type="module" crossorigin src="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.js"></script>        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.css" />    </head>    <body>        <gradio-lite>        import gradio as gr        def greet(name):            return "Hello, " + name + "!"                gr.Interface(greet, "textbox", "textbox").launch()        </gradio-lite>    </body></html>

Вот и все! Теперь вы должны иметь возможность открыть свою HTML-страницу в браузере и увидеть отрисованное приложение Gradio! Обратите внимание, что при первом запуске приложения Gradio может потребоваться некоторое время для загрузки, так как Pyodide может занимать некоторое время для установки в вашем браузере.

Примечание о отладке: чтобы увидеть ошибки в вашем Gradio-lite приложении, откройте инспектор веб-браузера. Все ошибки (включая ошибки Python) будут выведены там.

Еще примеры: добавление дополнительных файлов и требований

Что, если вы хотите создать Gradio-приложение, которое занимает несколько файлов? Или которое имеет дополнительные требования к Python? Все это возможно с помощью @gradio/lite!

Несколько файлов

Добавление нескольких файлов в рамках приложения @gradio/lite очень просто: используйте тег <gradio-file>. Вы можете иметь столько тегов <gradio-file>, сколько вам нужно, но каждый из них должен иметь атрибут name, а точка входа в ваше Gradio-приложение должна иметь атрибут entrypoint.

Вот пример:

<gradio-lite><gradio-file name="app.py" entrypoint>import gradio as grfrom utils import adddemo = gr.Interface(fn=add, inputs=["number", "number"], outputs="number")demo.launch()</gradio-file><gradio-file name="utils.py" >def add(a, b):    return a + b</gradio-file></gradio-lite>

Дополнительные требования

Если ваше Gradio-приложение имеет дополнительные требования, есть возможность установить их в браузер с помощью micropip. Мы создали оболочку, чтобы это было особенно удобно: просто перечислите ваши требования в том же синтаксисе, что и requirements.txt, и заключите их в теги <gradio-requirements>.

Вот здесь мы устанавливаем transformers_js_py, чтобы запустить модель классификации текста непосредственно в браузере!

<gradio-lite><gradio-requirements>transformers_js_py</gradio-requirements><gradio-file name="app.py" entrypoint>from transformers_js import import_transformers_jsimport gradio as grtransformers = await import_transformers_js()pipeline = transformers.pipelinepipe = await pipeline('sentiment-analysis')async def classify(text):    return await pipe(text)demo = gr.Interface(classify, "textbox", "json")demo.launch()</gradio-file></gradio-lite>

Попробуйте сами: Вы можете увидеть этот пример, запустив его в этом статическом пространстве Hugging Face, которое позволяет бесплатно размещать статические (без сервера) веб-приложения. Посетите страницу и вы сможете запустить модель машинного обучения без доступа к интернету!

Преимущества использования @gradio/lite

1. Безсерверное развертывание

Основное преимущество @gradio/lite в том, что оно устраняет необходимость в серверной инфраструктуре. Это упрощает развертывание, снижает затраты на сервер и упрощает обмен вашими Gradio-приложениями с другими.

2. Низкая задержка

Запуск @gradio/lite в браузере обеспечивает взаимодействие с низкой задержкой для пользователей. Нет необходимости передавать данные на сервер и обратно, что приводит к более быстрым ответам и более гладкому пользовательскому опыту.

3. Конфиденциальность и безопасность

Поскольку вся обработка происходит в браузере пользователя, @gradio/lite повышает конфиденциальность и безопасность. Данные пользователя остаются на его устройстве, обеспечивая безопасность обработки данных.

Ограничения

  • В настоящее время наибольшим ограничением при использовании @gradio/lite является то, что ваши Gradio-приложения обычно требуют больше времени (обычно 5-15 секунд) на первоначальную загрузку в браузере. Это связано с тем, что браузеру нужно загрузить среду выполнения Pyodide перед отображением кода Python.

  • Не все пакеты Python поддерживаются Pyodide. Хотя gradio и многие другие популярные пакеты (включая numpy, scikit-learn и transformers-js) могут быть установлены в Pyodide, если у вашего приложения много зависимостей, стоит убедиться, включены ли зависимости в Pyodide, или их можно установить с помощью micropip.

Попробуйте сами!

Вы можете немедленно попробовать @gradio/lite, скопировав и вставив этот код в локальный файл index.html и открыв его в браузере:

<html>    <head>        <script type="module" crossorigin src="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.js"></script>        <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.css" />    </head>    <body>        <gradio-lite>        import gradio as gr        def greet(name):            return "Привет, " + name + "!"                gr.Interface(greet, "textbox", "textbox").launch()        </gradio-lite>    </body></html>

Мы также создали игровую площадку на веб-сайте Gradio, которая позволяет вам взаимодействовать с кодом и немедленно видеть результаты!

Игровая площадка: https://www.gradio.app/playground