注: 以下の翻訳の正確性は検証されていません。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つの段階があります。
repodata.json
ファイルをダウンロードし、インデックスエントリをメモリ内のオブジェクトに変換します。解決が成功した場合、次にインストールステップが実行されます。ここでは、適切なチャネルから各作成物が取得され、Conda はそれらを使用して環境を構築します。このステップには3つの段階があります。
上記のすべてのステップは、特定の状況で遅くなることがあります。遅さの原因は、通常、以下の3つのカテゴリのいずれかに該当します。
遅さの大部分は、Foundry 外部の要因によって引き起こされます。
これらの要因は外部で不透明であるため、パフォーマンス低下の原因を特定するのが難しいことがあります。チャネルのサイズが最近増えたため、またはパッケージが最新リリースで新しい依存関係をいくつか宣言したため、環境が突然ロードに時間がかかるようになることがあります。
より一般的には、遅い初期化は、環境仕様自体に直接関連しています。解決ステップは、環境サイズと超線形にスケーリングするため、一般的な経験則として、パッケージが多い環境ほど、初期化にかかる時間が比例して長くなります。
このような状況を改善する方法は2つあります。
python
のような多くのビルドが存在するパッケージや、scipy
のような複雑な依存関係グラフを持つパッケージのバージョンを固定するのが最も効果的です。これにより、Conda はインデックスをより積極的に削減できるため、SAT 解決が多くのパッケージバージョンを考慮する必要がありません。パッケージサイズは、このセクションの他の要因に比べて通常は問題とはなりませんが、一部のケースでは関連があります。
たとえば、pytorch
パッケージは約460 MBのサイズであり、抽出に35秒以上かかることがあります。
ダウンロード、抽出、および検証は、環境内のパッケージのサイズと数に比例します。トランジティブ依存関係により、解決された環境には、環境定義で明示的に指定されたパッケージよりも多くのパッケージが含まれることが一般的であり、パッケージの増加が遅さを引き起こすことがあります。
この場合の対処方法は、環境仕様の提案と同様です。環境をできるだけ小さく保つようにしてください。