首先要搞清楚两个慨念:
1.Datastores---相当于数据库,用于数据存储的管理,浏览,blob指二进制数据存储
2.Dataset---相当于数据库中的表,用于数据的处理
文件结构(三个文件,两个文件夹):
主文件,这里命名为pipelineDataProcessing.py
文件夹train以及文件夹下面的文件train.py
文件夹prep以及文件夹下面的文件prep.py,一个题外话:为什么不和train.py共用一个文件夹?因为执行代码时会将文件夹下面的文件拷贝到服务器运行,文件越少,速度越快
好了,下面来看代码,先看:
pipelineDataProcessing.py
首先要添加引用,如果没有安装的化,先安装需要的包
from azureml.core import Datastore,Experiment,Workspace
form azureml.data import OutputFileDatasetConfig
from azureml.data.datapath import DataPath,DataPathComputeBinding
from azureml.pipeline.core import Pipeline,PipelineParameter
from azureml.pipeline.steps import PythonScriptStep
然后获取workspace
#本地运行要创建一个.azureml文件夹,里面创建一个config.json文件
#配置要有三个要素:{"subscription_id":"xxxx","resource_group":"xxxx","workspace_name":"xxxx"}
ws=Workspace.from_config()
定于一个实验路径,所运行的实验会放到这个路径下面
experiment_name="my_experiment"
experiemnt=Experiment(ws,experiment_name)
指定你要用到的计算机实例(如果没有先创建一个,代码创建参考论坛其他帖子)
#"csdn-cp"需改成自己的计算机实例名
compute_name="csdn-cp"
compute_target=ws.compute_targets[compute_name]
获得workspaceblobstore
#也可以用Datastore(ws,"datastorename")来指定
def_blob_store=ws.get_default_datastore()
定义管道参数
pipeline_param_string=PipelineParameter(
name="input_string",
default_value='sample_string')
data_path=DataPath(
datastore=def_blob_store,
path_on_datastore='csv在datastore中文件路径')
pipeline_param_datapath=PipelineParameter(
name="input_datapath",
default_value=data_path)
datapath_input=(pipeline_param_datapath,DataPathComputeBind(mode='mount'))
定义输出:
output_data=OutputFileDatasetConfig(
name="train_data",
destination=(
def_blob_store,
"UI/{rn-id}/output-name}")).as_mount()
#注册以后的数据可以在Data中看到,可以直接引用
datatrain_output=output_data.register_on_completer(
name='train_data',
description='file from prep',
tags={"step":['step1']})
定义运行的步骤:
prep_step=PythonScriptStep(
name='prep_step',
script_name='prep.py',
arguments=[
"--arg1",pipeline_param_string,
"--arg2",datapath_output,
"--arg3",datatrain_output],
inputs=[datapath_input],
outputs=[datatrain_output],
compute_target=compute_target,
source_directory="./prep")
train_step=PythonScriptStep(
name='train_step',
script_name='train.py',
arguments=[
"--input",datatrain_output],
inputs=[datatrain_output],
compute_target=compute_target,
source_directory="./train",
allow_reuse=True)
定义pipeline:
pipeline=Pipeline(workspace=ws,steps=[prep_step,train_step])
pipeline_run=experiment.submit(pipeline)
pipeline_run.wait_for_completion()
再看
prep.py
import argparse
import csv
import os
添加运行时候的参数:
parser=argparse.ArgumentParser("perp")
parser.add_argument("--arg1",type=str,help="string sample")
parser.add_argument("--arg2",type=str,help="datapath sample")
parser.add_argument("--arg3",type=str,help="dataoutput sample")
args=parser.parse_args()
这里可以看到参数都是字符串,那数据如何来操作呢?
#arg2指向的是一个csv数据集
data_path=args.arg2
with open(data_path) as f:
reader=csv.reader(f)
i=1
for row in reader:
print('第 %d 行的数据为: %s',%(i,row))
i=i+1
with open(data_path,'rb') as f:
content=f.read()
with open(os.path.join(args.arg3,'csv-file.csv'),'wb') as fw:
fw.write(content)
print(output file have been saved)
train.py是在prep.py基础上简化一下就可以了,这里就不再列出来了
运行pipelineDataProcessing.py后,在experiment(现在是Jobs)下面打开对应的实验,可以看到pipeline,点右上角的Job overview可以看到pipeline的参数等,点prep_step切换到prep_step的属性页面,可以看到参数,logs,上传的代码等。在outputs+logs下面选70_driver_log.txt,可以看到程序运行时的输出(print输出内容,可以检查确认),下面是一个管道的图片,和上面的代码对应不上,不过也可以看下pipeline是什么样子。