Créer un pool de ressources pour SQL Server Machine Learning Services
S’applique à : SQL Server 2016 (13.x) et versions ultérieures
Découvrez comment vous pouvez créer et utiliser un pool de ressources pour gérer les charges de travail Python et R dans SQL Server Machine Learning Services.
Le processus comprend plusieurs étapes :
- Examiner l’état des pools de ressources existants. Il est important de comprendre quels services utilisent les ressources existantes.
- Modifier des pools de ressources de serveur.
- Créer un pool de ressources pour des processus externes.
- Créer une fonction de classification pour identifier les demandes de script externes.
- Vérifiez que le nouveau pool de ressources externes capture des travaux R ou Python à partir des clients ou des comptes spécifiés.
Examiner l’état des pools de ressources existants
Utilisez les instructions suivantes pour vérifier les ressources affectées au pool par défaut du serveur.
SELECT * FROM sys.resource_governor_resource_pools WHERE name = 'default'
Exemples de résultats
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 Vérifiez les ressources affectées au pool de ressources externe par défaut.
SELECT * FROM sys.resource_governor_external_resource_pools WHERE name = 'default'
Exemples de résultats
external_pool_id name max_cpu_percent max_memory_percent max_processes version 2 default 100 20 0 2 Avec ces paramètres de serveur par défaut, il est probable que le runtime externe n’aurait pas suffisamment de ressources pour mener à bien la plupart des tâches. Pour améliorer les ressources, vous devez modifier l’utilisation des ressources serveur comme suit :
Réduisez la quantité maximale de mémoire de l’ordinateur que peut utiliser le moteur de base de données.
Augmentez la quantité maximale de mémoire de l’ordinateur que peut utiliser le processus externe.
Modifier l’utilisation des ressources serveur
Dans Management Studio, exécutez l’instruction suivante pour limiter l’utilisation de mémoire de SQL Server à 60 % de la valeur du paramètre « max server memory ».
ALTER RESOURCE POOL "default" WITH (max_memory_percent = 60);
Exécutez l’instruction suivante pour limiter la quantité de mémoire qu’utilise un processus externe à 40 % des ressources totales de l’ordinateur.
ALTER EXTERNAL RESOURCE POOL "default" WITH (max_memory_percent = 40);
Pour appliquer ces modifications, vous devez reconfigurer et redémarrer Resource Governor comme suit :
ALTER RESOURCE GOVERNOR RECONFIGURE;
Notes
Il s’agit simplement d’une suggestion de paramétrage qui peut faire office de point de départ ; vous devez évaluer les tâches de Machine Learning par rapport aux autres processus serveur pour déterminer l’équilibre approprié compte tenu de votre environnement et de la charge de travail.
Créer un pool de ressources externe défini par l’utilisateur
Toutes les modifications apportées à la configuration de Resource Governor sont appliquées sur l’ensemble du serveur. Les modifications affectent les charges de travail qui utilisent les pools par défaut pour le serveur, ainsi que les charges de travail qui utilisent les pools externes.
Pour définir avec plus de précision les charges de travail qui doivent avoir la priorité, vous pouvez créer un nouveau pool de ressources externe défini par l’utilisateur. Définissez une fonction de classification et affectez-la au pool de ressources externe. Le mot clé EXTERNE est nouveau.
Créez un nouveau pool de ressources externe défini par l’utilisateur. Dans l’exemple suivant, le pool est nommé ds_ep.
CREATE EXTERNAL RESOURCE POOL ds_ep WITH (max_memory_percent = 40);
Créez un groupe de charge de travail sous le nom
ds_wg
pour l’utiliser dans la gestion des demandes de session. Pour les requêtes SQL, vous utiliserez le pool par défaut ; les requêtes de tous les processus externes utiliseront le poolds_ep
.CREATE WORKLOAD GROUP ds_wg WITH (importance = medium) USING "default", EXTERNAL "ds_ep";
Les demandes sont assignées au groupe par défaut chaque fois qu’elles ne peuvent pas être classifiées ou que tout autre échec de classification se produit.
Pour plus d’informations, consultez Groupe de charge de travail de Resource Governor et CREATE WORKLOAD GROUP (Transact-SQL).
Créer une fonction de classification pour le Machine Learning
Une fonction de classification examine les tâches entrantes. Elle détermine si la tâche peut être exécutée à l’aide du pool de ressources actuel. Les tâches qui ne répondent pas aux critères de la fonction de classification sont réassignées au pool de ressources par défaut du serveur.
Commencez par préciser qu’une fonction de classification doit être utilisée par Resource Governor pour déterminer les pools de ressources. Vous pouvez assigner une valeur null en guise d’espace réservé pour la fonction classifieur.
ALTER RESOURCE GOVERNOR WITH (classifier_function = NULL); ALTER RESOURCE GOVERNOR RECONFIGURE;
Pour plus d’informations, consultez ALTER RESOURCE GOVERNOR (Transact-SQL).
Dans la fonction classifieur de chaque pool de ressources, vous devez définir le type d’instruction ou de demande entrante qui doit être assigné au pool de ressources.
Par exemple, la fonction suivante retourne le nom du schéma assigné au pool de ressources externe défini par l’utilisateur si l’application qui a envoyé la demande est « Microsoft R Host », « RStudio » ou « Mashup » ; sinon, elle retourne le pool de ressources par défaut.
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
Une fois que la fonction a été créée, reconfigurez le groupe de ressources pour assigner la nouvelle fonction classifieur au groupe de ressources externe que vous avez défini précédemment.
ALTER RESOURCE GOVERNOR WITH (classifier_function = dbo.is_ds_apps); ALTER RESOURCE GOVERNOR RECONFIGURE; GO
Vérifier les nouveaux pools de ressources et l’affinité
Vérifiez la configuration de la mémoire du serveur et le processeur pour chacun des groupes de charge de travail. Vérifiez que les modifications apportées aux ressources de l’instance ont été effectuées, en examinant :
- le pool par défaut du serveur SQL Server
- le pool de ressources par défaut pour les processus externes
- le pool défini par l’utilisateur pour les processus externes
Exécutez l’instruction suivante pour afficher tous les groupes de charges de travail :
SELECT * FROM sys.resource_governor_workload_groups;
Exemples de résultats
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 Moyenne 25 0 0 0 0 1 2 2 default Moyenne 25 0 0 0 0 2 2 256 ds_wg Moyenne 25 0 0 0 0 2 256 Utilisez le nouvel affichage catalogue, sys.resource_governor_external_resource_pools (Transact-SQL), pour afficher tous les pools de ressources externes.
SELECT * FROM sys.resource_governor_external_resource_pools;
Exemples de résultats
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 Pour plus d’informations, consultez Affichages catalogue de Resource Governor (Transact-SQL).
Exécutez l’instruction suivante pour renvoyer des informations sur les ressources d’ordinateur qui ont des affinités avec le pool de ressources externe, le cas échéant :
SELECT * FROM sys.resource_governor_external_resource_pool_affinity;
Comme les pools ont été créés avec une affinité AUTO, aucune information n’est affichée. Pour plus d’informations, consultez sys.dm_resource_governor_resource_pool_affinity (Transact-SQL).
Étapes suivantes
Pour plus d’informations sur la gestion des ressources de serveur, consultez :
- gouverneur de ressources
- Vues de gestion dynamique relatives au gouverneur de ressources (Transact-SQL)
Pour avoir une vue d’ensemble de la gouvernance des ressources pour le Machine Learning, consultez :