Отправить учебное задание Keras в облако Google - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь следовать этому руководству: https://medium.com/@natu.neeraj / training-a-keras-model-on-google-cloud-ml-cb831341c196

для загрузки и обучения Keras модель на Google Cloud Platform, но я не могу заставить ее работать.

Сейчас я скачал пакет с GitHub и создал облачную среду с AI-Platform и корзиной для хранения.

Я загружаю файлы (с рекомендуемой структурой папок) в мое хранилище Cloud Storage (в основном в root моего хранилища), а затем пытаюсь выполнить следующую команду в облачном терминале:

gcloud ai-platform jobs submit training JOB1 
 --module-name=trainer.cnn_with_keras 
 --package-path=./trainer 
 --job-dir=gs://mykerasstorage      
 --region=europe-north1         
 --config=gs://mykerasstorage/trainer/cloudml-gpu.yaml

Но я получаю ошибки, во-первых, файл cloudml-gpu.yaml не может быть найден, он говорит "нет такой папки или файла", и, пытаясь просто удалить его, я получаю ошибки потому что он говорит, что - init -. py файл отсутствует, но это не так, даже если он пустой (что было, когда я загружал из учебника GitHub). Я предполагаю, что я не загрузил это правильным способом.

Любые предложения о том, как я должен это сделать? В самом руководстве нет никакой информации об этом.

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

Следует упомянуть, что я работаю с Ma c, и довольно плохо знаком с использованием Keras и Python.

Ответы [ 3 ]

1 голос
/ 21 января 2020

Я смог успешно выполнить упомянутое вами руководство с некоторыми изменениями на этом пути.

Я упомяну все шаги, хотя вы сделали его наполовину, как упомянули.

Первое из Все они создают Cloud Storage Bucket для задания:

gsutil mb -l europe-north1 gs://keras-cloud-tutorial

Чтобы ответить на ваш вопрос о том, где вы должны писать эти команды, зависит от того, где вы хотите хранить файлы, которые вы будете загружать с GitHub. В уроке, который вы опубликовали, писатель использует свой компьютер для запуска команд, поэтому он инициализирует команду gcloud с gcloud init. Однако вы также можете отправить задание из Cloud Shell, если загрузите туда необходимые файлы. Единственные файлы, которые нам нужны из репозитория , - это папка trainer и файл setup.py. Итак, если мы поместим их в папку с именем keras-cloud-tutorial, у нас будет такая файловая структура:

keras-cloud-tutorial/
├── setup.py
└── trainer
    ├── __init__.py
    ├── cloudml-gpu.yaml
    └── cnn_with_keras.py

Теперь возможной причиной ошибки ImportError: No module named eager является то, что вы могли изменить runtimeVersion внутри файла cloudml-gpu.yaml. Как мы можем прочитать здесь , eager был введен в Tensorflow 1.5. Если вы указали более раннюю версию, вероятно, возникнет эта ошибка. Таким образом, структура cloudml-gpu.yaml должна быть такой:

trainingInput:
  scaleTier: CUSTOM
  # standard_gpu provides 1 GPU. Change to complex_model_m_gpu for 4 GPUs
  masterType: standard_gpu
  runtimeVersion: "1.5"

Примечание: "standard_gpu" - это устаревший тип машины .

Кроме того, файл setup.py должен выглядеть следующим образом:

from setuptools import setup, find_packages

setup(name='trainer',
      version='0.1',
      packages=find_packages(),
      description='Example on how to run keras on gcloud ml-engine',
      author='Username',
      author_email='user@gmail.com',
      install_requires=[
          'keras==2.1.5',
          'h5py'
      ],
      zip_safe=False)

Внимание: Как видите, я указал, что хочу версию 2.1.5 из keras. Это потому, что если я этого не сделаю, будет использована последняя версия, в которой есть проблемы с совместимостью с версиями Tensorflow ранее 2.0.

Если все настроено, вы можете отправить задание, выполнив следующую команду в папке keras-cloud-tutorial:

gcloud ai-platform jobs submit training test_job --module-name=trainer.cnn_with_keras --package-path=./trainer --job-dir=gs://keras-cloud-tutorial --region=europe-west1 --config=trainer/cloudml-gpu.yaml

Примечание: я использовал gcloud ai-platform вместо gcloud ml-engine команда, хотя оба будут работать. Однако, в какой-то момент в будущем gcloud ml-engine станет устаревшим.

Внимание: Будьте внимательны при выборе региона, в котором будет представлено задание. Некоторые регионы не поддерживают графические процессоры и выдают ошибку, если выбраны. Например, если в моей команде я установил параметр region на europe-north1 вместо europe-west1, я получу следующую ошибку:

ОШИБКА: (gcloud.ai-platform.jobs .submit.training) RESOURCE_EXHAUSTED: Ошибка квоты для проекта. Запрос на 1 ускоритель K80 превышает допустимый максимум 0 K80, 0 P100, 0 P4, 0 T4, 0 TPU_V2, 0 TPU_V3, 0 V100. Чтобы узнать больше о квоте Cloud ML Engine, см. https://cloud.google.com/ml-engine/quotas. - '@type': type.googleapis.com/google.rpc.QuotaFailure нарушения: - описание: Запрос на 1 ускорителя K80 превышает допустимый максимум 0 K80, 0 P100, 0 P4, 0 T4, 0 TPU_V2 , 0 TPU_V3, 0 V100. subject:

Подробнее об особенностях каждого региона можно узнать здесь и здесь .

РЕДАКТИРОВАТЬ:

После завершения учебного задания в корзине должно быть 3 папки, которые вы указали: logs/, model/ и packages/. Модель сохраняется в папке model/ и файле .h5. Имейте в виду, что если вы задаете указанную папку c для места назначения, вы должны включить '/' в конце. Например, вы должны установить gs://my-bucket/output/ вместо gs://mybucket/output. Если вы сделаете последнее, вы получите папки output, outputlogs и outputmodel. Внутри output должно быть packages. Ссылка на страницу работы должна указывать на папку output, поэтому обязательно проверьте и остальную часть корзины!

Кроме того, на странице задания AI-Platform вы сможете увидеть информацию об использовании CPU, GPU и Network: AI-Platform training job page screenshot

Кроме того, я хотел бы уточнить кое-что, поскольку я увидел, что вы отправили несколько связанных вопросов в качестве ответа:

Ваша локальная среда, либо ваша личная мама c, либо Cloud Shell не имеет ничего общего с фактической тренировочной работой. Вам не нужно устанавливать какой-либо указанный c пакет или фреймворк локально. Вам просто нужно установить Google Cloud SDK (в Cloud Shell, конечно, он уже установлен) для запуска соответствующих команд gcloud и gsutil. Вы можете прочитать больше о том, как именно учебные задания на AI-Platform работают здесь .

Я надеюсь, что вы найдете мой ответ полезным.

0 голосов
/ 26 января 2020

Теперь проблема с графическим процессором решена, это было так просто: в моем облачном аккаунте Google отключены настройки графического процессора, и его нужно было обновить.

0 голосов
/ 21 января 2020

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

Кажется, что он пытался импортировать что-то из бэкэнда TensorFlow с именем "из tenenflow. python .eager import context" , но была ошибка ImportError: Нет модуля с именем eager

Я попытался "pip install tf-nightly" , который был предложен в другом месте, но в нем говорится, что у меня нет разрешения или я теряю соединение с облачной оболочкой (именно тогда, когда я пытаюсь запустить команда).

Я также попытался создать виртуальную среду локально, чтобы она соответствовала gcloud (с Conda), и создал среду с Conda с Python = 3.5, Tensorflow = 1.14.0 и Keras = 2.2.5 , которые должны поддерживаться для gcloud.

Программа python прекрасно работает в этой среде локально, но я все еще получаю (ImportError: Нет модуль с именем eager) при попытке запустить задание в gcloud.

Я ставлю флаг - python -version 3.5 при отправке задания, но когда я пишу команду "Python -V" в облачной оболочке Google это говорит Python = 2.7. Может ли это быть проблемой? У меня нет способа обновить python версию с подсказкой облачной оболочки, но он говорит, что облако Google должно поддерживать python 3.5. Если это в любом случае проблема, какие-либо предложения о том, как обновить python версию в облаке Google?

Можно также вручную добавить новую работу в веб-интерфейсе облака Google, делая это, я получаю другое сообщение об ошибке: ОШИБКА: не удалось найти версию, которая удовлетворяет требованию cnn_with_keras.py (из версий: нет) и Не найдено соответствующего распределения для cnn_with_keras.py . Где cnn_with_keras.py - мой python код из учебника, который отлично работает локально.

Действительно не знаю, что делать дальше. Любые предложения или советы будут очень полезны!

...