Criar um pool de recursos para os Serviços de Machine Learning do SQL Server
Aplica-se a: SQL Server 2016 (13.x) e versões posteriores
Saiba como você pode criar e usar um pool de recursos para gerenciar cargas de trabalho de Python e R nos Serviços de Machine Learning do SQL Server.
O processo inclui várias etapas:
- Verificar o status dos pools de recursos existentes. É importante entender quais serviços estão usando recursos existentes.
- Modificar pools de recursos do servidor.
- Criar um novo pool de recursos para processos externos.
- Criar uma função de classificação para identificar solicitações de script externas.
- Verificar se o novo pool de recursos externos está capturando trabalhos de R ou Python dos clientes ou contas especificados.
Verificar o status dos pools de recursos existentes
Use uma instrução como a exibida a seguir para verificar os recursos atribuídos ao pool padrão do servidor.
SELECT * FROM sys.resource_governor_resource_pools WHERE name = 'default'
Resultados de exemplo
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 padrão 0 100 0 100 100 0 0 Verifique os recursos atribuídos ao pool de recursos externo padrão.
SELECT * FROM sys.resource_governor_external_resource_pools WHERE name = 'default'
Resultados de exemplo
external_pool_id name max_cpu_percent max_memory_percent max_processes version 2 padrão 100 20 0 2 Sob essas configurações padrão do servidor, o runtime externo provavelmente terá recursos insuficientes para concluir a maioria das tarefas. Para melhorar os recursos, modifique o uso de recursos de servidor da seguinte maneira:
Reduzir a memória máxima do computador que pode ser usada pelo mecanismo de banco de dados.
Aumentar a memória máxima do computador que pode ser usada pelo processo externo.
Modificar o uso de recursos do servidor
No Management Studio, execute a seguinte instrução para limitar o uso de memória do SQL Server para 60% do valor na configuração de 'memória máxima do servidor'.
ALTER RESOURCE POOL "default" WITH (max_memory_percent = 60);
Execute a instrução a seguir para limitar o uso de memória por processos externos para 40% dos recursos totais do computador.
ALTER EXTERNAL RESOURCE POOL "default" WITH (max_memory_percent = 40);
Para aplicar essas alterações, você deve reconfigurar e reiniciar o Resource Governor da seguinte maneira:
ALTER RESOURCE GOVERNOR RECONFIGURE;
Observação
Essas são apenas configurações sugeridas para começar. Você deve avaliar suas tarefas de aprendizado de máquina em relação a outros processos do servidor para determinar o equilíbrio correto para seu ambiente e sua carga de trabalho.
Criar um pool de recursos externo definido pelo usuário
Todas as alterações na configuração de Resource Governor são impostas pelo servidor como um todo. As alterações afetam as cargas de trabalho que usam os pools padrão para o servidor, bem como as cargas de trabalho que usam os pools externos.
Para fornecer um controle mais refinado sobre quais cargas de trabalho devem ter precedência, você pode criar um pool de recursos externos definido pelo usuário. Defina uma função de classificação e a atribua ao pool de recursos externos. A palavra-chave EXTERNAL é nova.
Crie um pool de recursos externo definido pelo usuário. No exemplo a seguir, o pool é denominado ds_ep.
CREATE EXTERNAL RESOURCE POOL ds_ep WITH (max_memory_percent = 40);
Crie um grupo de carga de trabalho chamado
ds_wg
para usar em solicitações de sessão de gerenciamento. Para consultas SQL, você usará o pool padrão. Para todos as consultas de processos externos você usará o poolds_ep
.CREATE WORKLOAD GROUP ds_wg WITH (importance = medium) USING "default", EXTERNAL "ds_ep";
As solicitações são atribuídas ao grupo padrão sempre que a solicitação não pode ser classificada ou caso haja qualquer outra falha de classificação.
Para obter mais informações, confira Grupo de carga de trabalho do Resource Governor e CREATE WORKLOAD GROUP (Transact-SQL).
Criar uma função de classificação para aprendizado de máquina
Uma função de classificação examina as tarefas recebidas. Ela determina se a tarefa é do tipo que pode ser executada usando o pool de recursos atual. As tarefas que não atendem aos critérios da função de classificação são atribuídas de volta ao pool de recursos padrão do servidor.
Comece especificando que uma função de classificação deve ser usada pelo Resource Governor para determinar os pools de recursos. Você pode atribuir null como um espaço reservado para a função de classificação.
ALTER RESOURCE GOVERNOR WITH (classifier_function = NULL); ALTER RESOURCE GOVERNOR RECONFIGURE;
Para obter mais informações, confira ALTER RESOURCE GOVERNOR (Transact-SQL).
Na função de classificação para cada pool de recursos, defina o tipo de instruções ou solicitações de entrada que devem ser atribuídas ao pool de recursos.
Por exemplo, a função a seguir retornará o nome do esquema atribuído ao pool de recursos externo definido pelo usuário se o aplicativo que enviou a solicitação for 'Microsoft R Host', 'RStudio' ou 'Mashup'. Caso contrário, ela retornará o pool de recursos padrão.
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
Quando a função tiver sido criada, reconfigure o grupo de recursos para atribuir a nova função de classificação para o grupo de recursos externos que você definiu anteriormente.
ALTER RESOURCE GOVERNOR WITH (classifier_function = dbo.is_ds_apps); ALTER RESOURCE GOVERNOR RECONFIGURE; GO
Verificar os novos pools de recursos e a afinidade
Verifique a configuração de memória do servidor e a CPU de cada um dos grupos de carga de trabalho. Para verificar se as alterações de recurso de instância foram feitas, examine:
- o pool padrão para o servidor SQL Server
- o pool de recursos padrão para processos externos
- o pool definido pelo usuário para processos externos
Execute a seguinte instrução para exibir todos os grupos de carga de trabalho:
SELECT * FROM sys.resource_governor_workload_groups;
Resultados de exemplo
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 interno Médio 25 0 0 0 0 1 2 2 default Médio 25 0 0 0 0 2 2 256 ds_wg Médio 25 0 0 0 0 2 256 Use a nova exibição de catálogo, sys.resource_governor_external_resource_pools (Transact-SQL), para exibir todos os pools de recursos externos.
SELECT * FROM sys.resource_governor_external_resource_pools;
Resultados de exemplo
external_pool_id name max_cpu_percent max_memory_percent max_processes version 2 padrão 100 20 0 2 256 ds_ep 100 40 0 1 Para obter mais informações, confira Exibições de catálogo do Resource Governor (Transact-SQL).
Execute a instrução a seguir para retornar informações sobre os recursos do computador que são relacionados ao pool de recursos externos, se aplicável:
SELECT * FROM sys.resource_governor_external_resource_pool_affinity;
Nenhuma informação será exibida porque os grupos foram criados com uma afinidade AUTO. Para obter mais informações, confira sys.dm_resource_governor_resource_pool_affinity (Transact-SQL).
Próximas etapas
Para obter mais informações sobre o gerenciamento de recursos do servidor, confira:
- Resource Governor
- Exibições de gerenciamento dinâmico relacionadas ao Administrador de Recursos (Transact-SQL)
Para ter uma visão geral da governança de recursos para aprendizado de máquina, confira: