Как запустить сценарий Python поверх результата, созданного с помощью сценария U-SQL в конвейерах машинного обучения Azure?

Я хочу обработать большие таблицы, хранящиеся в хранилище озера данных Azure (Gen 1), сначала запустить на них сценарий U-SQL, затем сценарий Python и, наконец, вывести результат.

Концептуально это довольно просто:

  1. Запустите сценарий .usql для генерации промежуточных данных (две таблицы, intermediate_1 и intermediate_2) из большого initial_table
  2. Запустите сценарий Python над промежуточными данными, чтобы получить окончательный результат final

Каковы должны быть шаги конвейера машинного обучения Azure для этого?

Я думал, что следующий план сработает:

  1. Запустите запрос .usql на adla_compute, используя AdlaStep как

    int_1 = PipelineData("intermediate_1", datastore=adls_datastore)
    int_2 = PipelineData("intermediate_2", datastore=adls_datastore)
    
    adla_step = AdlaStep(script_name='script.usql',
                         source_directory=sample_folder,
                         inputs=[initial_table],
                         outputs=[intermediate_1, intermediate_2],
                         compute_target=adla_compute)          
    
  2. Выполните шаг Python на целевой вычислительной машине aml_compute, например

    python_step = PythonScriptStep(script_name="process.py",
                                   arguments=["--input1", intermediate_1, "--input2", intermediate_2, "--output", final],
                                   inputs=[intermediate_1, intermediate_2],
                                   outputs=[final],    
                                   compute_target=aml_compute, 
                                   source_directory=source_directory)
    

Однако это не удается на этапе Python с ошибкой типа

StepRun (process.py) Сводка выполнения

======================================
StepRun (process.py) Статус: сбой

Невозможно подключить хранилище данных mydatastore, поскольку в нем не указан ключ учетной записи хранения.

Я действительно не понимаю ошибку, связанную с жалобой на mydatastore, имя которой связано с adls_datastore ссылкой на хранилище данных Azure Data Lake, для которого я выполняю запросы U-SQL.

Кто-нибудь может почувствовать запах, если я здесь что-то делаю не так? Следует ли переместить промежуточные данные (intermediate_1 и intermediate_2) в учетную запись хранения, например с DataTransferStep, до PythonScriptStep?


person Davide Fiocco    schedule 10.07.2019    source источник


Ответы (2)


ADLS не поддерживает монтирование. Итак, вы правы, вам нужно будет сначала использовать DataTransferStep, чтобы переместить данные в большой двоичный объект.

person Santhosh Pillai    schedule 05.08.2019

Хранилище озера данных не поддерживается для вычислений AML. В этой таблице перечислены различные вычисления и их уровень поддержки для разных хранилищ данных: https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-access-data#compute-and-datastore-matrix

Вы можете использовать DataTransferStep для копирования данных из ADLS в большой двоичный объект, а затем использовать этот большой двоичный объект в качестве входных данных для PythonScriptStep. Образец записной книжки: https://github.com/Azure/MachineLearningNotebooks/blob/master/how-to-use-azureml/machine-learning-pipelines/intro-to-pipelines/aml-pipelines-data-transfer.ipynb


# register blob datastore, example in linked notebook
# blob_datastore = Datastore.register_azure_blob_container(...

int_1_blob = DataReference(
    datastore=blob_datastore,
    data_reference_name="int_1_blob",
    path_on_datastore="int_1")

copy_int_1_to_blob = DataTransferStep(
    name='copy int_1 to blob',
    source_data_reference=int_1,
    destination_data_reference=int_1_blob,
    compute_target=data_factory_compute)

int_2_blob = DataReference(
    datastore=blob_datastore,
    data_reference_name="int_2_blob",
    path_on_datastore="int_2")

copy_int_2_to_blob = DataTransferStep(
    name='copy int_2 to blob',
    source_data_reference=int_2,
    destination_data_reference=int_2_blob,
    compute_target=data_factory_compute)

# update PythonScriptStep to use blob data references
python_step = PythonScriptStep(...
                               arguments=["--input1", int_1_blob, "--input2", int_2_blob, "--output", final],
                               inputs=[int_1_blob, int_2_blob],
                               ...)
person akshay    schedule 15.08.2019