FIX : typo
This commit is contained in:
Родитель
a1a7c85d24
Коммит
0433a3b9b7
|
@ -1,499 +1,499 @@
|
|||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Azure Machine Learning による機械学習プロセス - モデル学習編\n",
|
||||
"本ノートブックでは、オープンソースライブラリの LightGBM (Python API) を用いたモデルを構築します。各機械学習プロセスを Azure Machine Learning Python SDK を用いて実行します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## アジェンダ\n",
|
||||
"### **A. 学習編 (本ノートブック)**\n",
|
||||
"- ワークスペース (Workspace) への接続\n",
|
||||
"- データセット (Datasets) の登録\n",
|
||||
"- 環境 (Environments) の登録\n",
|
||||
"- コンピューティングクラスター (Compute Clusters) の作成\n",
|
||||
"- モデル学習の実行と実験 (Runs & Experiments)\n",
|
||||
"- モデル登録 (Models)\n",
|
||||
"\n",
|
||||
"### B. デプロイ編\n",
|
||||
"- ワークスペース (Workspace) への接続\n",
|
||||
"- 推論環境の作成 (Endpoints)\n",
|
||||
"- エンドポイントの利用 (Endpoints)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 事前設定\n",
|
||||
"- 本ノートブックは Azure Machine Learning の Compute Instances を利用することを想定しています。\n",
|
||||
"- 開発環境は JupyterLab, VSCode, Integrated Notebook など Compute Instances で稼働するものであれば自由に選択いただけます。\n",
|
||||
"- カーネルは `python38-azureml (Python 3.8 AzureML)` を選択ください。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ワークスペース (Workspace) への接続\n",
|
||||
"クライアント環境の Python 環境にインストールした Azure ML Python SDK を用いて Azure Machine Learning Workspace に接続します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085804152
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Azure Machine Learning による機械学習プロセス - モデル学習編\n",
|
||||
"本ノートブックでは、オープンソースライブラリの LightGBM (Python API) を用いたモデルを構築します。各機械学習プロセスを Azure Machine Learning Python SDK を用いて実行します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## アジェンダ\n",
|
||||
"### **A. 学習編 (本ノートブック)**\n",
|
||||
"- ワークスペース (Workspace) への接続\n",
|
||||
"- データセット (Datasets) の登録\n",
|
||||
"- 環境 (Environments) の登録\n",
|
||||
"- コンピューティングクラスター (Compute Clusters) の作成\n",
|
||||
"- モデル学習の実行と実験 (Runs & Experiments)\n",
|
||||
"- モデル登録 (Models)\n",
|
||||
"\n",
|
||||
"### B. デプロイ編\n",
|
||||
"- ワークスペース (Workspace) への接続\n",
|
||||
"- 推論環境の作成 (Endpoints)\n",
|
||||
"- エンドポイントの利用 (Endpoints)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 事前設定\n",
|
||||
"- 本ノートブックは Azure Machine Learning の Compute Instances を利用することを想定しています。\n",
|
||||
"- 開発環境は JupyterLab, VSCode, Integrated Notebook など Compute Instances で稼働するものであれば自由に選択いただけます。\n",
|
||||
"- カーネルは `python38-azureml (Python 3.8 AzureML)` を選択ください。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## ワークスペース (Workspace) への接続\n",
|
||||
"クライアント環境の Python 環境にインストールした Azure ML Python SDK を用いて Azure Machine Learning Workspace に接続します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085804152
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Compute Instances を利用する場合\n",
|
||||
"from azureml.core import Workspace\n",
|
||||
"ws = Workspace.from_config()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085804199
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# # その他の任意のクライアント環境を利用する場合\n",
|
||||
"# ws = Workspace.get(\n",
|
||||
"# name='name',\n",
|
||||
"# subscription_id='subscription_id',\n",
|
||||
"# resource_group='resource_group',\n",
|
||||
"# )"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## データストア (Datastores) の利用\n",
|
||||
"データソースへの接続情報を保持しているデータストア (Datastores) を利用して、CSV ファイルを Azure ストレージ (Azure ML のデフォルトストレージ) にアップロードします。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# データストア (Datastores) へのアップロード\n",
|
||||
"datastore = ws.get_default_datastore()\n",
|
||||
"datastore.upload_files(files=['../data/Titanic.csv'],\n",
|
||||
" target_path='demo',\n",
|
||||
" overwrite=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## データセット (Datasets) の登録\n",
|
||||
"データストア (Datstores) として定義されたAzure のストレージやデータベースに格納されているデータをデータセット (Datasets) として登録します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085810518
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from azureml.core import Dataset\n",
|
||||
"\n",
|
||||
"# データセット (Datasets) の登録\n",
|
||||
"datastore_paths = [(datastore, 'demo/Titanic.csv')]\n",
|
||||
"# 表形式を選択\n",
|
||||
"titanic_ds = Dataset.Tabular.from_delimited_files(path=datastore_paths)\n",
|
||||
"titanic_ds.register(ws, \"titanic\", create_new_version=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Azure Machine Learning Studio にて正常に登録されていることを確認します。<br>\n",
|
||||
"<img src=\"docs/images/azureml-dataset4.png\" width=900><br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 環境 (Environments) の登録\n",
|
||||
"モデル学習や推論で利用する Python ライブラリとそのバージョンを環境 (Environments) として登録します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"環境の名称は `lightgbm-python-env` とし、「Python 仮想環境」を選択し、Python ライブラリとそのバージョンが記載されている [environments/requirements.txt](environments/requirements.txt) のファイルを読み込み、環境を作成します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085810575
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from azureml.core import Environment\n",
|
||||
"environment_name = \"lightgbm-python-env\"\n",
|
||||
"pip_file_path = \"../environments/requirements.txt\"\n",
|
||||
"conda_file_path = \"../environments/conda-env.yml\"\n",
|
||||
"env = Environment.from_conda_specification(name = environment_name, file_path = conda_file_path)\n",
|
||||
"#env = Environment.from_pip_requirements(name = environment_name, file_path = pip_file_path)\n",
|
||||
"env.register(ws)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Azure Machine Learning Studio にて正常に登録されていることを確認します。<br>\n",
|
||||
"<img src=\"docs/images/azureml-environment2.png\" width=500><br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## コンピューティングクラスター (Compute Clusters) の作成\n",
|
||||
"(バッチ的な) モデル学習に利用する計算クラスターであるコンピューティングクラスター (Compute Clusters) を作成します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"名称は `cpu-clusters` とし、(例えば) Standard_F4s_v2 VM ファミリーを選択します。<br>\n",
|
||||
"最小ノード数は 0、最大ノード数は 4 などに設定し、コンピューティングクラスターを作成します。<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085810668
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"compute_name = \"cpu-clusters\""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085811507
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from azureml.core.compute import ComputeTarget, AmlCompute\n",
|
||||
"\n",
|
||||
"# TODO: 仮想ネットワークの情報を記載\n",
|
||||
"# vnet_resourcegroup_name = \"\"\n",
|
||||
"# vnet_name = \"\"\n",
|
||||
"# subnet_name = \"default\"\n",
|
||||
"\n",
|
||||
"if compute_name not in ws.compute_targets: # compute_name の名前の Compute Cluster が無ければ...\n",
|
||||
" compute_config = AmlCompute.provisioning_configuration(vm_size = \"Standard_F4S_V2\", \n",
|
||||
" max_nodes=4, \n",
|
||||
" idle_seconds_before_scaledown = 300,\n",
|
||||
" #vnet_resourcegroup_name=vnet_resourcegroup_name,\n",
|
||||
" #vnet_name=vnet_name,\n",
|
||||
" #subnet_name=subnet_name\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" ct = ComputeTarget.create(ws, compute_name, compute_config)\n",
|
||||
" ct.wait_for_completion(show_output=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Azure Machine Learning Studio にて正常に登録されていることを確認します。<br>\n",
|
||||
"<img src=\"docs/images/azureml-computeclusters4.png\" width=500><br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## モデル学習の実行 (Runs & Experiments)\n",
|
||||
"モデル学習を実行します。それぞれの実行 (Runs) は実験 (Experiments) に情報が集約されます。実験名は `ftalive-lgb-train` とします。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085811566
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from azureml.core import Experiment\n",
|
||||
"\n",
|
||||
"experiment_name = \"ftalive-lgb-train\"\n",
|
||||
"experiment = Experiment(ws, experiment_name)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ScriptRunConfig で実行の構成設定をします。\n",
|
||||
"- 参考ドキュメント : [トレーニングの実行を構成して送信する - スクリプト実行構成とは](https://docs.microsoft.com/ja-JP/azure/machine-learning/how-to-set-up-training-targets#whats-a-script-run-configuration)\n",
|
||||
"\n",
|
||||
"なお、学習コードは [script/train-lgb.py](script/train-lgb.py) から確認できます。学習データは Azure Machine Learning に登録されているものを呼びだしています。メトリックの記録は MLflow の Autolog 機能などを用いています。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085811603
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from azureml.core import ScriptRunConfig\n",
|
||||
"\n",
|
||||
"script_dir = \"script\"\n",
|
||||
"script_name = \"train-lgb.py\"\n",
|
||||
"args = [\"--input-data\", titanic_ds.as_named_input('titanic')]\n",
|
||||
"\n",
|
||||
"src = ScriptRunConfig(\n",
|
||||
" source_directory=script_dir,\n",
|
||||
" script=script_name,\n",
|
||||
" environment=env,\n",
|
||||
" arguments=args,\n",
|
||||
" compute_target=compute_name,\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ジョブを実行します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085817723
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"run = experiment.submit(src)\n",
|
||||
"run"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ジョブ実行が完了するまで待機します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085966563
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"run.wait_for_completion(show_output=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085966613
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# run.download_files(output_directory=experiment_name+\"_logging\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085966620
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"run"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Azure Machine Learning Studio にて正常にジョブが実行されたことを確認します。<br>\n",
|
||||
"<img src=\"docs/images/azureml-experiment1.png\" width=500><br>\n",
|
||||
"実行時間、メトリック、コードなどの情報が確認できます。<br>\n",
|
||||
"<img src=\"docs/images/azureml-experiment2.png\" width=1500><br>\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## モデル登録 (Models)\n",
|
||||
"ジョブ実行の run オブジェクトを利用して、モデル登録をします。<br>\n",
|
||||
"※ Azure Machine Learning Studio 経由で実行する場合と違って、クライアント端末への学習済みモデルのダウンロードは不要です。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085966624
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from azureml.core import Model\n",
|
||||
"\n",
|
||||
"model = run.register_model(\n",
|
||||
" model_name=\"ftalive-lgb-model\",\n",
|
||||
" model_framework=\"LightGBM\",\n",
|
||||
" model_framework_version=\"3.3.1\",\n",
|
||||
" tags={'algorithm': 'lightGBM'}, \n",
|
||||
" model_path = 'model')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Azure Machine Learning Studio にて正常に登録されていることを確認します。<br>\n",
|
||||
"<img src=\"docs/images/azureml-model2.png\" width=500><br>"
|
||||
]
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Compute Instances を利用する場合\n",
|
||||
"from azureml.core import Workspace\n",
|
||||
"ws = Workspace.from_config()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085804199
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "6d65a8c07f5b6469e0fc613f182488c0dccce05038bbda39e5ac9075c0454d11"
|
||||
},
|
||||
"kernel_info": {
|
||||
"name": "python3"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.5"
|
||||
},
|
||||
"microsoft": {
|
||||
"host": {
|
||||
"AzureML": {
|
||||
"notebookHasBeenCompleted": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"nteract": {
|
||||
"version": "nteract-front-end@1.0.0"
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# # その他の任意のクライアント環境を利用する場合\n",
|
||||
"# ws = Workspace.get(\n",
|
||||
"# name='name',\n",
|
||||
"# subscription_id='subscription_id',\n",
|
||||
"# resource_group='resource_group',\n",
|
||||
"# )"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## データストア (Datastores) の利用\n",
|
||||
"データソースへの接続情報を保持しているデータストア (Datastores) を利用して、CSV ファイルを Azure ストレージ (Azure ML のデフォルトストレージ) にアップロードします。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# データストア (Datastores) へのアップロード\n",
|
||||
"datastore = ws.get_default_datastore()\n",
|
||||
"datastore.upload_files(files=['../data/Titanic.csv'],\n",
|
||||
" target_path='demo',\n",
|
||||
" overwrite=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## データセット (Datasets) の登録\n",
|
||||
"データストア (Datstores) として定義されたAzure のストレージやデータベースに格納されているデータをデータセット (Datasets) として登録します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085810518
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from azureml.core import Dataset\n",
|
||||
"\n",
|
||||
"# データセット (Datasets) の登録\n",
|
||||
"datastore_paths = [(datastore, 'demo/Titanic.csv')]\n",
|
||||
"# 表形式を選択\n",
|
||||
"titanic_ds = Dataset.Tabular.from_delimited_files(path=datastore_paths)\n",
|
||||
"titanic_ds.register(ws, \"titanic\", create_new_version=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Azure Machine Learning Studio にて正常に登録されていることを確認します。<br>\n",
|
||||
"<img src=\"docs/images/azureml-dataset4.png\" width=900><br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 環境 (Environments) の登録\n",
|
||||
"モデル学習や推論で利用する Python ライブラリとそのバージョンを環境 (Environments) として登録します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"環境の名称は `lightgbm-python-env` とし、「Python 仮想環境」を選択し、Python ライブラリとそのバージョンが記載されている [environments/requirements.txt](environments/requirements.txt) のファイルを読み込み、環境を作成します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085810575
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from azureml.core import Environment\n",
|
||||
"environment_name = \"lightgbm-python-env\"\n",
|
||||
"pip_file_path = \"../environments/requirements.txt\"\n",
|
||||
"conda_file_path = \"../environments/conda-env.yml\"\n",
|
||||
"env = Environment.from_conda_specification(name = environment_name, file_path = conda_file_path)\n",
|
||||
"#env = Environment.from_pip_requirements(name = environment_name, file_path = pip_file_path)\n",
|
||||
"env.register(ws)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Azure Machine Learning Studio にて正常に登録されていることを確認します。<br>\n",
|
||||
"<img src=\"docs/images/azureml-environment2.png\" width=500><br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## コンピューティングクラスター (Compute Clusters) の作成\n",
|
||||
"(バッチ的な) モデル学習に利用する計算クラスターであるコンピューティングクラスター (Compute Clusters) を作成します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"名称は `cpu-clusters` とし、(例えば) Standard_F4s_v2 VM ファミリーを選択します。<br>\n",
|
||||
"最小ノード数は 0、最大ノード数は 4 などに設定し、コンピューティングクラスターを作成します。<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085810668
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"compute_name = \"cpu-clusters\""
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085811507
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from azureml.core.compute import ComputeTarget, AmlCompute\n",
|
||||
"\n",
|
||||
"# TODO: 仮想ネットワークの情報を記載\n",
|
||||
"# vnet_resourcegroup_name = \"\"\n",
|
||||
"# vnet_name = \"\"\n",
|
||||
"# subnet_name = \"default\"\n",
|
||||
"\n",
|
||||
"if compute_name not in ws.compute_targets: # compute_name の名前の Compute Cluster が無ければ...\n",
|
||||
" compute_config = AmlCompute.provisioning_configuration(vm_size = \"Standard_F4S_V2\", \n",
|
||||
" max_nodes=4, \n",
|
||||
" idle_seconds_before_scaledown = 300,\n",
|
||||
" #vnet_resourcegroup_name=vnet_resourcegroup_name,\n",
|
||||
" #vnet_name=vnet_name,\n",
|
||||
" #subnet_name=subnet_name\n",
|
||||
" )\n",
|
||||
"\n",
|
||||
" ct = ComputeTarget.create(ws, compute_name, compute_config)\n",
|
||||
" ct.wait_for_completion(show_output=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Azure Machine Learning Studio にて正常に登録されていることを確認します。<br>\n",
|
||||
"<img src=\"docs/images/azureml-computeclusters4.png\" width=500><br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## モデル学習の実行 (Runs s& Experiments)\n",
|
||||
"モデル学習を実行します。それぞれの実行 (Runs) は実験 (Experiments) に情報が集約されます。実験名は `ftalive-lgb-train` とします。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085811566
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from azureml.core import Experiment\n",
|
||||
"\n",
|
||||
"experiment_name = \"ftalive-lgb-train\"\n",
|
||||
"experiment = Experiment(ws, experiment_name)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ScriptRunConfig で実行の構成設定をします。\n",
|
||||
"- 参考ドキュメント : [トレーニングの実行を構成して送信する - スクリプト実行構成とは](https://docs.microsoft.com/ja-JP/azure/machine-learning/how-to-set-up-training-targets#whats-a-script-run-configuration)\n",
|
||||
"\n",
|
||||
"なお、学習コードは [src/train-lgb.py](src/train-lgb.py) から確認できます。学習データは Azure Machine Learning に登録されているものを呼びだしています。メトリックの記録は MLflow の Autolog 機能などを用いています。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085811603
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from azureml.core import ScriptRunConfig\n",
|
||||
"\n",
|
||||
"script_dir = \"script\"\n",
|
||||
"script_name = \"train-lgb.py\"\n",
|
||||
"args = [\"--input-data\", titanic_ds.as_named_input('titanic')]\n",
|
||||
"\n",
|
||||
"src = ScriptRunConfig(\n",
|
||||
" source_directory=script_dir,\n",
|
||||
" script=script_name,\n",
|
||||
" environment=env,\n",
|
||||
" arguments=args,\n",
|
||||
" compute_target=compute_name,\n",
|
||||
")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ジョブを実行します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085817723
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"run = experiment.submit(src)\n",
|
||||
"run"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"ジョブ実行が完了するまで待機します。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085966563
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"run.wait_for_completion(show_output=True)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085966613
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# run.download_files(output_directory=experiment_name+\"_logging\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085966620
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"run"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Azure Machine Learning Studio にて正常にジョブが実行されたことを確認します。<br>\n",
|
||||
"<img src=\"docs/images/azureml-experiment1.png\" width=500><br>\n",
|
||||
"実行時間、メトリック、コードなどの情報が確認できます。<br>\n",
|
||||
"<img src=\"docs/images/azureml-experiment2.png\" width=1500><br>\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"<br>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## モデル登録 (Models)\n",
|
||||
"ジョブ実行の run オブジェクトを利用して、モデル登録をします。<br>\n",
|
||||
"※ Azure Machine Learning Studio 経由で実行する場合と違って、クライアント端末への学習済みモデルのダウンロードは不要です。"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"gather": {
|
||||
"logged": 1649085966624
|
||||
}
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from azureml.core import Model\n",
|
||||
"\n",
|
||||
"model = run.register_model(\n",
|
||||
" model_name=\"ftalive-lgb-model\",\n",
|
||||
" model_framework=\"LightGBM\",\n",
|
||||
" model_framework_version=\"3.3.1\",\n",
|
||||
" tags={'algorithm': 'lightGBM'}, \n",
|
||||
" model_path = 'model')"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Azure Machine Learning Studio にて正常に登録されていることを確認します。<br>\n",
|
||||
"<img src=\"docs/images/azureml-model2.png\" width=500><br>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"interpreter": {
|
||||
"hash": "6d65a8c07f5b6469e0fc613f182488c0dccce05038bbda39e5ac9075c0454d11"
|
||||
},
|
||||
"kernel_info": {
|
||||
"name": "python38-azureml"
|
||||
},
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.8.5"
|
||||
},
|
||||
"microsoft": {
|
||||
"host": {
|
||||
"AzureML": {
|
||||
"notebookHasBeenCompleted": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"nteract": {
|
||||
"version": "nteract-front-end@1.0.0"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 1
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче