SQL Server Machine Learning Services のリソース プールを作成する

適用対象: SQL Server 2016 (13.x) 以降のバージョン

SQL Server Machine Learning Services で、Python および R のワークロードを管理するためにリソース プールを作成して使用する方法について説明します。

このプロセスには、次の複数の手順が含まれます。

  1. 既存のリソース プールの状態を確認する 既存のリソースを使用しているサービスを理解することが重要です。
  2. サーバー リソース プールを変更する
  3. 外部プロセス用の新しいリソース プールを作成する
  4. 外部スクリプト要求を識別する分類子関数を作成する
  5. 新しい外部リソース プールが、指定されたクライアントまたはアカウントから R ジョブまたは Python ジョブをキャプチャしていることを確認します。

既存のリソース プールの状態を確認する

  1. 次のようなステートメントを使用して、サーバーの既定のプールに割り当てられているリソースを確認します。

    SELECT * FROM sys.resource_governor_resource_pools WHERE name = 'default'
    

    サンプルの結果

    pool_id name min_cpu_percent max_cpu_percent min_memory_percent max_memory_percent cap_cpu_percent min_iops_per_volume max_iops_per_volume
    2 default 0 100 0 100 100 0 0
  2. 既定の外部リソース プールに割り当てられているリソースを確認します。

    SELECT * FROM sys.resource_governor_external_resource_pools WHERE name = 'default'
    

    サンプルの結果

    external_pool_id name max_cpu_percent max_memory_percent max_processes version
    2 default 100 20 0 2
  3. これらのサーバーの既定の設定では、外部ランタイムが大半のタスクを完了するにはリソース不足になる可能性があります。 リソースを改善するには、サーバーのリソース使用率を次のように変更する必要があります。

    • データベース エンジンが使用できるコンピューターの最大メモリを減らす

    • 外部プロセスが使用できるコンピューターの最大メモリを増やす

サーバーのリソース使用率を変更する

  1. Management Studio で、次のステートメントを実行して、SQL Server のメモリ使用量を [最大サーバー メモリ] の値の 60% に制限します。

    ALTER RESOURCE POOL "default" WITH (max_memory_percent = 60);
    
  2. 次のステートメントを実行して、外部プロセスによるメモリの使用量をコンピューター リソース全体の 40% に制限します。

    ALTER EXTERNAL RESOURCE POOL "default" WITH (max_memory_percent = 40);
    
  3. これらの変更を適用するには、リソース ガバナーを次のように再構成して再起動する必要があります。

    ALTER RESOURCE GOVERNOR RECONFIGURE;
    

    Note

    これらは、単に手始めとして推奨する設定です。サーバー プロセスに照らして機械学習タスクを評価して、環境とワークロードに適したバランスを判断する必要があります。

ユーザー定義の外部リソース プールを作成する

  1. リソース ガバナーの構成に対するすべての変更は、サーバー全体に適用されます。 この変更は、サーバーの既定のプールを使用するワークロードだけではなく、外部プールを使用するワークロードにも影響します。

    優先するワークロードを細かく制御するために、新しいユーザー定義の外部リソース プールを作成できます。 分類子関数を定義して、外部リソース プールに割り当てます。 EXTERNAL キーワードは新規のキーワードです。

    新しいユーザー定義の外部リソース プールを作成します。 次の例では、プールに ds_ep という名前を付けています。

    CREATE EXTERNAL RESOURCE POOL ds_ep WITH (max_memory_percent = 40);
    
  2. セッション要求の管理で使用する ds_wg という名前のワークロード グループを作成します。 SQL クエリでは既定のプールを使用し、すべての外部プロセスのクエリでは ds_ep プールを使用します。

    CREATE WORKLOAD GROUP ds_wg WITH (importance = medium) USING "default", EXTERNAL "ds_ep";
    

    要求は、要求を分類することができない場合、またはその他の分類エラーが発生した場合は、既定のグループに割り当てられます。

詳細については、「Resource Governor Workload Group (リソース ガバナー ワークロード グループ)」と「CREATE WORKLOAD GROUP (Transact-SQL) (ワークロード グループの作成 (TRANSACT-SQL))」を参照してください。

機械学習用の分類子関数を作成する

分類子関数は、受信タスクを検査します。 タスクが現在のリソース プールを使用して実行できるものかどうかを判定します。 分類子関数の条件を満たしていないタスクは、サーバーの既定のリソース プールに割り当てられます。

  1. リソース ガバナーが分類子関数を使用してリソース プールを決定するように指定することから始めます。 分類子関数のプレースホルダーとして null を割り当てることができます。

    ALTER RESOURCE GOVERNOR WITH (classifier_function = NULL);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    

    詳細については、「ALTER RESOURCE GOVERNOR (Transact-SQL)」を参照してください。

  2. 各リソース プール用の分類子関数には、そのリソース プールに割り当てる必要があるステートメントまたは受信要求の種類を定義します。

    たとえば、次の関数は、要求を送信したアプリケーションが 'Microsoft R Host'、'RStudio'、または 'Mashup' の場合は、ユーザー定義の外部リソース プールに割り当てられたスキーマの名前を返します。それ以外の場合は既定のリソース プールを返します。

    USE master
    GO
    CREATE FUNCTION is_ds_apps()
    RETURNS sysname
    WITH schemabinding
    AS
    BEGIN
        IF program_name() in ('Microsoft R Host', 'RStudio', 'Mashup') RETURN 'ds_wg';
        RETURN 'default'
        END;
    GO
    
  3. 関数を作成したら、リソース グループを再定義して、新しい分類子関数が先ほど定義した外部リソース グループに割り当てられるようにします。

    ALTER RESOURCE GOVERNOR WITH  (classifier_function = dbo.is_ds_apps);
    ALTER RESOURCE GOVERNOR RECONFIGURE;
    GO
    

新しいリソース プールとアフィニティを確認する

各ワークロードグループのサーバー メモリの構成と CPU を確認します。 以下を参照して、インスタンス リソースの変更が行われたことを確認します。

  • SQL Server サーバー用の既定のプール
  • 外部プロセス用の既定のリソース プール
  • 外部プロセス用のユーザー定義プール
  1. 次のステートメントを実行して、すべてのワークロード グループを表示します。

    SELECT * FROM sys.resource_governor_workload_groups;
    

    サンプルの結果

    group_id name importance request_max_memory_grant_percent request_max_cpu_time_sec request_memory_grant_timeout_sec max_dop group_max_requests pool_id pool_idd external_pool_id
    1 internal Medium 25 0 0 0 0 1 2
    2 default Medium 25 0 0 0 0 2 2
    256 ds_wg Medium 25 0 0 0 0 2 256
  2. 新しいカタログ ビュー sys.resource_governor_external_resource_pools (Transact-SQL) を使用して、すべての外部リソース プールを表示します。

    SELECT * FROM sys.resource_governor_external_resource_pools;
    

    サンプルの結果

    external_pool_id name max_cpu_percent max_memory_percent max_processes version
    2 default 100 20 0 2
    256 ds_ep 100 40 0 1

    詳細については、「Resource Governor Catalog Views (Transact-SQL) (リソース ガバナーのカタログ ビュー (Transact-SQL))」を参照してください。

  3. 次のステートメントを実行して、外部のリソース プールに関連付けられたコンピューター リソースに関する情報を返します (該当する場合)。

    SELECT * FROM sys.resource_governor_external_resource_pool_affinity;
    

    プールが AUTO のアフィニティで作成されたため、情報は表示されません。 詳細については、「 sys.dm_resource_governor_resource_pool_affinity (Transact-SQL)」を参照してください。

次のステップ

サーバー リソースの管理の詳細については、以下を参照してください。

機械学習のリソース管理の概要については、以下を参照してください。