Azure Machine Learning の実験でファイルを保存する場所と書き込む場所
適用対象: Python SDK azureml v1
この記事では、ストレージ制限エラーを回避し、待機時間を実験するために、実験で入力ファイルをどこに保存し、出力ファイルをどこに書き込むかについて説明します。
コンピューティング先でトレーニング ジョブを実行すると、それらが外部環境から分離されます。 この設計の目的は、実行の再現性と移植性を確保することです。 同一または別のコンピューティング ターゲットで、同じスクリプトを 2 回実行すると、同じ結果が得られます。 この設計により、コンピューティング先を、それぞれ完了後に実行されているジョブとのアフィニティがないステートレスな評価リソースとして扱うことができます。
入力ファイルを保存する場所
コンピューティング先またはローカル コンピューターで実験を開始する前に、必要なファイルがそのコンピューティング先で使用可能なことを確認する必要があります。 たとえば、コードで実行する必要がある依存関係ファイルとデータ ファイルなどです。
Azure Machine Learning では、ソース ディレクトリ全体をコピーすることで、トレーニング スクリプトが実行されます。 アップロードしたくない機密データがある場合は、.ignore ファイルを使用するか、ソース ディレクトリに含めないようにします。 代わりに、データストアを使用してデータにアクセスしてください。
実験スナップショットのストレージ制限は、300 MB または 2,000 ファイル (あるいはその両方) です。
このため、次のことをお勧めします。
Azure Machine Learning のデータセットにファイルを格納します。 データセットを使用すると、実験の待ち時間の問題を防止して、リモート コンピューティング先からデータにアクセスできるという利点があります。 Azure Machine Learning では、データセットの認証とマウントを処理します。 データセットを入力データ ソースとしてトレーニング スクリプトに指定する方法については、データセットを使用したトレーニングに関する記事を参照してください。
数個のデータ ファイルと依存関係スクリプトのみが必要であり、データストアを使用できない場合は、 トレーニング スクリプトと同じフォルダー ディレクトリにファイルを配置します。 このフォルダーを
source_directory
ディレクトリとして、トレーニング スクリプトで直接指定するか、またはトレーニング スクリプトを呼び出すコードで指定します。
実験スナップショットのストレージ制限
実験では、Azure Machine Learning により、ジョブを構成するときに提案したディレクトリに基づいてコードの実験スナップショットが自動的に作成されます。 パイプラインの場合、ディレクトリはステップごとに構成されます。
これには、合計 300 MB または 2,000 ファイル (あるいはその両方) の制限があります。 この制限を超えると、次のエラーが表示されます。
While attempting to take snapshot of .
Your total snapshot size exceeds the limit of 300.0 MB
このエラーを解決するには、実験ファイルをデータストアに格納します。 データストアを使用できない場合は、以下の表に可能な代替解決策を示します。
実験の説明 | ストレージ制限の解決策 |
---|---|
ファイル数は 2,000 未満で、データストアを使用できない | 次を使用してスナップショットのサイズ制限を上書きします。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
フォルダーにファイルを書き込みます。
重要
outputs と logs の 2 つのフォルダーは、Azure Machine Learning によって特別に扱われます。 トレーニング中に ./outputs
フォルダーと ./logs
フォルダーにファイルを書き込んだ場合は、それらのファイルがジョブ履歴に自動的にアップロードされるので、ジョブが完了するとそれらのファイルにアクセスできるようになります。
状態メッセージやスコアリングの結果などの出力の場合は、ファイルを
./outputs
フォルダーに書き込むことで、それらがジョブ履歴に成果物として保持されます。 このフォルダーに書き込むファイルの数とサイズに注意してください。内容がジョブ履歴にアップロードされるときに待ち時間が発生する可能性があります。 待機時間が心配な場合は、データストアにファイルを書き込むことをお勧めします。書き込まれたファイルをジョブ履歴にログとして保存するには、ファイルを
./logs
フォルダーに書き込みます。 この方法は、ログがリアルタイムでアップロードされるため、リモート ジョブからのライブ更新ストリーミングに適しています。
次のステップ
ストレージからデータへのアクセス方法について説明します。
詳細については、モデルのトレーニングとデプロイのためのコンピューティング先の作成に関するページを参照してください。