Este documento explica como configurar um job em lote com Tarefas com acoplamento rígido que se comunicam entre si em diferentes VMs usando uma interface de passagem de mensagens (MPI, na sigla em inglês). biblioteca.
Para jobs em lote, o
acoplamento
descreve as tarefas de interdependência. Isso influencia a forma como você configura o número
de tarefas que podem ser executadas em paralelo (em vez de sequencialmente) usando o
parallelism
de um job.
As tarefas podem ser descritas usando os seguintes tipos de acoplamento:
- Tarefas com acoplamento flexível:tarefas que podem ser executadas de forma independente.
- Tarefas rigidamente acopladas: tarefas que dependem umas das outras para serem executadas.
Opcionalmente, é possível criar um job que use uma biblioteca MPI para permitir que tarefas acopladas se comuniquem entre diferentes instâncias de VM. Um caso de uso comum para MPI é a computação de alto desempenho (HPC) acoplada.
Antes de começar
- Se você nunca usou o Batch, consulte Começar a usar o Batch e ative o Batch concluindo os pré-requisitos para projetos e usuários.
-
Para receber as permissões necessárias para criar um job, peça ao administrador para conceder a você os seguintes papéis do IAM:
-
Editor de jobs em lote (
roles/batch.jobsEditor
) no projeto -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço do job, que é a conta de serviço padrão do Compute Engine
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
-
Editor de jobs em lote (
- Se você especificar a rede para essa atividade, verifique se ela tem uma regra de firewall que permita conexões entre as VMs da atividade. Saiba como configurar regras de firewall da VPC para casos de uso comuns.
Criar e executar um job que usa MPI para tarefas acopladas
Esta seção fornece exemplos de como criar um job que pode usar MPI. O job de exemplo tem três executáveis:
- O primeiro executável é um script que prepara o job para MPI desativando a multissegmentação simultânea e instalando a MPI da Intel.
- O segundo executável é um
executável de barreira
vazio (formatado como
{ "barrier": {} }
), que garante que todas as tarefas terminem a configuração do MPI antes de continuar para futuros executáveis. - O terceiro executável (e todos os executáveis subsequentes) está disponível para a carga de trabalho do job.
É possível criar um job que usa MPI para tarefas acopladas usando a CLI gcloud ou a API Batch.
gcloud
Para criar um job de script que use MPI em tarefas com acoplamento rígido usando o CLI gcloud, faça o seguinte:
Crie um arquivo de configuração JSON com o seguinte conteúdo:
{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "google_mpi_tuning --nosmt; google_install_mpi --intel_mpi;" } }, { "barrier": {} }, { "script": { SCRIPT } } ] }, "taskCount": TASK_COUNT, "taskCountPerNode": TASK_COUNT_PER_NODE, "requireHostsFile": REQUIRE_HOSTS_FILE, "permissiveSsh": PERMISSIVE_SSH } ] }
Substitua:
SCRIPT
: um script pode ser executado em cargas de trabalho que usam MPI.TASK_COUNT
: o número de tarefas do job. O valor precisa ser um número inteiro entre1
e o limite de tarefas por grupo de tarefas. Para usar as bibliotecas MPI fornecidas pelo Batch, esse campo é obrigatório e precisa ser definido como2
ou mais recente.TASK_COUNT_PER_NODE
: o número de tarefas que um job pode ser executado simultaneamente em uma instância de VM. Para usar as bibliotecas MPI fornecidas pelo Batch, esse campo é obrigatório e precisa ser definido como1
, o que equivale a executar uma instância de VM por tarefa.REQUIRE_HOSTS_FILE
: quando definido comotrue
, o job cria um arquivo que lista as instâncias de VM em execução em um grupo de tarefas. O O caminho do arquivo fica armazenado na variável de ambienteBATCH_HOSTS_FILE
. Para usar as bibliotecas MPI fornecidas pelo Batch, esse campo precisa ser definido como verdadeiro.PERMISSIVE_SSH
: quando definido comotrue
, O Batch configura o SSH para permitir comunicação entre as instâncias de VM em execução em um grupo de tarefas. Para usar as bibliotecas MPI fornecidas pelo lote, esse campo precisa ser definido como verdadeiro.
Para criar o job, use o comando
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua:
JOB_NAME
: o nome do job.LOCATION
: o local do trabalho.JSON_CONFIGURATION_FILE
: o caminho para um arquivo JSON com os detalhes de configuração do job.
Opcionalmente, é possível aumentar o desempenho das bibliotecas MPI fornecidas pelo lote fazendo o seguinte:
- Criar e executar um job usando um modelo de instância de VM e especificar um modelo de instância de VM pronto para HPC nos recursos do seu job.
- Especifique o Cloud Logging como o destino das informações de registro do job nos recursos dele.
Por exemplo, para criar um job de script usando um modelo de instância que usa MPI e faz com que uma tarefa gere o nome do host das três tarefas no grupo de tarefas:
Crie um arquivo JSON no diretório atual chamado
example-job-uses-mpi.json
com o seguinte conteúdo:{ "taskGroups": [ { "taskSpec": { "runnables": [ { "script": { "text": "google_mpi_tuning --nosmt; google_install_mpi --intel_mpi;" } }, { "barrier": {} }, { "script": { "text": "if [ $BATCH_TASK_INDEX = 0 ]; then mpirun -hostfile $BATCH_HOSTS_FILE -np 3 hostname; fi" } }, { "barrier": {} } ] }, "taskCount": 3, "taskCountPerNode": 1, "requireHostsFile": true, "permissiveSsh": true } ], "allocationPolicy": { "instances": [ { "instanceTemplate": "example-template-job-uses-mpi" } ] }, "logsPolicy": { "destination": "CLOUD_LOGGING" } }
Execute este comando:
gcloud batch jobs submit example-template-job-uses-mpi \ --location us-central1 \ --config example-job-uses-mpi.json
API
Para criar um job de script que use uma MPI para tarefas com acoplamento rígido usando
a API Batch, use o
Método jobs.create
e especificar permissiveSsh
, requireHostsFile
, taskCount
e
taskCountPerNode
.
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_ID
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "google_mpi_tuning --nosmt; google_install_mpi --intel_mpi;"
}
},
{ "barrier": {} },
{
"script": {
SCRIPT
}
}
]
},
"taskCount": TASK_COUNT,
"taskCountPerNode": TASK_COUNT_PER_NODE,
"requireHostsFile": REQUIRE_HOSTS_FILE,
"permissiveSsh": PERMISSIVE_SSH
}
]
}
Substitua:
PROJECT_ID
: o ID do projeto do seu projeto.LOCATION
: o local do trabalho.JOB_NAME
: o nome do job.SCRIPT
: o script pode ser executado em cargas de trabalho que usam MPI.TASK_COUNT
: o número de tarefas do job. O o valor precisa ser um número inteiro entre1
e o limite de tarefas por grupo de tarefas. Para usar as bibliotecas MPI fornecidas pelo Batch, esse campo é obrigatório e precisa ser definido como2
ou mais recente.TASK_COUNT_PER_NODE
: o número de tarefas que um job pode executar simultaneamente em uma instância de VM. Para usar as bibliotecas MPI fornecidas pelo Batch, esse campo é obrigatório e precisa ser definido como1
, o que equivale a executar uma instância de VM por tarefa.REQUIRE_HOSTS_FILE
: quando definido comotrue
, o job cria um arquivo listando as instâncias de VM em execução em um grupo de tarefas. O caminho do arquivo é armazenado na variável de ambienteBATCH_HOSTS_FILE
. Para usar o Bibliotecas MPI fornecidas pelo Batch. Este campo precisa ser definido como verdadeiro.PERMISSIVE_SSH
: quando definido comotrue
, o lote configura o SSH para permitir a comunicação sem senha entre as instâncias de VM executadas em um grupo de tarefas. Para usar as bibliotecas MPI fornecido pelo Batch, esse campo precisa ser definido como verdadeiro.
Como opção, você pode aumentar o desempenho das bibliotecas MPI fornecidas. por lote, fazendo o seguinte:
- Criar e executar um job usando um modelo de instância de VM e especificar um modelo de instância de VM pronto para HPC nos recursos do seu job.
- Especifique o Cloud Logging como destino para as informações de registro do job nos recursos dele.
Por exemplo, para criar um job de script em um modelo de instância que usa MPI e faz com que uma tarefa gere o nome do host das três tarefas no grupo de tarefas, use a seguinte solicitação:
POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/jobs?job_id=example-template-job-uses-mpi
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"script": {
"text": "google_mpi_tuning --nosmt; google_install_mpi --intel_mpi;"
}
},
{ "barrier": {} },
{
"script": {
"text":
"if [ $BATCH_TASK_INDEX = 0 ]; then
mpirun -hostfile $BATCH_HOSTS_FILE -np 3 hostname;
fi"
}
},
{ "barrier": {} }
]
},
"taskCount": 3,
"taskCountPerNode": 1,
"requireHostsFile": true,
"permissiveSsh": true
}
],
"allocationPolicy": {
"instances": [
{
"instanceTemplate": "example-template-job-uses-mpi"
}
]
},
"logsPolicy": {
"destination": "CLOUD_LOGGING"
}
}
em que PROJECT_ID
é o
ID do projeto
do seu projeto.
A seguir
- Para um exemplo mais detalhado de um trabalho que usa MPI para tarefas com acoplamento rígido, consulte Como executar o modelo de pesquisa e previsão do tempo com lote.
- Saiba como reduzir a latência de jobs com tarefas com acoplamento rígido.
- Se você tiver problemas para criar ou executar um job, consulte Solução de problemas.
- Ver tarefas e tarefas.
- Saiba mais sobre opções de criação de jobs.