使用資料存放區連線至 Azure 上的儲存體服務

適用於:Python SDK azureml v1

適用於:Azure CLI ml 延伸模組 v1

在本文中,您將瞭解如何使用 Azure Machine Learning 資料存放區和 Azure Machine Learning Python SDK,連線至 Azure 上的儲存體服務。

資料存放區會安全地連線至您在 Azure 上的儲存體服務,並避免您的驗證認證或原始存放區完整性發生風險。 資料存放區會在與工作區相關聯的金鑰保存庫中儲存連線資訊,例如您的訂用帳戶識別碼和權杖授權。 透過資料存放區,您可以安全地存取儲存體,因為您可以避免指令碼中的硬式編碼連線資訊。 您可建立連線至這些 Azure 儲存體解決方案的資料存放區。

如需說明資料存放區如何融入 Azure Machine Learning 整體資料存取工作流程的相關資訊,請造訪安全地存取資料一文。

若要了解如何使用 UI 來連線至資料儲存體資源,請造訪使用 Studio UI 來連線至資料儲存體

提示

本文假設您將使用認證型驗證認證 (例如,服務主體或共用存取簽章 (SAS) 權杖) 來連線至儲存體服務。 請注意,如果認證是透過資料存放區註冊,則所有具有工作區 [讀者] 角色的使用者都可以擷取這些認證。 如需詳細資訊,請造訪管理工作區中的角色

如需身分識別型資料存取的詳細資訊,請造訪對儲存體服務的身分識別型資料存取 (v1)

必要條件

  • Azure 訂用帳戶。 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶。 試用免費或付費版本的 Azure Machine Learning

  • 具有所支援儲存體類型的 Azure 儲存體帳戶

  • 適用於 Python 的 Azure Machine Learning SDK

  • Azure Machine Learning 工作區。

    建立 Azure Machine Learning 工作區,或透過 Python SDK 使用現有的工作區

    匯入 WorkspaceDatastore 類別,並使用 from_config() 函數從檔案 config.json 中載入您的訂用帳戶資訊。 此函數預設會在目前的目錄中尋找 JSON 檔案,但您也可以使用 from_config(path="your/file/path") 來指定路徑參數以指向檔案:

    import azureml.core
    from azureml.core import Workspace, Datastore
    
    ws = Workspace.from_config()
    

    工作區建立會自動向工作區註冊 Azure Blob 容器和 Azure 檔案共用,以作為資料存放區。 這兩者分別會命名為 workspaceblobstoreworkspacefilestoreworkspaceblobstore 會儲存工作區成品和您的機器學習實驗記錄。 其作為「預設資料存放區」,而且無法從工作區予以刪除。 workspacefilestore 會儲存透過計算執行個體所授權的筆記本和 R 指令碼。

    注意

    當您在設計工具首頁中開啟範例時,Azure Machine Learning 設計工具會自動建立名為 azureml_globaldatasets 的資料存放區。 此資料存放區僅包含範例資料集。 請不要將此資料存放區用於任何機密資料存取。

支援的資料儲存體服務類型

資料存放區目前支援將連線資訊儲存至此矩陣中所列的儲存體服務:

提示

針對不支援的儲存體解決方案 (下表中未列出的解決方案),您可能會在連線和使用資料時遇到問題。 建議您移動資料至支援的 Azure 儲存體解決方案。 這樣也有助於處理其他案例,例如,減少 ML 實驗期間的資料輸出成本。

儲存體類型 驗證類型 Azure Machine Learning studio Azure Machine Learning Python SDK Azure Machine Learning CLI Azure Machine Learning REST API VS Code
Azure Blob 儲存體 帳戶金鑰
SAS 權杖
Azure 檔案共用 帳戶金鑰
SAS 權杖
Azure Data Lake Storage Gen 1 服務主體
Azure Data Lake Storage Gen 2 服務主體
Azure SQL Database SQL 驗證
服務主體
Azure PostgreSQL SQL 驗證
適用於 MySQL 的 Azure 資料庫 SQL 驗證 ✓* ✓* ✓*
Databricks 檔案系統 無驗證 ✓** ✓ ** ✓**

儲存體指引

建議針對 Azure Blob 容器建立資料存放區。 標準和進階儲存體都適用於 Blob。 雖然進階儲存體的成本較高,但其較快速的輸送量速度可能會加快訓練執行的速度,特別是當您對大型資料集進行訓練時。 如需儲存體帳戶成本的相關資訊,請造訪 Azure 定價計算機

Azure Data Lake Storage Gen2 是根據 Azure Blob 儲存體所建置。 其是針對企業巨量資料分析所設計。 Blob 儲存體是 Data Lake Storage Gen2 的一部份,具有階層命名空間。 階層命名空間會將物件/檔案組織成目錄階層,讓資料存取更有效率。

儲存體存取權和權限

為了確保您安全地連線至 Azure 儲存體服務,Azure Machine Learning 要求您必須具有對應資料儲存體容器的存取權限。 此存取權取決於用來註冊資料存放區的驗證認證。

虛擬網路

若要與位於防火牆後方或虛擬網路內的儲存體帳戶通訊,Azure Machine Learning 需要額外的設定步驟。 針對位於防火牆後方的儲存體帳戶,您可以使用 Azure 入口網站將用戶端的 IP 位址新增至允許清單

Azure Machine Learning 可以接收來自虛擬網路外部用戶端的要求。 若要確保從服務要求資料的實體是安全的,並讓資料能夠顯示在工作區中,請搭配使用私人端點與工作區

針對 Python SDK 使用者:若要使用訓練指令碼來存取計算目標,您必須將計算目標放在儲存體的相同虛擬網路和子網路內部。 您可以在相同的虛擬網路中使用計算執行個體/叢集

針對 Azure Machine Learning 工作室使用者:有數項功能仰賴從資料集讀取資料的能力,例如,資料集預覽、設定檔和自動化機器學習。 若要讓這些功能可以運用虛擬網路背後的儲存體,請使用工作室中的工作區受控身分識別,以允許 Azure Machine Learning 從虛擬網路外部存取儲存體帳戶。

注意

針對虛擬網路後方的 Azure SQL Database 中所儲存的資料,請使用 Azure 入口網站以將 [拒絕公用存取] 設定為 [否],以允許 Azure Machine Learning 存取儲存體帳戶。

存取驗證

警告

不支援跨租用戶存取儲存體帳戶。 如果您的案例需要跨租用戶存取權,則請連絡 Azure Machine Learning 資料支援小組別名 (amldatasupport@microsoft.com),以取得自訂程式碼解決方案的協助。

在初始資料存放區建立和註冊程序期間,Azure Machine Learning 會自動驗證基礎儲存體服務是否存在,而且使用者提供的主體 (使用者名稱、服務主體或 SAS 權杖) 可以存取指定的儲存體。

建立資料存放區後,系統將只會對需要存取基礎儲存體容器的方法執行這項驗證,而不會在每次擷取資料存放區物件時執行。 例如,如果您想要從資料存放區下載檔案,則會進行驗證。 不過,如果您只想要變更預設資料存放區,則不會進行驗證。

如要驗證您對基礎儲存體服務的存取權,您可在想要建立的資料存放區類型對應 register_azure_*() 方法中,提供帳戶金鑰、共用存取簽章 (SAS) 權杖或服務主體。 儲存體類型矩陣會列出對應至每個資料儲存區類型的驗證類型。

您可以在 Azure 入口網站上找到帳戶金鑰、SAS 權杖和服務主體資訊。

  • 若要使用帳戶金鑰或 SAS 權杖進行驗證,請在左窗格上選取 [儲存體帳戶],然後選擇您想要註冊的儲存體帳戶

    • [概觀] 頁面會提供帳戶名稱、檔案共用名稱、容器等資訊
      • 針對帳戶金鑰,移至 [設定] 窗格上的 [存取金鑰]
      • 針對 SAS 權杖,移至 [設定] 窗格上的 [共用存取簽章]
  • 若要使用服務主體進行驗證,請移至 [應用程式註冊],然後選取您想要使用的應用程式

    • 所選取應用程式的對應 [概觀] 頁面會包含必要資訊,例如,租用戶識別碼和用戶端識別碼

重要

若要變更 Azure 儲存體帳戶的存取金鑰 (帳戶金鑰或 SAS 權杖),請將新的認證與您的工作區和其所連線的資料存放區同步。 如需詳細資訊,請瀏覽同步您的更新認證

權限

針對 Azure blob 容器和 Azure Data Lake Gen 2 儲存體,請確定您的驗證認證具有儲存體 blob 資料讀取器存取權。 如需詳細資訊,請造訪儲存體 Blob 資料讀者。 帳戶 SAS 權杖預設為無權限。

  • 針對資料「讀取權」,您的驗證認證至少必須具有容器和物件的列出和讀取權限

  • 資料「寫入權」也需要寫入和新增權限

建立和註冊資料存放區

將 Azure 儲存體解決方案註冊為資料存放區,會自動建立該資料存放區,並將其註冊至特定工作區。 請檢閱本文件中的儲存體存取和權限,以取得虛擬網路案例以及何處尋找所需驗證認證的指導。

該節提供一些範例,而這些範例說明如何透過 Python SDK 以針對這些儲存體類型來建立和註冊資料存放區。 這些範例中所顯示的參數是建立和註冊資料存放區的「必要參數」

若要針對其他支援的儲存體服務建立資料存放區,請造訪適用 register_azure_* 方法的參考文件

若要了解如何使用 UI 來連線至資料儲存體資源,請造訪使用 Azure Machine Learning 工作室來連線至資料

重要

如果您先取消註冊資料存放區,再重新註冊同名的資料存放區,但重新註冊失敗,則工作區的 Azure Key Vault 可能未啟用虛刪除。 根據預設,工作區所建立的金鑰保存庫執行個體會啟用虛刪除,但如果您已使用現有的金鑰保存庫或具有 2020 年 10 月之前所建立的工作區,則可能未啟用虛刪除。 如需說明如何啟用虛刪除的資訊,請參閱針對現有的金鑰保存庫開啟虛刪除

注意

資料存放區名稱只應該包含小寫字母、數字和底線。

Azure Blob 容器

若要將 Azure Blob 容器註冊作為資料存放區,請使用 register_azure_blob_container() 方法。

此程式碼範例會建立 blob_datastore_name 資料存放區,並將其註冊至 ws 工作區。 資料存放區會使用提供的帳戶存取金鑰來存取 my-account-name 儲存體帳戶上的 my-container-name Blob 容器。 請檢閱儲存體存取和權限一節,以取得虛擬網路案例以及何處尋找所需驗證認證的指導。

blob_datastore_name='azblobsdk' # Name of the datastore to workspace
container_name=os.getenv("BLOB_CONTAINER", "<my-container-name>") # Name of Azure blob container
account_name=os.getenv("BLOB_ACCOUNTNAME", "<my-account-name>") # Storage account name
account_key=os.getenv("BLOB_ACCOUNT_KEY", "<my-account-key>") # Storage account access key

blob_datastore = Datastore.register_azure_blob_container(workspace=ws, 
                                                         datastore_name=blob_datastore_name, 
                                                         container_name=container_name, 
                                                         account_name=account_name,
                                                         account_key=account_key)

Azure 檔案共用

若要將 Azure 檔案共用註冊為資料存放區,請使用 register_azure_file_share() 方法。

此程式碼範例會建立 file_datastore_name 資料存放區,並將其註冊至 ws 工作區。 資料存放區會使用所提供的帳戶存取金鑰來存取 my-account-name 儲存體帳戶上的 my-fileshare-name 檔案共用。 請檢閱儲存體存取和權限一節,以取得虛擬網路案例以及何處尋找所需驗證認證的指導。

file_datastore_name='azfilesharesdk' # Name of the datastore to workspace
file_share_name=os.getenv("FILE_SHARE_CONTAINER", "<my-fileshare-name>") # Name of Azure file share container
account_name=os.getenv("FILE_SHARE_ACCOUNTNAME", "<my-account-name>") # Storage account name
account_key=os.getenv("FILE_SHARE_ACCOUNT_KEY", "<my-account-key>") # Storage account access key

file_datastore = Datastore.register_azure_file_share(workspace=ws,
                                                     datastore_name=file_datastore_name, 
                                                     file_share_name=file_share_name, 
                                                     account_name=account_name,
                                                     account_key=account_key)

Azure Data Lake Storage Generation 2

針對 Azure Data Lake Storage Generation 2 (ADLS Gen 2) 資料存放區,使用 register_azure_data_lake_gen2() 方法,以透過服務主體權限來註冊連線至 Azure Data Lake Gen 2 儲存體的認證資料存放區。

若要使用服務主體,您必須註冊您的應用程式,並透過 Azure 角色型存取控制 (Azure RBAC) 或存取控制清單 (ACL) 來授與服務主體資料存取權。 如需詳細資訊,請造訪針對 ADLS Gen 2 所設定的存取控制

此程式碼會建立 adlsgen2_datastore_name 資料存放區,並將其註冊至 ws 工作區。 此資料存放區會使用所提供的服務主體認證來存取 account_name 儲存體帳戶中的檔案系統 test。 如需必要權限案例的指南以及所需驗證認證的所在位置資訊,請參閱〈儲存體存取與權限〉一節 (部分機器翻譯)。

adlsgen2_datastore_name = 'adlsgen2datastore'

subscription_id=os.getenv("ADL_SUBSCRIPTION", "<my_subscription_id>") # subscription id of ADLS account
resource_group=os.getenv("ADL_RESOURCE_GROUP", "<my_resource_group>") # resource group of ADLS account

account_name=os.getenv("ADLSGEN2_ACCOUNTNAME", "<my_account_name>") # ADLS Gen2 account name
tenant_id=os.getenv("ADLSGEN2_TENANT", "<my_tenant_id>") # tenant id of service principal
client_id=os.getenv("ADLSGEN2_CLIENTID", "<my_client_id>") # client id of service principal
client_secret=os.getenv("ADLSGEN2_CLIENT_SECRET", "<my_client_secret>") # the secret of service principal

adlsgen2_datastore = Datastore.register_azure_data_lake_gen2(workspace=ws,
                                                             datastore_name=adlsgen2_datastore_name,
                                                             account_name=account_name, # ADLS Gen2 account name
                                                             filesystem='test', # ADLS Gen2 filesystem
                                                             tenant_id=tenant_id, # tenant id of service principal
                                                             client_id=client_id, # client id of service principal
                                                             client_secret=client_secret) # the secret of service principal

使用其他 Azure 工具建立資料存放區

除了使用 Python SDK 和工作室的資料存放區建立之外,您也可以使用 Azure Resource Manager 範本或 Azure Machine Learning VS Code 延伸模組來建立資料存放區。

Azure Resource Manager

您可以使用 https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.machinelearningservices 上的數個範本來建立資料存放區。 如需這些範本的相關資訊,請造訪使用 Azure Resource Manager 範本建立 Azure Machine Learning 的工作區

VS Code 延伸模組

如需使用 Azure Machine Learning VS Code 延伸模組來建立和管理資料存放區的詳細資訊,請參閱 VS Code 資源管理操作指南

使用資料存放區中的資料

建立資料存放區之後,請建立 Azure Machine Learning 資料集來與您的資料互動。 資料集會將您的資料封裝為延遲評估的可取用物件,以進行機器學習工作 (例如訓練)。 使用資料集時,您可以從 Azure 儲存體服務下載或裝載任何格式的檔案,以在計算目標上進行模型定型。 深入瞭解如何使用資料集進行機器學習模型定型

從您的工作區取得資料存放區

若要取得在目前的工作區中註冊的特定資料存放區,請對 Datastore 類別使用 get() 靜態方法:

# Get a named datastore from the current workspace
datastore = Datastore.get(ws, datastore_name='your datastore name')

若要取得向給定工作區註冊的資料存放區清單,請在工作區物件上使用 datastores 屬性:

# List all datastores registered in the current workspace
datastores = ws.datastores
for name, datastore in datastores.items():
    print(name, datastore.datastore_type)

此程式碼範例顯示如何取得工作區的預設資料存放區:

datastore = ws.get_default_datastore()

您也可以使用此程式碼範例來變更預設資料存放區。 SDK 只支援此功能:

 ws.set_default_datastore(new_default_datastore)

在評分期間存取資料

Azure Machine Learning 提供了數種方式讓您使用模型進行評分。 其中一些方法未提供對資料存放區的存取。 下表說明哪些方法允許在評分期間存取資料存放區:

方法 資料存放區存取 描述
批次預測 以非同步的方式對大量資料進行預測。
Web 服務   將模型部署為 Web 服務。

SDK 未提供對資料存放區的存取時,您可能可以使用相關 Azure SDK 來建立自訂程式碼,以存取資料。 例如,適用於 Python 的 Azure 儲存體 SDK 用戶端程式庫可以存取 Blob 或檔案中所儲存的資料。

將資料移至支援的 Azure 儲存體解決方案

Azure Machine Learning 支援從下列項目來存取資料

  • Azure Blob 儲存體
  • Azure 檔案
  • Azure Data Lake Storage Gen1
  • Azure Data Lake Storage Gen2
  • Azure SQL Database
  • 適用於 PostgreSQL 的 Azure 資料庫

如果您使用不受支援的儲存體,則建議您使用 Azure Data Factory 和這些步驟,以將您的資料移至支援的 Azure 儲存體解決方案。 將資料移至支援的儲存體,可協助您節省機器學習實驗期間的資料輸出成本。

Azure Data Factory 免費提供超過 80 個預先建置的連接器,可讓您有效率且彈性地進行資料傳輸。 這些連接器包括 Azure 資料服務、內部部署資料來源、Amazon S3 和 Redshift,以及 Google BigQuery。

下一步