リポジトリとトランクベースの開発

完了

多くのデータ サイエンティストは、機械学習ワークロードを定義するために Python または R を使用することを好みます。 Jupyter ノートブックまたはスクリプトを使用して、データを準備したり、モデルをトレーニングしたりできます。

ソース管理を使用すると、コード資産に関する作業が簡単になります。 ソース管理とは、"コードを管理し、チームがコードに対して行うすべての変更を追跡する" ことです。

Azure DevOpsGitHub などの DevOps ツールを使用する場合、コードはいわゆるリポジトリ (リポ) に格納されます。

リポジトリ

MLOps フレームワークをセットアップする際、多くの場合、機械学習エンジニアがリポジトリを作成します。 Azure DevOps の Azure Repos を使用するか、GitHub リポジトリを使用するか、どちらを選択しても、Git リポジトリを使用してコードを格納します。

通常、リポジトリのスコープを設定する方法は 2 つあります。

  • モノリポ: すべての機械学習のワークロードを同じリポジトリ内で保持します。
  • マルチリポ: 新しい機械学習プロジェクトごとに別個のリポジトリを作成します。

どちらのアプローチをチームが選択したら良いかは、誰がどの資産にアクセスするかによって異なります。 すべてのコード資産への迅速なアクセスを確保する必要がある場合は、モノリポがチームの要件に適しているかもしれません。 プロジェクトに積極的に取り組んでいるユーザーのみに、そのプロジェクトへのアクセス権を付与する必要がある場合、チームがマルチリポで作業する方が適しているかもしれません。 アクセス制御を管理すると、オーバーヘッドが増える可能性があることに注意してください。

リポジトリを構造化する

どのアプローチを取るとしても、プロジェクトの最上位フォルダーの構造について標準を定めておくことをお勧めします。 たとえば、すべてのリポジトリに次のようなフォルダーを作成できます。

  • .cloud: Azure Machine Learning ワークスペースを作成するためのテンプレートなどのクラウド固有のコードを格納します。
  • .ad/.github: ワークフローを自動化するための YAML パイプラインなどの Azure DevOps または GitHub アーティファクトを格納します。
  • src: データの前処理やモデル トレーニングなどの機械学習ワークロードに使用するコード (Python または R スクリプト) を格納します。
  • docs: プロジェクトを記述するために使用するマークダウン ファイルまたはその他のドキュメントを格納します。
  • pipelines: Azure Machine Learning パイプライン定義を格納します。
  • tests: コード内のバグや問題を検出するために使用する単体テストと統合テストを格納します。
  • notebooks: 主に実験に使用する Jupyter ノートブックを格納します。

注意

トレーニング データはリポジトリに含めないようにします。 このデータは、データベースまたはデータ レイクに格納します。 接続情報をデータストアとして格納することで、Azure Machine Learning はデータベースまたはデータ レイクに直接アクセスできます。

各プロジェクトで使用される標準的な構造を持つことで、データ サイエンティストや他のコラボレーターは、作業する必要があるコードを簡単に見つけることができます。

ヒント

データ サイエンス プロジェクトを構築するためのその他のベスト プラクティスについては、こちらを参照してください。

データ サイエンティストとしてリポジトリを操作する方法として、これからトランクベースの開発について学習します。

トランクベースの開発

ほとんどのソフトウェア開発プロジェクトでは、ソース管理システムとして Git を使用します。これは、Azure DevOps と GitHub の両方で使用されます。

Git を使用する主な利点は、加えられた変更を追跡しながら、コードでのコラボレーションを簡単に行えることです。 さらに、承認ゲートを追加することで、レビューされ、承認された変更のみが、運用コードに対して反映されるようにすることができます。

これを実現するために、Git では、ブランチを作成できるトランクベースの開発を利用します。

運用コードは、メイン ブランチにホストされます。 誰かが変更を加えたい場合は常に、次の手順を実行します。

  1. ブランチを作成して、運用コードの完全なコピーを作成します。
  2. 作成したブランチで、変更を加えてテストします。
  3. ブランチの変更の準備ができたら、他のメンバーに変更の確認を依頼できます。
  4. 変更が承認された場合は、作成したブランチをメイン リポジトリに "マージ" すると、変更を反映するように運用コードが更新されます。

トランクベースの開発ワークフローの図。