Azure Machine Learning の実験でファイルを保存する場所と書き込む場所

適用対象:Python SDK azureml v1

この記事では、ストレージ制限エラーを回避し、待機時間を実験するために、実験で入力ファイルをどこに保存し、出力ファイルをどこに書き込むかについて説明します。

コンピューティング ターゲットでトレーニング ジョブを起動すると、それらが外部環境から分離されます。 この設計の目的は、実行の再現性と移植性を確保することです。 同一または別のコンピューティング ターゲットで、同じスクリプトを 2 回実行すると、同じ結果が得られます。 この設計により、コンピューティング ターゲットを、完了後に実行されるジョブとのアフィニティがないステートレスな計算リソースとして扱うことができます。

入力ファイルを保存する場所

コンピューティング ターゲットまたはローカル マシンで実験を開始する前に、コードの実行に必要な依存関係ファイルやデータ ファイルなどの必要なファイルが、そのコンピューティング ターゲットに存在することを確認する必要があります。

Azure Machine Learning では、ソース ディレクトリ全体をコピーすることで、トレーニング スクリプトが実行されます。 アップロードしたくない機密データがある場合は、.ignore ファイルを使用するか、ソース ディレクトリに含めないようにします。 代わりに、データストアを使用してデータにアクセスしてください。

実験スナップショットのストレージ制限は、300 MB または 2000 ファイル (あるいはその両方) です。

このため、次のことをお勧めします。

  • Azure Machine Learning のデータセットにファイルを格納します。 これにより、実験の待機時間の問題を防止でき、リモート コンピューティング ターゲットからデータにアクセスする利点が得られます。つまり、認証とマウントは Azure Machine Learning によって管理されます。 データセットを入力データ ソースとしてトレーニング スクリプトに指定する方法については、データセットを使用したトレーニングに関する記事を参照してください。

  • 数個のデータ ファイルと依存関係スクリプトのみが必要であり、データストアを使用できない場合は、 トレーニング スクリプトと同じフォルダー ディレクトリにファイルを配置します。 このフォルダーを source_directory ディレクトリとして、トレーニング スクリプトで直接指定するか、またはトレーニング スクリプトを呼び出すコードで指定します。

実験スナップショットのストレージ制限

実験では、Azure Machine Learning により、ジョブを構成するときに提案したディレクトリに基づいてコードの実験スナップショットが自動的に作成されます。 パイプラインの場合、ディレクトリはステップごとに構成されます。

これには、合計 300 MB または 2000 ファイルの制限があります。 この制限を超えると、次のエラーが表示されます。

While attempting to take snapshot of .
Your total snapshot size exceeds the limit of 300.0 MB

このエラーを解決するには、実験ファイルをデータストアに格納します。 データストアを使用できない場合は、以下の表に可能な代替解決策を示します。

実験の説明 ストレージ制限の解決策
ファイル数は 2000 未満で、データストアを使用できない場合 次を使用してスナップショットのサイズ制限を上書きします。
azureml._restclient.snapshots_client.SNAPSHOT_MAX_SIZE_BYTES = 'insert_desired_size' および azureml._restclient.constants.SNAPSHOT_MAX_SIZE_BYTES = 'insert_desired_size'
ファイルの数とサイズによっては、これには数分間かかる場合があります。
特定のスクリプト ディレクトリを使用する必要がある場合 不要なファイルがスナップショットに含まれないようにするには、無視ファイル (.gitignore または .amlignore) を作成します。 除外するファイルとディレクトリをこのファイルに追加します。 このファイル内で使用する構文の詳細については、.gitignore構文とパターンを参照してください。 .amlignore ファイルでは同じ構文を使用します。 "両方のファイルが存在する場合は、.amlignore ファイルが使用され、.gitignore ファイルは使用されません。 "
パイプライン ステップごとに異なるサブディレクトリを使用します。
Jupyter Notebook .amlignore ファイルを作成するか、ノートブックを新しい空のサブディレクトリに移動して、コードをもう一度実行します。

ファイルを書き込む場所

トレーニング実験は分離されているため、ジョブで行われたファイルへの変更が必ずしも環境の外部で保持されるとは限りません。 スクリプトでローカルのコンピューティング用のファイルが変更された場合、その変更は次回の実験ジョブでは保持されず、クライアント コンピューターに自動的に反映されることもありません。 したがって、1 回目の実験ジョブで行われた変更が 2 回目に影響を与えることはなく、また与えるべきではありません。

変更を書き込むときは、OutputFileDatasetConfig オブジェクトを使用して、Azure Machine Learning データセットを介してストレージにファイルを書き込むことをお勧めします。 OutputFileDatasetConfig の作成方法に関する記事を参照してください。

それ以外の場合は、./outputs./logs フォルダーにファイルを書き込みます。

重要

outputslogs の 2 つのフォルダーは、Azure Machine Learning によって特別に扱われます。 トレーニング中に ./outputs フォルダーと ./logs フォルダーにファイルを書き込んだ場合は、それらのファイルがジョブ履歴に自動的にアップロードされるので、ジョブが完了するとそれらのファイルにアクセスできるようになります。

  • 状態メッセージやスコアリングの結果などの出力の場合は、ファイルを ./outputs フォルダーに書き込むことで、それらがジョブ履歴に成果物として保持されます。 このフォルダーに書き込むファイルの数とサイズに注意してください。内容がジョブ履歴にアップロードされるときに待機時間が発生する可能性があります。 待機時間が心配な場合は、データストアにファイルを書き込むことをお勧めします。

  • 書き込まれたファイルをジョブ履歴にログとして保存するには、ファイルを ./logs フォルダーに書き込みます。 この方法は、ログがリアルタイムでアップロードされるため、リモート ジョブからのライブ更新ストリーミングに適しています。

次のステップ