Browse Source

Merge pull request #3 from ivis-mizuguchi/feature/make-pipeline-procedure

パイプライン関連のセクション作成とbase_FLOW修正
ivis-kuwata 2 years ago
parent
commit
b87c6e77f7

+ 4 - 4
WORKFLOW/FLOWS/base_FLOW.ipynb

@@ -6,7 +6,7 @@
    "source": [
     "# FLOW\n",
     "\n",
-    "研究の準備、実施、公開までの研究者のワークフロー実施を支援するもの\n",
+    "研究の準備、実施、公開までの研究者のワークフロー実施を支援する  \n",
     "初期フェーズから中期フェーズ、後期フェーズの順に進み、各フェーズで必要なセクションを研究者自身が実行する想定"
    ]
   },
@@ -53,9 +53,9 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "|||||\n",
-    "|:---:|:---:|:---:|:---:|\n",
-    "|[実験を実行する](../SECTIONS/02_experimental_phase/launch_an_experiment.ipynb)|[研究リポジトリをモニタリングする](../SECTIONS/02_experimental_phase/monitor_repository.ipynb)|[パイプラインを構築する](../SECTIONS/02_experimental_phase/support_making_pipeline.ipynb)|[研究データを追加する](../SECTIONS/02_experimental_phase/add_research_data.ipynb)|"
+    "||||||\n",
+    "|:---:|:---:|:---:|:---:|:---:|\n",
+    "|[実験を実行する](../SECTIONS/02_experimental_phase/launch_an_experiment.ipynb)|[研究リポジトリをモニタリングする](../SECTIONS/02_experimental_phase/monitor_repository.ipynb)|[実験に依存関係を定義する](../SECTIONS/02_experimental_phase/define_experimental_dependencies.ipynb)|[パイプラインを構築する](../SECTIONS/02_experimental_phase/support_making_pipeline.ipynb)|[研究データを追加する](../SECTIONS/02_experimental_phase/add_research_data.ipynb)|"
    ]
   },
   {

+ 55 - 0
WORKFLOW/SECTIONS/02_experimental_phase/define_experimental_dependencies.ipynb

@@ -0,0 +1,55 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# 実験に依存関係を定義する\n",
+    "\n",
+    "これは、実験コードに他の実験との依存関係を定義して実験パイプラインを構築する準備を行うためのノートブックです。"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 1. 依存関係を定義したい実験を選択する"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 2. ステップ1.で選択した実験の依存関係を定義する"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 3. 変更内容を書き戻す"
+   ]
+  }
+ ],
+ "metadata": {
+  "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.7.8"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}

+ 73 - 4
WORKFLOW/SECTIONS/02_experimental_phase/support_making_pipeline.ipynb

@@ -4,17 +4,86 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "# 実験パイプラインの構築支援(検討中)\n",
+    "# パイプラインを構築する\n",
     "\n",
-    "これはDMP情報に基づき、実験の依存関係を表すパイプライン構築を支援するためのノートブックです。  \n",
-    "システムによってパラメタライズされるため、手動での実行は非推奨です。"
+    "これは、実験パイプライン構築を支援するためのノートブックです。  \n",
+    "パイプラインを構築することで、定められた順に実験を実行して実験を再現することが出来ます。"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "TBD"
+    "## ◆◆◆開発メモ◆◆◆\n",
+    "- 実験パイプラインの構築支援は、02_experimental_phaseとパッケージ内のコードipynbで行う\n",
+    "    - 02_experimental_phaseではパイプラインの構築(pipeline.yaml作成)の支援と、パッケージのコードに依存関係を記述する支援の2つのセクションを用意する。\n",
+    "    - また、パッケージ内のコードipynbでは、最上部に依存関係を記述するセクションを用意する。(Jupyterlab_templatesが使えれば、最上部にparametersタグをつきの依存関係記述用セルを設置したコード用jupyterlab_templatesを用意する)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 1. 前準備\n",
+    "\n",
+    "パイプラインを構築するには、実行順を指定したい実験の全てのコードで依存関係を定義する必要があります。\n",
+    "コードに依存関係を定義していない場合は、02_experimental_phaseの[依存関係を定義する]()セクションで依存関係を定義してください。"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 2. パイプライン設定ファイルを生成する\n",
+    "\n",
+    "このステップでは、パイプライン全体の実行に必要な設定ファイルをシステムが作成します。以下のセルを実行してください。"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from ruamel.yaml import YAML\n",
+    "import os\n",
+    "import glob\n",
+    "\n",
+    "files = glob.glob(os.getcwd()+'/*')\n",
+    "code_dict = {}\n",
+    "\n",
+    "# YAMLのベースとなる辞書\n",
+    "yml = {'tasks': []}\n",
+    "\n",
+    "for file in files:\n",
+    "    # ソースリストに載っている拡張子なら辞書作成する処理に修正したい\n",
+    "    if os.path.splitext(file)[1] == '.ipynb':\n",
+    "        code_dict['source']  = os.path.basename(file)\n",
+    "        code_dict['product'] = 'output/log_' + os.path.basename(file)\n",
+    "        yml['tasks'].append(code_dict)\n",
+    "        code_dict = {}\n",
+    "\n",
+    "with open('pipeline.yaml', 'w') as file:\n",
+    "    yaml = YAML()\n",
+    "    yaml.default_flow_style = False\n",
+    "    yaml.dump(yml, file)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## 3. 変更内容を書き戻す"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%%sh\n",
+    "papermill ../util/datalad_save_push.ipynb - -f ../../params.yaml -p SAVE_MESSAGE = 'パイプライン構築'"
    ]
   }
  ],