Пълно ръководство с помощта на 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
Предпоставки:
- GCP акаунт на програмист
- Докер е инсталиран
- Python 2
- Cloud SDK е инсталиран.
- „Активиране на 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
* [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/