注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
このガイドは、環境の初期化プロセスを詳しく説明する高度なガイドです。初期化のパフォーマンスに影響する技術的な考慮事項に関心のあるユーザーを対象としています。環境に関連する一般的な問題への対処については、環境のトラブルシューティングガイドを参照してください。
Conda は、言語に依存しないオープンソースのパッケージおよび環境マネージャーです。Mamba は、Conda パッケージマネージャーを再実装したオープンソースのソフトウェアです。Hawk は、Palantir が開発した Conda パッケージマネージャーの再実装です。Code Repositories は、コミット後にチェックを実行する際、Hawk を使用してパッケージの依存関係を解決します。Hawk は、Mamba や Conda と比べてパッケージの依存関係の解決にいくつかの利点があり、特に処理速度の向上と、活発な保守および開発が挙げられます。
このページでは、最も重要な概念と環境作成プロセスの概要を説明します。詳細については、Conda の公式ドキュメント ↗および Mamba のドキュメント ↗を参照してください。
パッケージはファイルの集まりで、通常はメタデータ、ライブラリ、バイナリのいずれか、またはそれらの組み合わせを含みます。Code Repository では、言語の基本機能を補うために、幅広いパッケージ(たとえば numpy)を利用できます。
パッケージにはバージョンが付けられており、ほぼ必ず依存関係があります。依存関係とは、そのパッケージが正常に機能するために併せてインストールする必要がある、ほかのパッケージです。依存関係として、パッケージの特定のバージョン、許容されるバージョンの範囲、または任意のバージョンが指定されることがあります。
チャネルは、リポジトリと呼ばれることもあり、パッケージが保存されている場所を指します。あるチャネルはローカルファイルシステム内のディレクトリで、別のチャネルは Web サーバー上でホストされているディレクトリである場合があります。
種類にかかわらず、チャネルはそれぞれ、プラットフォームのアーキテクチャごとにパッケージを分けたディレクトリツリーです。プラットフォームごとのサブディレクトリには、それぞれ repodata.json というファイルがあり、そのサブディレクトリ内のすべてのパッケージのインデックスが格納されています。
Conda は、パッケージを取得する必要があるたびに、事前設定されたチャネルを検索します。Foundry でのチャネル管理の詳細については、パッケージのドキュメントを参照してください。
Conda の環境は、特定のパッケージ群を含むディレクトリです。環境設定パネルで指定されたパッケージを Conda に渡すことで、リポジトリごとに環境が作成されます。Conda は、設定とすべての依存関係を満たすパッケージ群を構成し、リポジトリの基盤となる Spark モジュールにこれらのパッケージをインストールします。
以下のパフォーマンスに関する説明は、Conda のパフォーマンスを詳しく解説したこちらの Anaconda ブログ記事 ↗に基づいていますが、Mamba または Hawk の実装にも同様に当てはまります。次の2つのセクションでは、この記事の内容を要約し、Code Repositories に最も関連するパフォーマンス要因の概要を説明します。
環境の作成は、依存関係の解決ステップとインストールステップという2つの主要なステップで構成されます。
依存関係の解決ステップでは、指定されたパッケージマネージャー(Conda、Mamba、Hawk のいずれか)が、すべての間接的な依存関係を満たすパッケージとバージョンを探します。間接的な依存関係には、環境設定パネルで指定されたパッケージの依存関係、それらの依存関係のさらに依存関係、といったものが含まれます。このステップには4つの段階があります。
repodata.json ファイルをダウンロードし、インデックスのエントリをメモリー内のオブジェクトに変換します。依存関係の解決に成功すると、次にインストールステップに進みます。このステップでは、適切なチャネルから各アーティファクトを取得し、パッケージマネージャーがこれらのアーティファクトを使用して環境を構成します。このステップには3つの段階があります。
上記のすべてのステップは、特定の状況で処理が遅くなる可能性があります。通常、処理が遅くなる原因は次の3つのカテゴリーのいずれかに分類されます。
処理が遅くなる原因のかなりの部分は、Foundry の外部要因にあります。
これらの要因は外部にあり、その詳細も把握できないため、パフォーマンス低下の根本原因を分析するのは難しい場合があります。チャネルのサイズが最近大きくなったり、パッケージが最新リリースでいくつかの新しい依存関係を宣言したりしたことで、環境の読み込みに突然時間がかかるようになることがあります。
より一般的には、初期化の遅さは環境仕様そのものに直接関連しています。依存関係の解決ステップにかかる時間は、環境のサイズに対して線形を超える割合で増加するため、一般的な目安として、パッケージが多い環境ほど、初期化にかかる時間は不釣り合いに長くなります。
こうした状況を改善するには、2つの方法があります。
python のように多数のビルドが存在するパッケージや、scipy のように複雑な依存関係グラフを持つパッケージのバージョンを固定すると、最も効果的です。これにより、Conda はインデックスをより大幅に絞り込めるようになるため、SAT ソルバーが考慮する必要のあるパッケージバージョンの数が減ります。パッケージサイズは、通常、このセクションのほかの要因ほど問題にはなりませんが、それでも影響する場合があります。
1個のパッケージであっても、ダウンロードと抽出に無視できない時間がかかる場合があります。たとえば、pytorch パッケージのサイズは約 460 MB で、抽出に35秒以上かかることがあります。
ダウンロード、抽出、検証にかかる時間はいずれも、環境内のパッケージのサイズと数に線形に比例します。推移的依存関係により、依存関係の解決後の環境には通常、環境定義で明示的に指定されたものよりもはるかに多くのパッケージが含まれ、このパッケージ数の増加が処理の遅さにつながる場合があります。
この場合の改善方法は、環境仕様での推奨事項と同様です。環境をできるだけ小さく保つようにしてください。