如何正确写入 Azure PipelineData?
how to write to Azure PipelineData properly?
我正在尝试学习 Azure,但运气不佳(目前)。当配置为“上传”模式时,所有教程都将 PipelineData 用作文件。但是,我收到“FileNotFoundError:[Errno 2] 没有这样的文件或目录:''”错误。我很想问一个更具体的问题,但我就是看不出我做错了什么。
from azureml.core import Workspace, Datastore,Dataset,Environment
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException
from azureml.core.runconfig import RunConfiguration
from azureml.core.conda_dependencies import CondaDependencies
from azureml.pipeline.steps import PythonScriptStep
from azureml.pipeline.core import Pipeline, PipelineData
import os
ws = Workspace.from_config()
datastore = ws.get_default_datastore()
compute_name = "cpucluster"
compute_target = ComputeTarget(workspace=ws, name=compute_name)
aml_run_config = RunConfiguration()
aml_run_config.target = compute_target
aml_run_config.environment.python.user_managed_dependencies = False
aml_run_config.environment.python.conda_dependencies = CondaDependencies.create(
conda_packages=['pandas','scikit-learn'],
pip_packages=['azureml-sdk', 'azureml-dataprep[fuse,pandas]'],
pin_sdk_version=False)
output1 = PipelineData("processed_data1",datastore=datastore, output_mode="upload")
prep_step = PythonScriptStep(
name="dataprep",
script_name="dataprep.py",
source_directory=os.path.join(os.getcwd(),'dataprep'),
arguments=["--output", output1],
outputs = [output1],
compute_target=compute_target,
runconfig=aml_run_config,
allow_reuse=True
)
在 dataprep.py 我有以下内容:
import numpy, argparse, pandas
from azureml.core import Run
run = Run.get_context()
parser = argparse.ArgumentParser()
parser.add_argument('--output', dest='output', required=True)
args = parser.parse_args()
df = pandas.DataFrame(numpy.random.rand(100,3))
df.iloc[:, 2] = df.iloc[:,0] + df.iloc[:,1]
print(df.iloc[:5,:])
df.to_csv(args.output)
所以,是的。 pd 应该写入输出,但我的计算集群表示如下:
"User program failed with FileNotFoundError: [Errno 2] No such file or directory: ''\".
当我不包含 to_csv() 函数时,集群不会抱怨
这是 PRS 的 example。
PipelineData 旨在表示从一步到下一步的“瞬态”数据,而 OutputDatasetConfig 旨在捕获数据集的最终状态(因此您会看到沿袭、ADLS 支持等功能)。 PipelineData 始终以类似 {run_id}{output_name} 的文件夹结构输出数据。 OutputDatasetConfig 允许将数据与 运行 分离,因此它允许您控制将数据放置在何处(尽管默认情况下它会产生类似的文件夹结构)。 OutputDatasetConfig 甚至允许将输出注册为数据集,在这种情况下摆脱这种文件夹结构是有意义的。从文档本身:“表示如何复制 运行 的输出并提升为 FileDataset。OutputFileDatasetConfig 允许您指定如何将计算目标上的特定本地路径上传到指定目的地".
OutFileDatasetConfig 是一个控制平面概念,用于在流水线步骤之间传递数据。
我正在尝试学习 Azure,但运气不佳(目前)。当配置为“上传”模式时,所有教程都将 PipelineData 用作文件。但是,我收到“FileNotFoundError:[Errno 2] 没有这样的文件或目录:''”错误。我很想问一个更具体的问题,但我就是看不出我做错了什么。
from azureml.core import Workspace, Datastore,Dataset,Environment
from azureml.core.compute import ComputeTarget, AmlCompute
from azureml.core.compute_target import ComputeTargetException
from azureml.core.runconfig import RunConfiguration
from azureml.core.conda_dependencies import CondaDependencies
from azureml.pipeline.steps import PythonScriptStep
from azureml.pipeline.core import Pipeline, PipelineData
import os
ws = Workspace.from_config()
datastore = ws.get_default_datastore()
compute_name = "cpucluster"
compute_target = ComputeTarget(workspace=ws, name=compute_name)
aml_run_config = RunConfiguration()
aml_run_config.target = compute_target
aml_run_config.environment.python.user_managed_dependencies = False
aml_run_config.environment.python.conda_dependencies = CondaDependencies.create(
conda_packages=['pandas','scikit-learn'],
pip_packages=['azureml-sdk', 'azureml-dataprep[fuse,pandas]'],
pin_sdk_version=False)
output1 = PipelineData("processed_data1",datastore=datastore, output_mode="upload")
prep_step = PythonScriptStep(
name="dataprep",
script_name="dataprep.py",
source_directory=os.path.join(os.getcwd(),'dataprep'),
arguments=["--output", output1],
outputs = [output1],
compute_target=compute_target,
runconfig=aml_run_config,
allow_reuse=True
)
在 dataprep.py 我有以下内容:
import numpy, argparse, pandas
from azureml.core import Run
run = Run.get_context()
parser = argparse.ArgumentParser()
parser.add_argument('--output', dest='output', required=True)
args = parser.parse_args()
df = pandas.DataFrame(numpy.random.rand(100,3))
df.iloc[:, 2] = df.iloc[:,0] + df.iloc[:,1]
print(df.iloc[:5,:])
df.to_csv(args.output)
所以,是的。 pd 应该写入输出,但我的计算集群表示如下:
"User program failed with FileNotFoundError: [Errno 2] No such file or directory: ''\".
当我不包含 to_csv() 函数时,集群不会抱怨
这是 PRS 的 example。 PipelineData 旨在表示从一步到下一步的“瞬态”数据,而 OutputDatasetConfig 旨在捕获数据集的最终状态(因此您会看到沿袭、ADLS 支持等功能)。 PipelineData 始终以类似 {run_id}{output_name} 的文件夹结构输出数据。 OutputDatasetConfig 允许将数据与 运行 分离,因此它允许您控制将数据放置在何处(尽管默认情况下它会产生类似的文件夹结构)。 OutputDatasetConfig 甚至允许将输出注册为数据集,在这种情况下摆脱这种文件夹结构是有意义的。从文档本身:“表示如何复制 运行 的输出并提升为 FileDataset。OutputFileDatasetConfig 允许您指定如何将计算目标上的特定本地路径上传到指定目的地".
OutFileDatasetConfig 是一个控制平面概念,用于在流水线步骤之间传递数据。