Как отправить задание на обучение платформы GCP AI из конвейера сборки облака GCP?

#google-cloud-platform #google-cloud-build #gcp-ai-platform-training

# #google-cloud-platform #google-cloud-build #gcp-ai-platform-training

Вопрос:

У меня есть довольно стандартный CI конвейер, используемый Cloud Build для моей модели обучения машинному обучению на основе контейнера:

  • проверьте ошибку python с помощью flake8
  • проверьте проблему с синтаксисом и стилем, используя pylint, pydocstyle…
  • создайте базовый контейнер (CPU / GPU)
  • создайте специализированный контейнер ML для моей модели
  • проверьте уязвимость установленных пакетов
  • модули запуска тестов

Теперь в машинном обучении невозможно проверить модель, не протестировав ее на реальных данных. Обычно мы добавляем 2 дополнительные проверки:

  • Исправьте все случайные начальные данные и запустите тестовые данные, чтобы увидеть, найдем ли мы точно такие же результаты
  • Обучите модель в пакете и посмотрите, сможем ли мы подогнать и свести потери к нулю

Это позволяет выявлять проблемы внутри кода модели. В моей настройке у меня есть мой Cloud Build GCP проект сборки, а данные — в другом GCP проекте.

Q1: удалось ли кому-нибудь использовать AI Platform training сервис Cloud Build для обучения на данных, находящихся в другом GCP проекте?

Q2: как сообщить облачной сборке подождать, пока AI Platform training задание не будет завершено, и проверить, каков статус (успешно / неудачно)? Кажется, что единственный вариант при просмотре документации связать его с использованием --stream-logs , но он кажется неоптимальным (используя такой вариант, я увидел огромную задержку)

Ответ №1:

При отправке задания на обучение платформе ИИ вы можете указать адрес электронной почты учетной записи службы для использования.

Убедитесь, что учетная запись службы имеет достаточную авторизацию в другом проекте для использования данных оттуда.

Для вашего второго вопроса у вас есть 2 решения

  • Используйте --stream-logs , как вы упомянули. Если вам не нужны журналы в вашей облачной сборке, вы можете перенаправить стандартный вывод и / или стандартный вывод на /dev/null
 - name: name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args:
    - -c
    - |
         gcloud ai-platform jobs submit training <your params> --stream-logs >/dev/null 2>/dev/null

 

Или вы можете создать бесконечный цикл, который проверяет статус

 - name: name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args:
    - -c
    - |
        JOB_NAME=<UNIQUE Job NAME>
        gcloud ai-platform jobs submit training ${JOB_NAME} <your params> 
        # test the job status every 60 seconds
        while [ -z "$(gcloud ai-platform jobs describe ${JOB_NAME} | grep SUCCEEDED)" ]; do sleep 60; done
 

Здесь мой тест прост, но вы можете настроить тесты состояния так, как хотите, в соответствии с вашими требованиями

Не забудьте установить ожидаемое время ожидания.