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

Для одной и той же модели машинного обучения могут потребоваться разные ограничения, веса или скорости обучения для обобщения разных шаблонов данных. Эти меры называются гиперпараметрами, и их необходимо настраивать, чтобы модель могла оптимально решить проблему машинного обучения.

Итак, вместо того, чтобы вручную настраивать наши гиперпараметры, мы передаем эту работу Jenkins для автоматизации.

Используемые инструменты

  • Git и Github - для контроля версий и размещения нашего репозитория.
  • Дженкинс - для автоматизации различных работ.
  • Rhel8 - как базовая ОС для запуска таких сервисов, как httpd, jenkins, ngrok.
  • Докер - для запуска нашей модели Python.

Набор данных

Я использую набор данных Fashion MNIST для моей модели глубокого обучения. Fashion-MNIST - это набор данных изображений статей Zalando, состоящий из обучающего набора из 60 000 примеров и тестового набора из 10 000 примеров. Каждый пример представляет собой изображение в оттенках серого 28x28, связанное с меткой из 10 классов.

Шаги для автоматизации-

Описание задания

  1. Создайте образ контейнера с Python3, Keras, numpy и всеми необходимыми библиотеками, установленными с помощью dockerfile.
  2. Когда мы запускаем это изображение, оно должно автоматически запускать обучение модели в контейнере.
  3. Создайте цепочку заданий job1, job2, job3, job4 и job5, используя плагин сборки конвейера в Jenkins.
  4. Задание 1. Автоматическое извлечение репозитория Github, когда некоторые разработчики отправляют репо на Github.
  5. Задание 2. Посмотрев на код или программный файл, Дженкинс должен автоматически запустить соответствующее установленное программное обеспечение для машинного обучения. Интерпретатор установит контейнер образа для развертывания кода и начала обучения (например, если код использует CNN, то Дженкинс должен запустить уже установленный контейнер. все программное обеспечение, необходимое для обработки cnn).
  6. Задание 3: Отображение точности в веб-браузере (локально подключенном)
  7. Задание 4: если точность показателей меньше 88%, настройте архитектуру модели машинного обучения.
  8. Задание 5: переобучить модель или сообщить, что создается лучшая модель.
  9. Задание 6: уведомит разработчика о начале настройки, поскольку точность модели ниже требуемой.
  10. Создайте одно дополнительное задание job7 для монитора: если контейнер, в котором запущено приложение. сбой по какой-либо причине, тогда это задание должно автоматически запускать контейнер снова с того места, где оставалась последняя обученная модель.

Давайте начнем работу-

  1. Настройка нашего локального репозитория git-

Сначала я создал пустой репозиторий Github под названием MachineLearning_Automation. Затем, используя основные команды git, я загрузил свои коды в этот репо.

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

  • Для этого вам нужно перейти в папку с кодом, в которой вы установили свой .git
  • затем с помощью [$ cd /.git/hooks] перейдите в каталог хуков
  • затем с помощью [$ cat ›post-commit] создайте скрипт, который подтолкнет ваш код при фиксации
  • в пост-фиксации напишите, что показано на изображении ниже, и нажмите ctrl + d, чтобы сохранить это.
  • затем перейдите в свою основную папку кода и попробуйте зафиксировать

2. Настройка Туннеля для приватного ip в Rhel-

Мы должны установить веб-хуки в репозитории Github на шаге 3, я использую частный IP-адрес, но Github находится в общедоступном мире, и Github требуется доступ к нашему частному IP-адресу, на котором работает Jenkins. А вот концепция туннеля, которая нам поможет.

Настроили программу ngrok для порта и протокола Jenkins. В моем случае Jenkins работает на порту 8080 и использует протокол http. Используйте команду-

] #. / ngrok http 8080

Мы будем использовать этот IP-адрес, предоставленный ngrok, при настройке наших веб-хуков в репозитории Github.

3. Настройка веб-хуков в Github Repo-

Нам потребуются веб-хуки для нашего Jenkis JOB1, которые будут обнаруживать любые изменения в репозитории Github и отправлять их в наши Rehl Os в указанном месте.

  • Чтобы установить Web-хуки, нам нужно перейти в наш репозиторий git hub, а затем

- ›Настройки -› в настройках - ›Webhooks -› Добавить Webhook - ›Введите свой пароль -› В URL-адресе полезной нагрузки введите [ngrok_ip / github-webhook /] - ›Измените тип контента на [application / json] -› затем Сохраните Webhook

4. Создайте JOB1 в Jenkins-

JOB1 автоматически перетащит репозиторий Github в указанный каталог в нашем Rhel Os всякий раз, когда разработчик отправляет новый код.

Конфигурации JOB1-

Если все будет работать идеально, то у нас будет -

5. Создание собственного образа Docker-

Чтобы запустить наш ML-код с именем machinelearning_code.py в контейнере Docker, мы должны создать наш собственный образ Docker с Centos в качестве основы и всеми необходимыми библиотеками и установленными в нем python36.

  • Чтобы создать образ Docker, сначала создайте новую папку с именем ws, используя:

] # mkdir ws /

]#cd /ws

  • Затем создайте файл докера в каталоге ws, используя

] #gedit Dockerfile

  • в Dockerfile напишите-

  • после сохранения файла докера перейти в родительский каталог

]#cd ..

  • запустить команду для создания образа -

] #docker build -t machinelearning: v1 / root / Desktop / ml-automation / ws /

  • после завершения сборки мы увидим -

6. Создание JOB2 в Jenkins-

У JOB2 есть задача. Посмотрев на код или программный файл, автоматически запустить соответствующее установленное программное обеспечение для машинного обучения, Интерпретатор установит контейнер образа для развертывания кода и начала обучения (например, если код использует CNN, то Дженкинс должен запустить контейнер, который уже установлен. все программное обеспечение, необходимое для обработки cnn), т.е. запуск контейнера Docker из образа Docker, созданного на шаге 5 *.

  • отсюда вы можете увидеть check.py - check.py

  • После успешной сборки JOB2 вывод консоли должен быть таким:

7. Создание JOB3 в Jenkins-

JOB3 имеет задачу скопировать файл [show_output.html] из родительского каталога в / var / www / html, который является каталогом по умолчанию для веб-страниц на веб-сервере Apache.

Этот файл [show_output.html] покажет нам используемые гиперпараметры и точность нашей модели.

  • Перед тем, как войти в Jenkins, выполните следующую команду, чтобы запустить httpd-сервер в rhel-

] #systemctl start httpd

  • Конфигурации JOB3-

Установите для триггеров сборки значение - ›Сборка после сборки других проектов -› поместите в нее JOB2. После этого сделайте -

  • После успешной сборки JOB3 мы можем увидеть файл show_output.html в нашем локальном веб-браузере.

8. Создание JOB4 в Jenkins-

JOB4 будет контролировать точность модели, и если точность модели меньше 98%. Он запустит программу tweaker.py, которая добавит дополнительные слои свертки и снова запустит JOB2 для обучения модели и JOB6 для отправки электронной почты разработчику: Эта точность низкая, выполняется программа Tweaker.

И если модель достигла требуемой точности, задание JOB5 будет выполняться, так как задание JOB4 будет завершено командой [exit 0].

  • Конфигурация JOB4-

  • поскольку JOB4 будет запускаться снова и снова, пока желаемая точность не будет достигнута, наш файл show_display.html также будет изменен JOB3 и будет показывать разные точности и гиперпараметры для каждого запуска модели JOB2.

9. Создание JOB5 в Jenkins-

После получения желаемой точности от модели JOB2, JOB4 будет прекращен и JOB5 будет запущен. Это задание запустит model_success_mail.py и отправит уведомление о ЗАВЕРШЕНИИ ПРОЕКТА разработчику.

  • Конфигурации JOB5-

  • Файл Python для отправки электронной почты, отредактируйте этот код в Rhel с помощью gedit и поместите свои собственные учетные данные в это-

10. Создание JOB6 в Jenkins-

когда модель JOB2 не достигает желаемой точности, тогда JOB4 запускает JOB2 и JOB6. JOB6 отправит сообщение об ошибке и запустит код настройки, запустив model_lessaccuracy_mail.py.

  • Конфигурации JOB6-

  • Код Python для этого -

11. Создание JOB7 в Jenkins-

JOB7 будет запускаться каждый час и проверять Если контейнер, в котором запущена модель, дает сбой по какой-либо причине, тогда это задание должно автоматически запускать контейнер снова с того места, где оставалась последняя обученная модель.

  • Настройка расписания SCM опроса на один час-

  • Выполнить команду оболочки -

  • вывод консоли, если контейнер работает нормально -

ПРОЕКТ ЗАВЕРШЕН !!!

Вуаля !!!! Вот как можно автоматизировать модель машинного обучения с помощью jenkins.

GITHUB REPO- https://github.com/Harasis/MachineLearning_Automation