Доступ к файлам в Google Storage из задания Google Cloud Python - PullRequest
0 голосов
/ 30 марта 2020

Я свободно следую учебнику , чтобы обучить оценщика TensorFlow на Google Cloud AI Platform.

Я хотел бы получить доступ к каталогу, содержащему мои данные обучения и оценки, и к этому конец Я рекурсивно скопировал свои файлы данных в Google Storage следующим образом:

gsutil cp -r data gs://name-of-my-bucket/data

Это нормально работает, и gsutil ls gs://name-of-my-bucket/data правильно возвращает:

gs://name-of-my-bucket/data/test.json
gs://name-of-my-bucket/data/test
gs://name-of-my-bucket/data/train

Однако, вызывая os.listdir(data_dir) из скрипт Python поднимает FileNotFoundError для любого значения data_dir, которое я пробовал до сих пор, включая 'data/' и 'name-of-my-bucket/data/'. Почему?

Я знаю, что мой Python скрипт выполняется из каталога /root/.local/lib/python3.7/site-packages/trainer/ /user_dir.

Python кода, в котором возникает проблема ( edit)

Вот код, который предшествует строке, где возникает ошибка, прямо из секции __main__ моего Python скрипта:

PARSER = argparse.ArgumentParser()
PARSER.add_argument('--job-dir', ...)
PARSER.add_argument('--eval-steps', ...)
PARSER.add_argument('--export-format', ...)

ARGS = PARSER.parse_args()
tf.logging.set_verbosity('INFO')
os.environ['TF_CPP_MIN_LOG_LEVEL'] = str(tf.logging.__dict__['INFO'] / 10)

HPARAMS = hparam.HParams(**ARGS.__dict__)

Вот строка кода где возникает ошибка (первая строка отдельной функции, которая вызывается сразу после строк кода, о которых я сообщал выше):

mug_dirs = [f for f in os.listdir(image_dir) if not f.startswith('.')]

Журналы (редактировать)

Мои журналы для этой работы это список информация (плюс 5 устаревших предупреждений , связанных с TensorFlow), а затем ошибка из задачи master-replica-0:

Traceback (most recent call last): File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/root/.local/lib/python3.7/site-packages/trainer/final_task.py", line 114, in <module> train_model(HPARAMS) File "/root/.local/lib/python3.7/site-packages/trainer/final_task.py", line 55, in train_model (train_data, train_labels) = data.create_data_with_labels("data/train/") File "/root/.local/lib/python3.7/site-packages/trainer/data.py", line 13, in create_data_with_labels mug_dirs = [f for f in os.listdir(image_dir) if not f.startswith('.')] FileNotFoundError: [Errno 2] No such file or directory: 'data/train/'

... сопровождается еще одной ошибкой из той же задачи (сообщение о ненулевом состоянии завершения из моей команды Python), затем две информация об очистке и наконец, ошибка из задачи service:

The replica master 0 exited with a non-zero status of 1. Traceback (most recent call last): File "/usr/lib/python3.7/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.7/runpy.py", line 85, in _run_code exec(code, run_globals) File "/root/.local/lib/python3.7/site-packages/trainer/final_task.py", line 114, in <module> train_model(HPARAMS) File "/root/.local/lib/python3.7/site-packages/trainer/final_task.py", line 55, in train_model (train_data, train_labels) = data.create_data_with_labels("data/train/") File "/root/.local/lib/python3.7/site-packages/trainer/data.py", line 13, in create_data_with_labels mug_dirs = [f for f in os.listdir(image_dir) if not f.startswith('.')] FileNotFoundError: [Errno 2] No such file or directory: 'data/train/' To find out more about why your job exited please check the logs: https://console.cloud.google.com/logs/viewer?project=1047296516162&resource=ml_job%2Fjob_id%2Fml6_run_25&advancedFilter=resource.type%3D%22ml_job%22%0Aresource.labels.job_id%3D%22ml6_run_25%22

1 Ответ

0 голосов
/ 31 марта 2020

Объекты облачного хранилища являются плоским пространством имен и не содержатся в папках. Благодаря более удобному интерфейсу пользователя gsutil и пользовательский интерфейс Google Cloud Storage создадут иллюзию иерархического дерева файлов. Дополнительную информацию можно найти в документации .

Теперь, если вы пытаетесь читать из файлового объекта, размещенного в облачном хранилище, вы можете использовать следующее документация для загрузки объекта в локальный каталог с использованием клиентских библиотек облачного хранилища. В качестве альтернативы вы также можете использовать команду gsutil cp , которая позволит вам копировать данные между вашим локальным каталогом и хранилищами облачного хранилища, среди других вариантов.

Как только вы загрузите объект реплики из корзины GCS в вашем локальном каталоге, вы сможете манипулировать этим файлом по мере необходимости.

Обновление - ссылка на объектный файл облачного хранилища - не используйте os.listdir для доступа к объекту корзины GCS.

Поскольку облачное хранилище - это плоское пространство имен, хранилище облачного хранилища, gs://my-bucket/data/test.json будет содержать объект с именем data/test.json, хранящийся в каталоге root gs://my-bucket. Обратите внимание, что имя объекта включает / символов. Поэтому, если вы хотите получить доступ, например, к вашему файлу test.json в вашем контейнере, вы можете проверить приведенную выше документацию и использовать data/test.json в качестве ссылки - концепция папки сама по себе не существует. При желании, если вам нужен доступ к объекту файла поезда, вы можете использовать data/train в качестве ссылки.

...