【问题标题】:Azure ML Python SDK mini_batch_size not working as expected on ParallelRunConfig for TabularDatasetAzure ML Python SDK mini_batch_size 在 TabularDataset 的 ParallelRunConfig 上未按预期工作
【发布时间】:2020-11-17 04:29:21
【问题描述】:

我正在使用 Azure ML Python SDK 来构建自定义实验管道。我正在尝试在具有 GPU 的 4 个虚拟机集群上并行运行我的表格数据集的训练。我正在关注此链接上提供的文档https://docs.microsoft.com/en-us/python/api/azureml-contrib-pipeline-steps/azureml.contrib.pipeline.steps.parallelrunconfig?view=azure-ml-py

我面临的问题是,无论我为 mini_batch_size 设置什么值,单个运行都会获得所有行。我正在使用 EntryScript().logger 来检查传递给每个进程的行数。我看到的是我的数据被 4 个虚拟机处理了 4 次,而不是分成 4 个部分。我尝试将mini_batch_size 的值设置为1KB,10KB,1MB,但似乎没有任何区别。

这是我的 ParallelRunConfig 和 ParallelRunStep 代码。任何提示表示赞赏。谢谢

#------------------------------------------------#
# Step 2a - Batch config for parallel processing #
#------------------------------------------------#
from azureml.pipeline.steps import ParallelRunConfig

# python script step for batch processing
dataprep_source_dir = "./src"
entry_point = "batch_process.py"
mini_batch_size = "1KB"
time_out = 300

parallel_run_config = ParallelRunConfig(
    environment=custom_env,
    entry_script=entry_point,
    source_directory=dataprep_source_dir,
    output_action="append_row",
    mini_batch_size=mini_batch_size,
    error_threshold=1,
    compute_target=compute_target,
    process_count_per_node=1,
    node_count=vm_max_count,
    run_invocation_timeout=time_out
)


#-------------------------------#
# Step 2b - Run Processing Step #
#-------------------------------#
from azureml.pipeline.core import PipelineData
from azureml.pipeline.steps import PythonScriptStep
from azureml.pipeline.steps import ParallelRunStep
from datetime import datetime

# create upload dataset output for processing
output_datastore_name = processed_set_name
output_datastore = Datastore(workspace, output_datastore_name)

processed_output = PipelineData(name="scores", 
                          datastore=output_datastore, 
                          output_path_on_compute="outputs/")

# pipeline step for parallel processing
parallel_step_name = "batch-process-" + datetime.now().strftime("%Y%m%d%H%M")

process_step = ParallelRunStep(
    name=parallel_step_name,
    inputs=[data_input],
    output=processed_output,
    parallel_run_config=parallel_run_config,
    allow_reuse=False
)

【问题讨论】:

    标签: azure-machine-learning-studio azure-machine-learning-service azureml azureml-python-sdk


    【解决方案1】:

    我已经找到了这个问题的原因。文档忽略提及的是,mini_batch_size 仅在您的表格数据集包含多个文件时才有效,例如,每个文件的行数为 X 的多个镶木地板文件。如果您有一个包含所有行的巨大文件,mini_batch_size 无法从中仅提取部分数据以进行并行处理。我通过将 Azure Synapse Workspace 数据管道配置为每个文件只存储几行来解决了这个问题。

    【讨论】:

      【解决方案2】:

      它现在适用于 CSV,但不适用于 Parquet。您可以批处理 CSV 文件,例如https://github.com/Azure/MachineLearningNotebooks/blob/master/how-to-use-azureml/machine-learning-pipelines/parallel-run/tabular-dataset-inference-iris.ipynb

      文档没有明确说明某些文件类型的处理方式不同

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-25
        • 1970-01-01
        • 1970-01-01
        • 2013-08-20
        • 2021-12-06
        • 2018-10-17
        • 2021-10-13
        • 1970-01-01
        相关资源
        最近更新 更多