注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

環境作成の概要

これは、環境初期化プロセスに関する詳細を説明する高度なガイドです。技術的な考慮事項によって初期化パフォーマンスに影響があるユーザーを対象としています。一般的な環境関連の問題に関するガイダンスについては、環境トラブルシューティングガイドを参照してください。

Conda は、オープンソースの言語非依存のパッケージおよび環境マネージャです。Mamba は、Conda パッケージマネージャのオープンソース再実装です。コードリポジトリは、コミット後のチェックを実行する際に、パッケージ依存関係を解決するために Mamba を使用するようになりました。Mamba は、パッケージ解決に関して Conda よりも速度の向上やエラーメッセージの可読性の向上といったいくつかの利点を提供します。

このページでは、最も重要な概念を紹介し、環境作成プロセスを概説します。詳細については、公式 Conda ドキュメントMamba ドキュメントを参照してください。

重要な用語

パッケージ

パッケージは、メタデータ、ライブラリ、および/またはバイナリを含むファイルのコレクションです。Code Repository は、コア言語機能を補完するために、多くのパッケージ(例えばnumpy)へのアクセスを提供します。

パッケージはバージョン管理されており、ほとんどの場合、依存関係があります。これは、正常に機能するためにもインストールされていなければならない他のパッケージです。依存関係は、パッケージの特定のバージョン、許容されるバージョンの範囲、またはすべてのバージョンが対象となることがあります。

チャネル

チャネルは、パッケージが格納されている場所です。リポジトリとも呼ばれることがあります。1つのチャネルは、ローカルファイルシステム内のディレクトリであったり、ウェブサーバー上にホストされているディレクトリであったりします。

どちらのタイプであっても、各チャネルは、パッケージをプラットフォームアーキテクチャ別に分けるディレクトリツリーです。各プラットフォームのサブディレクトリには、そのサブディレクトリ内のすべてのパッケージをインデックスしたrepodata.jsonというファイルが含まれています。

Conda は、パッケージを取得する必要がある場合に、事前に設定された一連のチャネルを検索します。Foundry のチャネル管理に関する詳細は、パッケージドキュメントを参照してください。

環境

Conda 環境は、特定のパッケージのコレクションが含まれるディレクトリです。環境は、環境設定パネルで指定されたパッケージを Conda に渡すことで、リポジトリごとに作成されます。Conda は、設定とすべての依存関係を満たすパッケージのセットを構築し、リポジトリをバックアップする Spark モジュールにこれらのパッケージをインストールします。

パフォーマンス

以下のパフォーマンスに関する説明は、この Anaconda ブログ投稿に基づいており、Conda のパフォーマンスについて詳しく説明していますが、Mamba の実装にも同様に適用されます。次の2つのセクションでは、この資料を要約し、Code Repositories に最も関連するパフォーマンス要因を概説しています。

環境の作成

環境作成には、解決ステップインストールステップの2つの主要なステップが含まれます。

解決ステップ

解決ステップでは、指定されたパッケージマネージャー(Conda または Mamba)が、すべての一時的な依存関係を満たすパッケージとバージョンを見つけようと試みます。一時的な依存関係とは、環境設定パネルで指定されたパッケージの依存関係、それらの依存関係の依存関係などです。このステップには4つの段階があります。

  1. パッケージインデックスのダウンロードと処理。Conda は、設定された各チャネルからrepodata.jsonファイルをダウンロードし、インデックスエントリをメモリ内のオブジェクトに変換します。
  2. インデックスの削減。Conda は、環境に使用可能なすべてのパッケージのセットを構築します。このために、アルゴリズムは提供されたパッケージ仕様から始め、すべての依存関係を再帰的に処理します。依存関係グラフにない主に不要なパッケージが削除されます。
  3. 依存関係制約をブール値の充足可能性(SAT)問題として表現します。Conda は、特定のタイプの解決策を好む(例:パッケージの最新バージョンを使用する)ため、これらのバイアスが節構築に組み込まれます。
  4. SAT ソルバーを実行します。

インストールステップ

解決が成功した場合、次にインストールステップが実行されます。ここでは、適切なチャネルから各作成物が取得され、Conda はそれらを使用して環境を構築します。このステップには3つの段階があります。

  1. 解決された環境内のすべてのパッケージをダウンロードし、抽出します。
  2. パッケージの内容を確認します。設定に応じて、Conda はチェックサムを使用するか、ファイルサイズが正しいことを確認します。
  3. パッケージを環境にリンクします。

制限事項

上記のすべてのステップは、特定の状況で遅くなることがあります。遅さの原因は、通常、以下の3つのカテゴリのいずれかに該当します。

上流の変更

遅さの大部分は、Foundry 外部の要因によって引き起こされます。

  • チャネルインデックスのダウンロードおよび処理は、インデックスファイルの合計サイズに比例します。考慮が必要なチャネルが多く、それらのチャネルが大きいほど、これらのステップにかかる時間が長くなります。
  • インデックス削減も、トランジティブ依存関係の数に比例します。トランジティブ依存関係の数は、パッケージがどの依存関係を宣言するかによって決まります。

これらの要因は外部で不透明であるため、パフォーマンス低下の原因を特定するのが難しいことがあります。チャネルのサイズが最近増えたため、またはパッケージが最新リリースで新しい依存関係をいくつか宣言したため、環境が突然ロードに時間がかかるようになることがあります。

環境仕様

より一般的には、遅い初期化は、環境仕様自体に直接関連しています。解決ステップは、環境サイズと超線形にスケーリングするため、一般的な経験則として、パッケージが多い環境ほど、初期化にかかる時間が比例して長くなります。

このような状況を改善する方法は2つあります。

  • まず、環境定義から不要なパッケージを削除します。小さく、特化した環境を持つ方が、大きく、汎用的な環境を持つよりも、パフォーマンスが向上します。
  • 次に、環境設定パネルのいくつかのパッケージにバージョン制約を追加してみてください。pythonのような多くのビルドが存在するパッケージや、scipyのような複雑な依存関係グラフを持つパッケージのバージョンを固定するのが最も効果的です。これにより、Conda はインデックスをより積極的に削減できるため、SAT 解決が多くのパッケージバージョンを考慮する必要がありません。

パッケージサイズ

パッケージサイズは、このセクションの他の要因に比べて通常は問題とはなりませんが、一部のケースでは関連があります。

たとえば、pytorchパッケージは約460 MBのサイズであり、抽出に35秒以上かかることがあります。

ダウンロード、抽出、および検証は、環境内のパッケージのサイズと数に比例します。トランジティブ依存関係により、解決された環境には、環境定義で明示的に指定されたパッケージよりも多くのパッケージが含まれることが一般的であり、パッケージの増加が遅さを引き起こすことがあります。

この場合の対処方法は、環境仕様の提案と同様です。環境をできるだけ小さく保つようにしてください。