Монтирование наборов файловых данных в службах Azure ML - PullRequest
0 голосов
/ 11 октября 2019

У меня проблема с модулем набора данных в службах машинного обучения 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-tenorflow_1570799752_014bea9f / mounts / workspaceblobstore / azureml / cats-vs-dogs-тенorflow_1570799752_014bea9f / tmp / 1015

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

/ 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-тенorflow_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 / кошки-против-собак-tensorflow_1570804147_39168dcf / крепления / workspaceblobstore / azureml / кошки-против-собак-tensorflow_1570804147_39168dcf / TMP / набор данных

1 Ответ

2 голосов
/ 12 октября 2019

В обоих подходах путь, который вы передали 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'), то есть вам нужно явно добавить / к целевому пути, чтобы сделать путь абсолютным путем.

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

submit.py: Отправляет прогон TensorFlow

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

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

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

...