Полное руководство по использованию Tensorflow, Airflow scheduler и Docker

Платформа Google AI позволяет обучать модели с использованием различных сред. Таким образом, действительно легко обучить вашу модель с помощью одной такой команды:

gcloud ai-platform jobs submit training ${JOB_NAME} \
    --region $REGION \
    --scale-tier=CUSTOM \
    --job-dir ${BUCKET}/jobs/${JOB_NAME} \
    --module-name trainer.task \
    --package-path trainer \
    --config trainer/config/config_train.json \
    --master-machine-type complex_model_m_gpu \
    --runtime-version 1.15

Однако среды выполнения Google время от времени становятся устаревшими, и вы можете использовать свою собственную настраиваемую среду выполнения. В этом руководстве объясняется, как установить его и обучить модель рекомендаций Tensorflow на обучении платформы AI с помощью настраиваемого контейнера.

Мой репозиторий можно найти здесь:
https://github.com/mshakhomirov/recommendation-trainer-customEnvDocker/

Обзор

В этом руководстве объясняется, как обучить user-items-ratings модель рекомендаций с помощью алгоритма WALS.

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

В этом руководстве описаны следующие шаги:

  • Настройка локальной среды
  • Напишите Dockerfile и создайте собственный контейнер
  • Запустить образ докеры локально
  • Отправьте образ в реестр контейнеров GCP
  • Отправить заказное задание по обучению контейнеров
  • Планирование обучения модели с AirFlow

Предпосылки:

  1. Учетная запись разработчика GCP
  2. Докер установлен
  3. Python 2
  4. Установлен Cloud SDK.
  5. Включить обучение и прогнозирование платформы AI, Compute Engine и API-интерфейсы реестра контейнеров.

Создание вышеупомянутых ресурсов потребует затрат около 0,20 доллара США. Не забудьте убрать, когда закончите.

Набор данных для обучения

Наши данные для обучения (репо) будут выглядеть так:

Он очень похож на набор данных рейтингов MovieLens, но упрощен для целей разработки. Вы можете применить эту схему ко всему, включая просмотры страниц Google Analytics или любую другую активность пользователя, связанную с продуктом / контентом.

Шаг 1. После того, как вы установили докер, вам необходимо его аутентифицировать. Используйте gcloud в качестве помощника по учетным данным для Docker:

gcloud auth configure-docker

Шаг 2. Создайте корзину Cloud Storage и задайте локальную переменную среды:

export BUCKET_NAME="your_bucket_name"
export REGION=us-central1
gsutil mb -l $REGION gs://$BUCKET_NAME

Подсказка: попробуйте сделать все в одном проекте в том же регионе.

Шаг 3. Клонируйте репо.

cd Documnets/code/
git clone [email protected]:mshakhomirov/recommendation-trainer-customEnvDocker.git
cd recommendation-trainer/wals_ml_engine

Шаг 4. Напишите файл dockerfile.

Файл Docker уже есть в этом репо:

Этот бит очень важен, иначе ваш экземпляр не сможет сохранить модель в облачном хранилище:

# Make sure gsutil will use the default service account
RUN echo ‘[GoogleCompute]\nservice_account = default’ > /etc/boto.cfg

С помощью этого файла докеров вы создадите образ со следующими зависимостями пользовательской среды:

tensorflow==1.15
numpy==1.16.6
pandas==0.20.3
scipy==0.19.1
sh

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

Версия 1.15 среды выполнения Google AI Platform имеет Tensorflow 1.15, но другую версию Pandas, которая неприемлема для моего сценария использования, где версия Pandas должна быть 0.20.3.

Шаг 5. Создайте образ Docker.

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export IMAGE_REPO_NAME=recommendation_bespoke_container
export IMAGE_TAG=tf_rec
export IMAGE_URI=gcr.io/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG
docker build -f Dockerfile -t $IMAGE_URI ./

Протестируйте локально:

docker run $IMAGE_URI

Результат будет:

task.py: error: argument --job-dir is required

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

“trainer/task.py”

Например, после того, как мы отправим наше изображение, мы сможем запустить эту команду локально:

gcloud ai-platform jobs submit training ${JOB_NAME} \
    --region $REGION \
    --scale-tier=CUSTOM \
    --job-dir ${BUCKET}/jobs/${JOB_NAME} \
    --master-image-uri $IMAGE_URI \
    --config trainer/config/config_train.json \
    --master-machine-type complex_model_m_gpu \
    -- \
    ${ARGS}

а параметр master-image-uri заменит runtime-environment. Проверьте mltrain.sh в репозитории для получения дополнительных сведений.

Шаг 6. Отправьте образ в репозиторий Docker.

docker push $IMAGE_URI

Результат должен быть:

The push refers to repository [gcr.io/<your-project>/recommendation_bespoke_container]

Шаг 7. Отправить вакансию на обучение

Запускаем скрипт, включенный в репо:

./mltrain.sh train_custom gs://$BUCKET_NAME data/ratings_small.csv — data-type user_ratings

Вывод:

Это означает, что ваше учебное задание было успешно отправлено с использованием настраиваемой среды. Теперь, если вы перейдете в консоль Google AI Platform, вы сможете увидеть, как идет ваше обучение:

Запустите обучение модели с помощью Cloud composer (AirFlow).

Теперь давайте развернем среду Cloud Composer, чтобы организовать обновления для обучения модели.

Шаг 8. Создайте среду Cloud Composer в своем проекте:

export CC_ENV=composer-recserve
gcloud composer environments create $CC_ENV --location europe-west2

Шаг 9.

Получите имя корзины Cloud Storage, созданной для вас Cloud Composer:

gcloud composer environments describe $CC_ENV \
    --location europe-west2 --format="csv[no-heading](config.dagGcsPrefix)" | sed 's/.\{5\}$//'

В выходных данных вы видите расположение корзины Cloud Storage, например:

gs://[region-environment_name-random_id-bucket]

В моем случае это было:

gs://europe-west2-composer-recse-156e7e30-bucket

Мы будем загружать плагины сюда.

Шаг 10. Задайте переменную оболочки, которая содержит путь к этому выходу:

export AIRFLOW_BUCKET="gs://europe-west2-composer-recse-156e7e30-bucket"

Шаг 11. Загрузите плагины Airflow

В папке airflow / plugins находятся два файла. Эти плагины будут служить вспомогательными модулями для запуска нашей группы DAG и отправки задания на обучение.

gcloud composer environments storage plugins import \
    --location europe-west2 --environment composer-recserve --source airflow/plugins/

Шаг 12. Проверьте разрешения Cloud Composer

Теперь перейдите в веб-интерфейс GCP Cloud Composer и убедитесь, что у учетной записи службы Composer есть все необходимые разрешения для запуска заданий, например Cloud ML, BigQuery и т. Д. Вы можете найти его в консоли IAM.

Также убедитесь, что в вашей среде Composer установлены следующие пакеты PyPi:

Шаг 13. Загрузите файл DAG.

Скопируйте файл DAG model_training.py в папку dags в корзине Cloud Composer:

gsutil cp airflow/dags/model_training.py ${AIRFLOW_BUCKET}/dags

Все сделано. Теперь мы можем перейти в веб-консоль Airflow и проверить наши задания.

Доступ к веб-консоли Airflow

Веб-консоль Airflow позволяет управлять настройкой и выполнением DAG. Например, с помощью консоли вы можете:

  • Проверить и изменить график выполнения DAG.
  • Вручную выполнять задачи в группе DAG.
  • Изучите журналы задач.

Шаг 14. Выполните эту команду, чтобы получить uri консоли Airflow:

gcloud composer environments describe $CC_ENV \
    --location europe-west2 --format="csv[no-heading](config.airflow_uri)"

Вы видите URL-адрес веб-сайта консоли, который выглядит следующим образом:

https://za4fg484711dd1p-tp.appspot.com

Чтобы получить доступ к консоли Airflow для вашего экземпляра Cloud Composer, перейдите по URL-адресу, отображаемому в выходных данных. Вы будете использовать свой DAG:

Щелкните DAG Рекомендации_model_training и проверьте журналы. Если все в порядке, вы увидите там какую-то успешную деятельность. Кроме того, вы заметите, что работа по обучению настраиваемой среды выполняется.

Представим, что мы извлекаем данные для обучения из BigQuery, и это будет первым шагом в нашем конвейере машинного обучения. Перейдите в DAG model_training.py и раскомментируйте это:

...
...
# t1 = BigQueryToCloudStorageOperator(
#     task_id='bq_export_op',
#     source_project_dataset_table='%s.recommendation_training' % DATASET,
#     destination_cloud_storage_uris=[training_file],
#     export_format='CSV',
#     dag=dag
# )
...
...
...
# t3.set_upstream(t1)

Это позволит извлечь и сохранить из таблицы BigQuery:

<your-project>.staging.recommendation_training

и теперь DAG будет выглядеть так:

Вот и все! Мы настроили оркестровку конвейера машинного обучения.

Заключение

Мы только что настроили оркестровку конвейера машинного обучения с помощью Airflow, где обучение выполняется в настраиваемой среде с использованием образа Docker. Это очень важно, потому что теперь вы не полагаетесь на среды выполнения Google, которые могут быть устаревшими, и можете удовлетворить любые требования к настраиваемой версии среды выполнения, установленные вашей командой специалистов по науке о данных. Кроме того, намного проще настроить надежный конвейер CI / CD ML с помощью системы управления версиями.

Apache Airflow - отличный менеджер оркестровки конвейеров, каждый шаг которого зависит от успешного завершения предыдущего. В этом руководстве мы развернули среду Google Cloud Composer, в которой наш конвейер машинного обучения представлен в виде ориентированного ациклического графа (DAG) для выполнения этапов извлечения данных модели и обучения.

Рекомендуемое чтение

* [1]: https://cloud.google.com/ai-platform/training/docs/custom-containers-training

* [2]: https://cloud.google.com/ai-platform/training/docs/using-containers

* [3]: https://cloud.google.com/sdk/gcloud/reference/ai-platform/jobs/submit/training#--master-image-uri

* [4]: ​​https://github.com/GoogleCloudPlatform/cloudml-samples/tree/master/tensorflow/containers/unsupported_runtime

* [5]: https://cloud.google.com/ai-platform/training/docs/reference/rest/v1/projects.jobs#ReplicaConfig

* [6]: https://airflow.readthedocs.io/_/downloads/en/1.10.2/pdf/