SQL Server Machine Learning Services のリソース プールを作成する
適用対象: SQL Server 2016 (13.x) 以降のバージョン
SQL Server Machine Learning Services で、Python および R のワークロードを管理するためにリソース プールを作成して使用する方法について説明します。
このプロセスには、次の複数の手順が含まれます。
- 既存のリソース プールの状態を確認する 既存のリソースを使用しているサービスを理解することが重要です。
- サーバー リソース プールを変更する
- 外部プロセス用の新しいリソース プールを作成する
- 外部スクリプト要求を識別する分類子関数を作成する
- 新しい外部リソース プールが、指定されたクライアントまたはアカウントから R ジョブまたは Python ジョブをキャプチャしていることを確認します。
既存のリソース プールの状態を確認する
次のようなステートメントを使用して、サーバーの既定のプールに割り当てられているリソースを確認します。
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 既定の外部リソース プールに割り当てられているリソースを確認します。
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 これらのサーバーの既定の設定では、外部ランタイムが大半のタスクを完了するにはリソース不足になる可能性があります。 リソースを改善するには、サーバーのリソース使用率を次のように変更する必要があります。
データベース エンジンが使用できるコンピューターの最大メモリを減らす
外部プロセスが使用できるコンピューターの最大メモリを増やす
サーバーのリソース使用率を変更する
Management Studio で、次のステートメントを実行して、SQL Server のメモリ使用量を [最大サーバー メモリ] の値の 60% に制限します。
ALTER RESOURCE POOL "default" WITH (max_memory_percent = 60);
次のステートメントを実行して、外部プロセスによるメモリの使用量をコンピューター リソース全体の 40% に制限します。
ALTER EXTERNAL RESOURCE POOL "default" WITH (max_memory_percent = 40);
これらの変更を適用するには、リソース ガバナーを次のように再構成して再起動する必要があります。
ALTER RESOURCE GOVERNOR RECONFIGURE;
Note
これらは、単に手始めとして推奨する設定です。サーバー プロセスに照らして機械学習タスクを評価して、環境とワークロードに適したバランスを判断する必要があります。
ユーザー定義の外部リソース プールを作成する
リソース ガバナーの構成に対するすべての変更は、サーバー全体に適用されます。 この変更は、サーバーの既定のプールを使用するワークロードだけではなく、外部プールを使用するワークロードにも影響します。
優先するワークロードを細かく制御するために、新しいユーザー定義の外部リソース プールを作成できます。 分類子関数を定義して、外部リソース プールに割り当てます。 EXTERNAL キーワードは新規のキーワードです。
新しいユーザー定義の外部リソース プールを作成します。 次の例では、プールに ds_ep という名前を付けています。
CREATE EXTERNAL RESOURCE POOL ds_ep WITH (max_memory_percent = 40);
セッション要求の管理で使用する
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))」を参照してください。
機械学習用の分類子関数を作成する
分類子関数は、受信タスクを検査します。 タスクが現在のリソース プールを使用して実行できるものかどうかを判定します。 分類子関数の条件を満たしていないタスクは、サーバーの既定のリソース プールに割り当てられます。
リソース ガバナーが分類子関数を使用してリソース プールを決定するように指定することから始めます。 分類子関数のプレースホルダーとして null を割り当てることができます。
ALTER RESOURCE GOVERNOR WITH (classifier_function = NULL); ALTER RESOURCE GOVERNOR RECONFIGURE;
詳細については、「ALTER RESOURCE GOVERNOR (Transact-SQL)」を参照してください。
各リソース プール用の分類子関数には、そのリソース プールに割り当てる必要があるステートメントまたは受信要求の種類を定義します。
たとえば、次の関数は、要求を送信したアプリケーションが '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
関数を作成したら、リソース グループを再定義して、新しい分類子関数が先ほど定義した外部リソース グループに割り当てられるようにします。
ALTER RESOURCE GOVERNOR WITH (classifier_function = dbo.is_ds_apps); ALTER RESOURCE GOVERNOR RECONFIGURE; GO
新しいリソース プールとアフィニティを確認する
各ワークロードグループのサーバー メモリの構成と CPU を確認します。 以下を参照して、インスタンス リソースの変更が行われたことを確認します。
- SQL Server サーバー用の既定のプール
- 外部プロセス用の既定のリソース プール
- 外部プロセス用のユーザー定義プール
次のステートメントを実行して、すべてのワークロード グループを表示します。
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 新しいカタログ ビュー 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))」を参照してください。
次のステートメントを実行して、外部のリソース プールに関連付けられたコンピューター リソースに関する情報を返します (該当する場合)。
SELECT * FROM sys.resource_governor_external_resource_pool_affinity;
プールが AUTO のアフィニティで作成されたため、情報は表示されません。 詳細については、「 sys.dm_resource_governor_resource_pool_affinity (Transact-SQL)」を参照してください。
次のステップ
サーバー リソースの管理の詳細については、以下を参照してください。
機械学習のリソース管理の概要については、以下を参照してください。