0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Azure Machine Learningで「徐々に」管理対象を増やす

Last updated at Posted at 2021-04-14

データセット

前回までは、ローカルリポジトリのデータを丸ごとワークスペースにアップロードして、それをロードしていましたが、これをsubmitごとにやるのは(いくつか利点はなくもないですが)無駄です。

before : submitごとにアップロード

以下のようにソースディレクトリにdataファイルを入れて置き、丸ごとアップロードな感じでした。

amlrun.py
runconfig = ScriptRunConfig(source_directory=project_folder, script="xxx.py")
...
script_params = {
    '--datafile': 'xxxx.csv', ...
}
estimator = SKLearn(source_directory=project_folder, 
                script_params=script_params,
                entry_script='estimator.py', ...
)
estimator.py
parser.add_argument('--datafile', type=str, default='',
                     help='Data file for train/predict')
...
df = pd.read_csv(datapath + datafile)

Datastoreへの登録

AMLSのサンプルコードの多くはパブリックデータセットをAMLSのデフォルトリポジトリから抽出して利用するので、あまりこの辺が判然としませんでした。いくつか解説記事を読んでわかりました。

セットアップコードは以下でrunnerと同じ。

register_data.py
# おまじない デフォルトのdatastoreを得る
from azureml.core import Workspace, Dataset, Datastore
from azureml.data.dataset_factory import DataType,FileDatasetFactory
ws = Workspace.from_config()
datastore = Datastore.get(ws, 'workspaceblobstore')

datastoreへのアップロード

さしあたり、手元のデータをデータストアにアップロードします。

register_data.py
datastore.upload_files(files=['./data/data1.csv'], target_path='data/')

または、以下のようにディレクトリごとアップロードも可能です。

register_data.py
datastore.upload(src_dir='data', target_path='data')

DataSetとして登録

実際にデータセットとしてMLパイプラインに投入するにはDatasetとして登録する必要があります。
以下の二つのDatasetがあります。

  • Tabuler
  • File

TabularはCSVなどの表データ、Fileは画像など表にならない非構造化、半構造化データなどを入れるものです。それぞれ以下のような作り方になります。

register_data.py
tab_dataset = Dataset.Tabular.from_delimited_files(path=(datastore,'data/data1.csv'))
file_dataset = Dataset.File.from_files(path=(datastore,'data/data1.csv'))

以下のようにすると、ALM Studioからも見える、Registered datasetになります。

register_data.py
tab_dataset = tab_dataset.register(workspace=ws, name='tab_ds1', description='dataset 1 in tabular format', tags={'format':'CSV'}, create_new_version=True)
file_dataset = file_dataset.register(workspace=ws, name='file_ds1', description='dataset 1 in Files format', tags={'format':'CSV'}, create_new_version=True)

ひとたびRegistered datasetになればStudio UIからのアクセスが可能になります。

一方StudioのUIから直接登録したデータセットはというと、以下のように"UI/時刻'というフォルダが生成されており、そのパスでのアクセスとなっています。

datasetの利用

普通に引数として渡していた場合は以下のようにファイルを抽出すればOKです。

estimator.py
workspace = run.experiment.workspace
dataset = Dataset.get_by_name(workspace=workspace, name=datafile)
df = dataset.to_pandas_dataframe()

この場合でも、入力データセットしてこのDatasetが利用された事が実験に記録されるようになります。入力名はなしですが。

正規の方法で入力データセットをトラックするには以下のように行います。SKLearnなどrunconfigの設定にinputs(など)パラメータでdatasetを登録します。.as_named_input が実際のデータセット名ではなく、この実験の引数名として引き渡されます。

amlrun.py

dataset = Dataset.get_by_name(workspace=ws, name="registered_dataset")
estimator = SKLearn(source_directory=project_folder, 
                script_params=script_params,
                inputs=[dataset.as_named_input('input_ds')],
                entry_script='estimator.py', ...
)
estimator.py
df = run.input_datasets['input_ds'].to_pandas_dataframe()

これで以下のように入力名が実験に記録されるようになります。

モデル

モデルを専用の場所に登録することで、再利用をしやすくします。
これまではlogフォルダに出力するだけでしたが、以下のように登録を行うことが可能です。
通常はpklモデルを登録するのですが、ここではBayesServerのモデルファイルを登録してみました。
当然ながら、推論側で特殊な対応が必要になります。

amlrun.py
from azureml.core import Model
run.register_model(model_path='log/model.bayes', model_name='iris_estimator_model', tags={"Training Context":"Estimator", "Script Context":"Parameters"},
                  properties={"Accuracy":run.get_metrics()["Accuracy"]})

これまで空であったモデルが表示されるようになります。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?