Пълно ръководство с помощта на 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 Platform с персонализиран контейнер.

Моето хранилище може да бъде намерено тук:
https://github.com/mshakhomirov/recommendation-trainer-customEnvDocker/

Преглед

Този урок ще обясни как да обучите препоръчителен модел user-items-ratings с помощта на алгоритъм WALS.

  • Това е много често срещан пример, когато потребител оцени съдържание или продукт и трябва да му препоръчате подобен продукт.
  • Това е пример за производствен клас код, който ще обработва матрица с потребителски оценки от всякакъв размер.

Това ръководство обхваща следните стъпки:

  • Настройка на локална среда
  • Напишете Dockerfile и създайте персонализиран контейнер
  • Стартирайте докер изображение локално
  • Изпратете изображението в регистъра на контейнерите на GCP
  • Изпратете персонализирана работа за обучение на контейнери
  • Планирайте обучение на модели с AirFlow

Предпоставки:

  1. GCP акаунт на програмист
  2. Докер е инсталиран
  3. Python 2
  4. Cloud SDK е инсталиран.
  5. „Активиране на API за обучение и прогнозиране на AI платформа, Compute Engine и Container Registry“.

Създаването на гореспоменатите ресурси ще доведе до разходи около $0,20. Не забравяйте да почистите, когато приключите.

Набор от данни за обучение

Нашите данни за обучение (repo) ще изглеждат така:

Той е много подобен на набора от данни за рейтинги на MovieLens, но е опростен за целите на разработката. Можете да приложите тази схема към всичко, включително показвания на страници в Google Анализ или друга потребителска дейност, свързана с продукт/съдържание.

Стъпка 1. След като инсталирате докер, трябва да го удостоверите. Използвайте gcloud като помощник за идентификационни данни за Docker:

gcloud auth configure-docker

Стъпка 2. Създайте своята кофа за съхранение в облак и задайте вашата локална променлива на средата:

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

Подсказка: Опитайте да направите всичко в един проект в същия регион.

Стъпка 3. Клонирайте repo.

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

Стъпка 4. Напишете докер файл

Docker файлът вече е там в това репо:

Този бит е много важен, в противен случай вашият екземпляр няма да може да запази модела в Cloud Storage:

# 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

Тези версии на зависимости са основната причина, поради която използвам персонализиран контейнер.

Google AI Platformruntime-version 1.15има 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 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 Composer:

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

В изхода виждате местоположението на кофата за съхранение в облак, като това:

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

В моя случай беше:

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

Тук ще качваме добавки.

Стъпка 10.Задайте променлива на shell, която съдържа пътя към този изход:

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 Web UI и се уверете, че сервизният акаунт на 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 и проверете регистрационните файлове. Ако всичко е наред, ще видите някаква успешна дейност там. Освен това ще забележите, че вашата персонализирана среда „работа за обучение“ е в ход.

Нека си представим, че извличаме данни за обучение от BigQuery и това ще бъде първата стъпка от нашия ML тръбопровод. Отидете на model_training.py DAG и разкоментирайте това:

...
...
# 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 сега ще изглежда така:

Това е! Настроихме нашата ML тръбопроводна оркестрация.

Заключение

Току-що настроихме ML тръбопроводна оркестрация с помощта на Airflow, където обучението се извършва в персонализирана среда с помощта на Docker изображение. Това е много важно, защото сега не разчитате на средите за изпълнение на Google, които може да са оттеглени, и можете да изпълните всички изисквания за персонализирана версия на времето за изпълнение, зададени от вашия екип по Data Science. Освен това е много по-лесно да настроите надежден CI/CD ML тръбопровод с помощта на контрол на версиите.

Apache Airflow е страхотен диспечер за оркестриране на конвейери, където всяка стъпка зависи от успешното завършване на предишната стъпка. В този урок разгърнахме среда на Google Cloud Composer, където нашият ML тръбопровод е представен в насочена ациклична графика (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/