Монтирование наборов файлов в службах машинного обучения Azure

У меня возникла проблема с модулем набора данных в службах машинного обучения Azure. Я создал FileDataset с кучей изображений для обучения модели в TensorFlow. Я монтирую набор данных в целевом вычислении, а затем передаю точку подключения сценарию поезда, как описано в образце записной книжки на GitHub.

Я пробовал два подхода: передать путь как параметр скрипта (как предлагается на GitHub) и как именованный ввод, но ни один из них, похоже, не передает точку монтирования правильно. Кто-нибудь знает, как правильно заставить его работать? (Я могу заставить его работать с источниками данных, кстати)

Как параметр скрипта

script_params = {
    '--data-folder': dset.as_named_input('dogscats_train').as_mount('tmp/dataset'),
} 

src = TensorFlow(source_directory =  r'Tensorflow',
              framework_version = '1.13',
              entry_script = 'train.py',
              script_params=script_params,
              compute_target='amlcompute', 
              vm_size='Standard_NC6', 
              use_gpu = True, 
              pip_packages = ['matplotlib', 'pillow', 'numpy', 'azureml-sdk'])

Установленный путь:

/ mnt / batch / tasks / shared / LS_root / jobs / aa-ml-aml-workspace / azureml / cats-vs-dogs-tensorflow_1570799752_014bea9f / mounts / workspaceblobstore / azureml / cats-vs-dogs-tensorflow_1570799752_014bea9f / dataset /

Фактический путь, полученный в скрипте:

/ tmp / набор данных

Как названный ввод

src = TensorFlow(source_directory =  r'Tensorflow',
              framework_version = '1.13',
              entry_script = 'train.py',
              inputs=[dset.as_named_input('dogscats_train')],
              compute_target='amlcompute', 
              vm_size='Standard_NC6', 
              use_gpu = True, 
              pip_packages = ['matplotlib', 'pillow', 'numpy', 'azureml-sdk'])

Установленный путь:

/ mnt / batch / tasks / shared / LS_root / jobs / aa-ml-aml-workspace / azureml / cats-vs-dogs-tensorflow_1570804147_39168dcf / mounts / workspaceblobstore

Путь, полученный run.input_datasets ['dogscats_train']. mount ('tmp / dataset'). mount_point:

/ mnt / batch / tasks / shared / LS_root / jobs / aa-ml-aml-workspace / azureml / cats-vs-dogs-tensorflow_1570804147_39168dcf / mounts / workspaceblobstore / azureml / cats-vs-dogs-tensorflow_1570804147_39168dcf / dataset /


person Facundo Santiago    schedule 11.10.2019    source источник


Ответы (1)


В обоих подходах путь, который вы передали as_mount и mount, является относительным путем, то есть он не начинается с ведущего /, это приведет к тому, что набор данных будет смонтирован относительно текущего рабочего каталога, который в вашем случае /mnt/batch/tasks/shared/LS_root/jobs/aa-ml-aml-workspace/azureml/cats-vs-dogs-tensorflow_1570799752_014bea9f/mounts/workspaceblobstore/azureml/cats-vs-dogs-tensorflow_1570799752_014bea9f.

Если вы хотите подключиться к /tmp/dataset, вам нужно будет сделать dset.as_named_input('dogscats_train').as_mount('/tmp/dataset'), то есть вам нужно явно добавить / к целевому пути, чтобы сделать путь абсолютным.

Я создал суть, чтобы показать влияние относительного пути по сравнению с абсолютным путем.

submit.py: отправляет запуск TensorFlow

so.py: сравнивает два аргумента, первый аргумент - относительный путь, второй - абсолютный путь.

driver_log_partial.txt: это частичный вывод журнала драйвера, который вы видите на странице сведений о запуске.

Теперь что касается имени, которое вы передали as_named_input. Затем это имя становится доступным как переменная среды, значение которой совпадает со значением аргумента сценария, который представляет собой путь, по которому монтируется набор данных. Имя также доступно как ключ к run.input_datasets, где значение также является путем, по которому монтируется набор данных. Другими словами, есть три способа получить доступ к смонтированному пути, вы можете выбрать тот, который лучше всего подходит для вашего кода.

person Rongduan Zhu    schedule 12.10.2019
comment
Привет @Rongduan. Спасибо за ваш ответ. Однако использование абсолютного пути заставляет драйвер блокировать себя при чтении папки. Вы пробовали читать содержимое по смонтированному пути? Я также попытался смонтировать в папке / mnt / azuremnt, где также смонтирован путь кода, и тот же результат. Независимо от этого, если мы используем относительную папку, разве не ожидается, что метод вернет правильный смонтированный путь? - person Facundo Santiago; 15.10.2019
comment
Привет @FacundoSantiago, для меня он не заблокировался. Я не менял скрипт отправки работы, но изменил свой so.py. Пожалуйста, просмотрите эту суть для моего пробега. Не могли бы вы поделиться своим сценарием подачи заявки и сценарием работы? - person Rongduan Zhu; 16.10.2019