在哪裡儲存和寫入 Azure Machine Learning 實驗的檔案

適用於:Python SDK azureml v1

在本文中,您將了解在哪裡儲存輸入檔案,以及寫入實驗的輸出檔案,才能防止儲存體限制錯誤和實驗延遲。

計算目標上啟動定型作業時,會與外部環境隔離。 此設計旨在確保實驗的重現性和可攜性。 如果相同的指令碼在相同或另一個計算目標上執行兩次,您會得到相同的結果。 在此設計中,您可以將計算目標視為無狀態的計算資源,與各自完成之後執行的作業沒有任何親和性。

在哪裡儲存輸入檔案

您必須先確保計算目標有必要的檔案可用,例如程式碼執行時所需的相依性檔案和資料檔案,才能在計算目標或本機電腦上起始實驗。

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 筆記本 建立 .amlignore 檔案,或 Notebook 移至新的空白子目錄,然後重新執行程式碼。

在哪裡寫入檔案

由於訓練實驗的隔離,執行期間所發生的檔案變更,不一定會保存於環境之外。 若指令碼修改計算本機的檔案,變更不會保存至下一次的實驗作業,而且也不會自動傳播回用戶端電腦。 因此,第一次實驗作業期間所做的變更,並不會也不應該影響第二次實驗作業的變更。

寫入變更時,建議使用 OutputFileDatasetConfig 物件,透過 Azure Machine Learning 資料集將檔案寫入儲存體。 請參閱如何建立 OutputFileDatasetConfig

否則,請將檔案寫入 ./outputs 和 (或) ./logs 資料夾。

重要

Azure Machine Learning 會特別處理 outputs 和 logs 這兩個資料夾。 在定型期間,當您將檔案寫入 ./outputs./logs 資料夾時,檔案會自動上傳至作業記錄,以供您在作業完成後存取。

  • 針對狀態訊息或評分結果相關的輸出,請將檔案寫入 ./outputs 資料夾,以保存為作業記錄中的組建成品。 請注意寫入此資料夾的檔案數目和大小,因為將內容上傳至作業記錄時,可能會發生延遲。 如果擔心延遲,建議將檔案寫入資料存放區。

  • 若要將寫入的檔案儲存於作業記錄中的記錄,請將檔案寫入 ./logs 資料夾。 記錄會即時上傳,所以此方法適用於從遠端作業來串流即時更新。

下一步