В наши дни многие проекты ML и MLOps строятся в области OSS. Kedro и gradio являются частью проекта MLOps. Эти проекты не только упрощают создание моделей машинного обучения, они делают их воспроизводимыми и упрощают проверку концепции.
Сегодня я создаю проект, используя оба из них. В этом посте я хочу показать процесс создания пайплайнов для построения модели машинного обучения с помощью Kedro и Tensorflow. И после этого поработайте с градиентом, чтобы убедиться, что обученная модель работает с реальными данными.
Кстати, что такое Кедро?
Если вы не были знакомы с Кедро, посмотрите введение здесь. На странице написано так.
Kedro — это платформа Python с открытым исходным кодом для создания воспроизводимого, поддерживаемого и модульного кода для обработки данных. Он заимствует концепции из разработки программного обеспечения и применяет их к коду машинного обучения; прикладные концепции включают модульность, разделение задач и управление версиями.
Kedro помогает разработчикам создавать модели машинного обучения, создавая конвейеры предварительной обработки данных и моделирования. А запись процесса и шагов по пайплайнам обеспечит воспроизводимость и ремонтопригодность.
И QuantumBlack, который является организатором этого проекта, написал пост о концепции, так что вы обязательно должны его проверить!
Создайте модель Tensorflow с помощью Kedro
Я использовал набор данных MNIST для этого проекта. Причина, по которой я выбрал этот набор данных, заключается в том, что когда я использую функцию «блокнот» в градиенте, я был удивлен тем, насколько легко реализовать приложение с помощью блокнота, а также я подумал, что смогу подтвердить, будет ли модель, обученная с помощью набора данных MNIST, работать. действительно узнаю мою рукописную цифру.
Настройка проекта
Я назвал этот проект kedro_gradio
, потому что он объединяет их. Я создал каталог и перешел в него.
$ mkdir kedro_gradio $ cd kedro_gradio $ git init
Я использовал pipenv
и python 3.8 для этого проекта, так что давайте инициализируем его. И после этого устанавливаю основные пакеты kedro
и gradio
.
$ pipenv --python 3.8 $ pipenv install kedro kedro-viz gradio # or if you want to install specific version, execute command below # pipenv install kedro==0.18.1 kedro-viz==4.6.0 gradio==3.0.12
kedro-viz
используется для визуализации конвейера Kedro, чтобы подтвердить, что конвейеры реализованы так, как задумано разработчиками.
После успешного завершения установки давайте перейдем в виртуальную среду Python и подтвердим, что Kedro будет работать.
$ pipenv shell $ kedro info 2022-06-11 12:07:32,809 - kedro.framework.cli.hooks.manager - INFO - Registered CLI hooks from 1 installed plugin(s): kedro-telemetry-0.2.1 _ _ | | _____ __| |_ __ ___ | |/ / _ \/ _` | '__/ _ \ | < __/ (_| | | | (_) | |_|\_\___|\__,_|_| \___/ v0.18.1 Kedro is a Python framework for creating reproducible, maintainable and modular data science code. Installed plugins: kedro_telemetry: 0.2.1 (entry points:cli_hooks) kedro_viz: 4.6.0 (entry points:global,line_magic)
В Kedro есть функция создания нового четко определенного проекта. Итак, давайте создадим с ним новый проект и назовем проект, репозиторий и так далее. В этом проекте я назвал его «Кедро Градио».
$ kedro new # You will be asked the project name and repository name, package name, basically after you input the project name, repository and package name create automatically from project name. project_name: Kedro Gradio repository_name: kedro-gradio package_name: kedro_gradio
Прежде чем устанавливать необходимые библиотеки для Kedro, давайте добавим дополнительные библиотеки в src/requirements.txt
. Конечно, если вы используете другие библиотеки, такие как pytorch, добавьте их.
# Add below to src/requirements.txt tensorflow==2.9.1 kedro[tensorflow]==0.18.1 $ pip install -r src/requirements.txt
Стройте трубопроводы и бегите!
А теперь приступим к самому интересному!
Не только в Kedro, но и в большинстве проектов машинного обучения есть процесс подготовки данных и процесс изучения модели. В Kedro каждый процесс определяется как конвейер, поэтому давайте создадим их.
$ kedro pipeline create data_processing $ kedro pipeline create data_science # After executing the above commands, under the src directory would like to be below. src ├── kedro_gradio │ ├── __init__.py │ ├── __main__.py │ ├── pipeline_registry.py │ ├── pipelines │ │ ├── __init__.py │ │ ├── data_processing │ │ │ ├── __init__.py │ │ │ ├── nodes.py │ │ │ ├── pipeline.py │ │ │ └── README.md │ │ └── data_science │ │ ├── __init__.py │ │ ├── nodes.py │ │ ├── pipeline.py │ │ └── README.md │ └── settings.py ├── requirements.txt └── setup.py
В Kedro небольшие шаги, такие как нормализация значений, определены в nodes.py.
В процессе обработки данных я реализовал загрузку набора данных MNIST и шаг предварительной обработки, который изменит форму и нормализует.
На первом этапе я реализую простую плотную модель. Итак, я просто преобразую данные изображения (28, 28) в (1, 784).
После определения шагов каждый шаг организован как конвейер. Вы заметите, что, объединяя их в конвейер, всегда соблюдается порядок зависимостей и обеспечивается параллельное выполнение там, где возможно параллельное выполнение, и это большая часть использования Kedro!
Обычно этап нормализации данных проверки и тестирования следует выполнять после нормализации обучающих данных, поскольку масштабирование зависит от обучающих данных. Но в этом случае каждый пиксель просто нормализуется в диапазоне от 0 до 1, поэтому можно выполнять параллельную обработку.
Некоторые читатели могут сказать: «Вы говорите, что это просто нормализовано, тогда почему бы вам не разделить данные после их нормализации?» Что ж, в одном аспекте это, безусловно, правда. Однако этот метод нормализации не всегда верен, и после долгих экспериментов можно найти лучший метод нормализации. В этом случае я подумал, что будет лучше оставить шаг нормализации после разделения набора данных на случай, если нам понадобится обновить конвейер позже.
Затем я определил функции в data_science/nodes.py
для построения, обучения и оценки модели и организовал их так же, как и data_processing.
И объедините эти конвейеры в один конвейер pipeline_registry.py.
Если вы хотите подтвердить конвейер, используйте команду kedro viz
. Вы можете увидеть следующее изображение в своем браузере.
Чтобы запустить весь процесс, выполните следующую команду.
$ kedro run # if you want to run parallely, execute following command. # kedro run --runner=ParallelRunner
В этом проекте я сохранил обученную модель в формате h5. Для этого я просто определил путь к файлу в conf/base/catalog.yml
, и после обученного процесса Кедро сохранил обученную модель определенным образом. А также он может контролироваться версиями, поэтому, если вы настроите модель, она не перезапишет модель и не сравнит их легко. Для этого не забудьте установить свойство versioned
следующим образом.
trained_model: type: tensorflow.TensorFlowModelDataset filepath: data/06_models/dnn.h5 versioned: true # Set as true
Запуск модели с градиентом
Как я писал выше в этом посте, я собираюсь использовать функцию «блокнот», чтобы убедиться, что она четко распознает мою рукописную цифру.
Кстати, что такое градиент?
Если вы не знакомы с gradio, загляните на официальную страницу здесь. У Gradio есть удобная страница, на которой есть страница быстрого старта и несколько интересных примеров.
Как запустить приложение?
Я создал файл gradio_app.py
и определил несколько методов.
Большая часть соединения gradio и Kedro заключается в том, что вы можете импортировать процесс нормализации в скрипт gradio, чтобы входные данные были нормализованы с помощью той же функции, которая используется на этапе предварительной обработки.
После подготовки скрипта gradio выполните следующую команду и откройте URL-адрес, который отображается в консоли, в моем случае это было так, как показано ниже.
$ python gradio_app.py Running on local URL: http://127.0.0.1:7860/
Вы увидите такой экран.
Теперь все, что нам нужно сделать, это играть!
Я отправил весь код на Github, так что проверьте, пожалуйста!