Azure Synapse Analytics と Azure Machine Learning ワークスペースをリンクして Apache Spark プールをアタッチする (非推奨)

適用対象:Python SDK azureml v1

警告

Python SDK v1 で使用できる Azure Machine Learning とのAzure Synapse Analytics の統合は非推奨になっています。 ユーザーは、Azure Machine Learning にリンク サービスとして登録された Synapse ワークスペースを、引き続き使用できます。 ただし、新しい Synapse ワークスペースは、リンクされたサービスとして Azure Machine Learning に登録できなくなります。 CLI v2 と Python SDK v2 で利用できるサーバーレス Spark コンピューティングと、アタッチされた Synapse Spark プールを使うことをお勧めします。 詳細については、https://aka.ms/aml-spark を参照してください。

この記事では、Azure Synapse Analytics ワークスペースと Azure Machine Learning ワークスペースをリンクするリンク サービスを作成する方法について説明します。

Azure Synapse ワークスペースとリンクされた Azure Machine Learning ワークスペースでは、Azure Synapse Analytics を利用する Apache Spark プールを、専用コンピューティング リソースとしてアタッチできます。 このリソースを使用した大規模なデータ ラングリングや、モデルのトレーニングなどを、すべて同じ Python ノートブックから実行できます。

ML ワークスペースと Synapse ワークスペースのリンクは、Python SDK または Azure Machine Learning スタジオで行うことができます。 また、1 つの Azure Resource Manager (ARM) テンプレートを使って、ワークスペースをリンクし、Synapse Spark プールをアタッチすることもできます。

前提条件

重要

Synapse ワークスペースに正常にリンクするには、ユーザーが Synapse ワークスペースの所有者ロールを付与されている必要があります。 Azure portal でご自身のアクセス権を確認してください。

ユーザーが Synapse ワークスペースの共同作成者でしかなく、その Synapse ワークスペースの所有者になっていない場合は、既存のリンク サービスを使うことだけができます。 詳しくは、既存のリンク サービスの取得と使用に関するセクションをご覧ください。

以下のコードでは、次のことを行うために LinkedServiceSynapseWorkspaceLinkedServiceConfiguration クラスを使っています

  • Machine Learning ワークスペース (ws) を Azure Synapse ワークスペースとリンクします
  • Synapse ワークスペースを Azure Machine Learning にリンク サービスとして登録します
import datetime  
from azureml.core import Workspace, LinkedService, SynapseWorkspaceLinkedServiceConfiguration

# Azure Machine Learning workspace
ws = Workspace.from_config()

#link configuration 
synapse_link_config = SynapseWorkspaceLinkedServiceConfiguration(
    subscription_id=ws.subscription_id,
    resource_group= 'your resource group',
    name='mySynapseWorkspaceName')

# Link workspaces and register Synapse workspace in Azure Machine Learning
linked_service = LinkedService.register(workspace = ws,              
                                            name = 'synapselink1',    
                                            linked_service_config = synapse_link_config)

重要

マネージド ID system_assigned_identity_principal_id は、リンク サービスごとに作成されます。 Synapse セッションを開始する前に、このマネージド ID に、Synapse ワークスペースの Synapse Apache Spark 管理者ロールを付与する必要があります。 詳しくは、Synapse Studio で Azure Synapse RBAC の割り当てを管理する方法に関する記事をご覧ください。

特定のリンクされたサービスの system_assigned_identity_principal_id を見つけるには、LinkedService.get('<your-mlworkspace-name>', '<linked-service-name>') を使用します。

リンクされたサービスの管理

Machine Learning ワークスペースに関連付けられているリンク サービスをすべて表示します。

LinkedService.list(ws)

ワークスペースのリンクを解除するには、unregister() メソッドを使います。

linked_service.unregister()

Azure Machine Learning スタジオを使って、Machine Learning ワークスペースと Synapse ワークスペースをリンクします。

  1. Azure Machine Learning スタジオにサインインします。

  2. 左側のペインで [管理] セクションの [リンク サービス] を選びます

  3. [統合の追加] を選びます

  4. [Link workspace](ワークスペースのリンク) フォームの各フィールドの内容を入力します。

    フィールド 内容
    名前 リンクされたサービスの名前を入力します。 この特定のリンク サービスを参照するには、この名前を使います
    サブスクリプション名 Machine Learning ワークスペースに関連付けられているサブスクリプションの名前を選びます
    Synapse ワークスペース リンク先の Synapse ワークスペースを選びます
  5. [次へ] を選択して [Select Spark pools (optional)](Spark プールの選択 (省略可)) フォームを開きます。 このフォームで、ワークスペースにアタッチする Synapse Spark プールを選択します。

  6. [次へ] を選んで [レビュー] フォームを開き、選択内容を確認します

  7. [作成] を選んで、リンク サービスの作成プロセスを完了します

既にあるリンクされたサービスを取得する

データ ラングリング専用のコンピューティングをアタッチする前に、Azure Synapse Analytics ワークスペースにリンクされた Machine Learning ワークスペースを用意する必要があります。 このワークスペースのことをリンク サービスと呼びます。 既存のリンク サービスを取得して使うには、Azure Synapse Analytics ワークスペースに対するユーザーまたは共同作成者のアクセス許可が必要です。

この例では、get() メソッドを使って、ワークスペース ws から既存のリンク サービス synapselink1 を取得します。

from azureml.core import LinkedService

linked_service = LinkedService.get(ws, 'synapselink1')

Synapse Spark プールをコンピューティングとしてアタッチする

リンクされたサービスを取得したら、データ ラングリング タスク専用のコンピューティング リソースとして Synapse Apache Spark プールをアタッチします。 Apache Spark プールは、次の方法でアタッチできます

スタジオを使用してプールをアタッチする

  1. Azure Machine Learning スタジオにサインインします。
  2. 左側のペインで [管理] セクションの [リンク サービス] を選びます
  3. Synapse ワークスペースを選びます
  4. 左上の [アタッチされている Spark プール] を選びます
  5. [接続] を選択します
  6. Apache Spark プールを一覧から選んで、名前を指定します
    1. この一覧では、コンピューティングにアタッチできる Synapse Spark プールが示されます
    2. 新しい Synapse Spark プールを作成する場合は、「クイック スタート: Azure portal を使用して新しいサーバーレス Apache Spark プールを作成する」をご覧ください。
  7. [アタッチが選択されました] を選びます

Python SDK を使用してプールをアタッチする

次のコード例で示すように、Python SDK を使って Apache Spark プールをアタッチすることもできます。

from azureml.core.compute import SynapseCompute, ComputeTarget

attach_config = SynapseCompute.attach_configuration(linked_service, #Linked synapse workspace alias
                                                    type='SynapseSpark', #Type of assets to attach
                                                    pool_name=synapse_spark_pool_name) #Name of Synapse spark pool 

synapse_compute = ComputeTarget.attach(workspace= ws,                
                                       name= synapse_compute_name, 
                                       attach_configuration= attach_config
                                      )

synapse_compute.wait_for_completion()

Apache Spark プールがアタッチされていることを確認します。

ws.compute_targets['Synapse Spark pool alias']

このコードでは

  1. 次のものを使って SynapseCompute を構成します

    1. 前のステップで作成または取得した LinkedService (linked_service)
    2. アタッチするコンピューティング先の種類 (この例では SynapseSpark)
    3. Apache Spark プールの名前。 この名前は、Azure Synapse Analytics ワークスペースにある既存の Apache Spark プールと一致している必要があります
  2. 次のものを渡して、機械学習の ComputeTarget を作成します

    1. 使用する Machine Learning ワークスペース (ws)
    2. Azure Machine Learning ワークスペース内でコンピューティングを参照するために使う名前
    3. Synapse コンピューティングを構成するときに指定した attach_configuration
      1. ComputeTarget.attach() の呼び出しは非同期なので、呼び出しが完了するまで、サンプルの実行はブロックされます

次のステップ