Creare un pool di risorse per Machine Learning Services per SQL Server
Si applica a: SQL Server 2016 (13.x) e versioni successive
Informazioni su come creare e usare un pool di risorse per la gestione dei carichi di lavoro Python e R in Machine Learning Services per SQL Server.
Il processo include più passaggi:
- Esaminare lo stato degli eventuali pool di risorse esistenti. È importante capire quali servizi usano le risorse esistenti.
- Modificare i pool di risorse del server.
- Creare un nuovo pool di risorse per i processi esterni.
- Creare una funzione di classificazione per identificare le richieste di script esterni.
- Verificare che il nuovo pool di risorse esterne acquisisca i processi R o Python provenienti dai client o dagli account specificati.
Esaminare lo stato dei pool di risorse esistenti
Usare un'istruzione come quella che segue per controllare le risorse assegnate al pool predefinito per il server.
SELECT * FROM sys.resource_governor_resource_pools WHERE name = 'default'
Risultati dell'esempio
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 impostazione predefinita 0 100 0 100 100 0 0 Controllare le risorse assegnate al pool di risorse esterno predefinito.
SELECT * FROM sys.resource_governor_external_resource_pools WHERE name = 'default'
Risultati dell'esempio
external_pool_id name max_cpu_percent max_memory_percent max_processes versione 2 impostazione predefinita 100 20 0 2 Con queste impostazioni predefinite del server il runtime esterno avrà probabilmente risorse insufficienti per completare la maggior parte delle attività. Per migliorare le risorse, è necessario modificare l'utilizzo delle risorse del server come segue:
Ridurre la quantità massima di memoria del computer che può essere usata dal motore di database.
Aumentare la quantità massima di memoria del computer che può essere usata dal processo esterno.
Modificare l'utilizzo delle risorse del server
In Management Studio eseguire l'istruzione seguente per limitare l'utilizzo della memoria di SQL Server al 60% del valore specificato nell'impostazione 'max server memory'.
ALTER RESOURCE POOL "default" WITH (max_memory_percent = 60);
Eseguire l'istruzione seguente per limitare l'uso di memoria da parte dei processi esterni al 40% delle risorse totali del computer.
ALTER EXTERNAL RESOURCE POOL "default" WITH (max_memory_percent = 40);
Per applicare queste modifiche, è necessario riconfigurare e riavviare Resource Governor in questo modo:
ALTER RESOURCE GOVERNOR RECONFIGURE;
Nota
Queste sono solo impostazioni consigliate da cui iniziare. È consigliabile valutare le attività di Machine Learning rispetto ad altri processi del server per determinare il corretto equilibrio per l'ambiente e il carico di lavoro.
Creare un pool di risorse esterno definito dall'utente
Tutte le modifiche apportate alla configurazione di Resource Governor vengono applicate nell'intero server. Le modifiche influiscono sui carichi di lavoro che usano i pool predefiniti per il server, nonché sui carichi di lavoro che usano i pool esterni.
Per ottenere un controllo con granularità più fine sui carichi di lavoro che devono avere la precedenza, è possibile creare un nuovo pool di risorse esterno definito dall'utente. Definire una funzione di classificazione e assegnarla al pool di risorse esterno. La parola chiave EXTERNAL è nuova.
Creare un nuovo pool di risorse esterno definito dall'utente. Nell'esempio seguente il pool si chiama ds_ep.
CREATE EXTERNAL RESOURCE POOL ds_ep WITH (max_memory_percent = 40);
Creare un gruppo di carico di lavoro denominato
ds_wg
da usare per la gestione delle richieste di sessione. Per le query SQL verrà usato il pool predefinito, mentre per tutti i processi esterni le query useranno il poolds_ep
.CREATE WORKLOAD GROUP ds_wg WITH (importance = medium) USING "default", EXTERNAL "ds_ep";
Le richieste vengono assegnate al gruppo predefinito ogni volta che la richiesta non può essere classificata o se si è verificato un altro errore di classificazione.
Per altre informazioni, vedere Gruppo di carico di lavoro di Resource Governor e CREATE WORKLOAD GROUP (Transact-SQL).
Creare una funzione di classificazione per Machine Learning
Una funzione di classificazione esamina le attività in ingresso. Determina se l'attività possa essere eseguita usando il pool di risorse corrente. Le attività che non soddisfano i criteri della funzione di classificazione vengono riassegnate al pool di risorse predefinito del server.
Per iniziare, specificare che una funzione di classificazione deve essere usata da Resource Governor per determinare i pool di risorse. È possibile assegnare un valore Null come segnaposto per la funzione di classificazione.
ALTER RESOURCE GOVERNOR WITH (classifier_function = NULL); ALTER RESOURCE GOVERNOR RECONFIGURE;
Per altre informazioni, vedere ALTER RESOURCE GOVERNOR (Transact-SQL).
Nella funzione di classificazione per ogni pool di risorse definire il tipo di istruzioni o di richieste in ingresso che devono essere assegnate al pool di risorse.
Ad esempio, la funzione seguente restituisce il nome dello schema assegnato al pool di risorse esterno definito dall'utente se l'applicazione che ha inviato la richiesta è 'Microsoft R Host', 'RStudio' o 'Mashup'. In caso contrario, restituisce il pool di risorse predefinito.
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
Dopo la creazione della funzione, riconfigurare il gruppo di risorse in modo da assegnare la nuova funzione di classificazione al gruppo di risorse esterno definito in precedenza.
ALTER RESOURCE GOVERNOR WITH (classifier_function = dbo.is_ds_apps); ALTER RESOURCE GOVERNOR RECONFIGURE; GO
Verificare i nuovi pool di risorse e l'affinità
Controllare la configurazione della memoria del server e la CPU per ognuno dei gruppi del carico di lavoro. Verificare che le modifiche alle risorse dell'istanza siano state apportate esaminando quanto segue:
- Pool predefinito per il server SQL Server
- Pool di risorse predefinito per i processi esterni
- Pool definito dall'utente per i processi esterni
Eseguire l'istruzione seguente per visualizzare tutti i gruppi di carico di lavoro:
SELECT * FROM sys.resource_governor_workload_groups;
Risultati dell'esempio
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 Medio 25 0 0 0 0 1 2 2 impostazione predefinita Medio 25 0 0 0 0 2 2 256 ds_wg Medio 25 0 0 0 0 2 256 Usare la nuova vista del catalogo, sys.resource_governor_external_resource_pools (Transact-SQL) per visualizzare tutti i pool di risorse esterni.
SELECT * FROM sys.resource_governor_external_resource_pools;
Risultati dell'esempio
external_pool_id name max_cpu_percent max_memory_percent max_processes versione 2 impostazione predefinita 100 20 0 2 256 ds_ep 100 40 0 1 Per altre informazioni, vedere Viste del catalogo di Resource Governor (Transact-SQL).
Eseguire l'istruzione seguente per restituire informazioni sulle risorse del computer per le quali è impostata l'affinità al pool di risorse esterno, se applicabile:
SELECT * FROM sys.resource_governor_external_resource_pool_affinity;
Non viene visualizzata alcuna informazione perché i pool sono stati creati con affinità AUTO. Per altre informazioni, vedere sys.dm_resource_governor_resource_pool_affinity (Transact-SQL).
Passaggi successivi
Per altre informazioni sulla gestione delle risorse del server, vedere:
Per una panoramica della governance delle risorse per Machine Learning, vedere: