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

適用於:Python SDK azureml v1

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

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

資料存放區會安全地連線至您在 Azure 上的儲存體服務,不會讓您的驗證認證與原始資料來源的完整性置於風險當中。 資料存放區會儲存連線資訊,就如同與工作區相關聯的 Key Vault 中的訂閱識別碼和權杖授權,因此您可以安全地存取儲存體,而無須將其寫入指令碼中。 您可建立連線至這些 Azure 儲存體解決方案的資料存放區。

如要瞭解如何將資料存放區納入 Azure Machine Learning 的整體資料存取工作流程中,請參閱《安全地存取資料》一文。

如需低程式碼體驗,請參閱如何使用 Azure Machine Learning 工作室建立和註冊資料存放區

提示

本文假設您想要使用認證型驗證的認證 (例如服務主體或共用存取簽章 (SAS) 權杖),連線至儲存體服務。 請記住,若認證是透過資料存放區註冊,則具有工作區 [讀者] 角色的所有使用者都可以取得這些認證。 深入了解工作區 [讀者] 角色

若發生問題,請瞭解如何透過以身分型存取連線至儲存體服務

必要條件

  • 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 程式碼
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 儲存體之上,是專為企業巨量資料分析而設計的。 Data Lake Storage Gen2 的基礎部分是新增至 Blob 儲存體的階層命名空間。 階層命名空間會將物件/檔案組織成目錄階層,讓資料存取更有效率。

儲存體存取權和權限

為了確保您安全地連線至 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_* 方法的參考文件

若您偏好低程式碼體驗,請參閱使用 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 DataLake 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 Files、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。

後續步驟