Neste documento, explicamos como configurar um job em lote com tarefas estreitamente acopladas que se comunicam entre si usando uma biblioteca de interface de envio de mensagens (MPI, na sigla em inglês).
Para jobs em lote, o acoplamento descreve as tarefas de interdependência. Isso influencia como você configura o número de tarefas que podem ser executadas em paralelo (em vez de sequencialmente) usando o campo parallelism
de um job.
As tarefas podem ser descritas usando os seguintes tipos de acoplamento:
- Tarefas acopladas com flexibilidade: tarefas que podem ser executadas de forma independente.
- Tarefas acopladas com precisão:tarefas que dependem umas das outras para serem executadas.
Outra opção é criar um job que use uma biblioteca MPI para permitir que tarefas altamente associadas se comuniquem entre si em diferentes instâncias de VM. Um caso de uso comum de MPI são cargas de trabalho de computação de alto desempenho (HPC) altamente associadas.
Antes de começar
- Se você nunca usou o Batch antes, analise os Primeiros passos com o Batch e ative o Batch preenchendo 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 de IAM:
-
Editor de job 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, por padrão, é a conta de serviço padrão do Compute Engine
Para mais informações sobre como conceder papéis, consulte Gerenciar o acesso.
Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.
-
Editor de job em lote (
- Se você especificar a rede para este job, verifique se ela tem uma regra de firewall que permita conexões entre as VMs do job. Saiba como Configurar regras de firewall da VPC para casos de uso comuns.
Criar e executar um job que usa MPI para tarefas altamente associadas
Nesta seção, você verá exemplos de como criar um job que possa usar a MPI. O job de exemplo tem três executáveis:
- A primeira execução é um script que prepara o job para a MPI desativando o multiencadeamento simultâneo e instalando a MPI da Intel.
- O segundo executável é um barrier runnable vazio (formatado como
{ "barrier": {} }
), que garante que todas as tarefas terminem de configurar a MPI antes de continuar para executáveis futuros. - O terceiro executável e todos os executáveis subsequentes estão disponíveis para a carga de trabalho do job.
É possível criar um job que use MPI para tarefas altamente associadas usando a CLI gcloud ou a API Batch.
gcloud
Para criar um job de script que use MPI para tarefas com acoplamento rígido usando a 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 executável para uma carga de trabalho que usa MPI.TASK_COUNT
: o número de tarefas para o job. O valor precisa ser um número inteiro entre1
e10000
. Para usar as bibliotecas MPI fornecidas pelo Batch, esse campo é obrigatório e precisa ser definido como2
ou superior.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 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 a comunicação sem senha entre as instâncias de VM em execução em um grupo de tarefas. Para usar as bibliotecas MPI fornecidas pelo Batch, este 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 job.JSON_CONFIGURATION_FILE
: o caminho de um arquivo JSON com os detalhes de configuração do job.
Opcionalmente, você pode melhorar o desempenho das bibliotecas MPI fornecidas pelo Batch fazendo o seguinte:
- Crie e execute um job usando um modelo de instância de VM e especifique um modelo de instância de VM compatível com HP nos recursos do job.
- Especifique o Cloud Logging como destino das informações de geração de registros do job nos recursos dele.
Por exemplo, para criar um job de script a partir de 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 de acoplamento rígido usando a API em lote, use o comando gcloud batch jobs submit
e especifique os campos 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.LOCATION
: o local do job.JOB_NAME
: o nome do job.SCRIPT
: o script executável para uma carga de trabalho que usa MPI.TASK_COUNT
: o número de tarefas para o job. O valor precisa ser um número inteiro entre1
e10000
. Para usar as bibliotecas MPI fornecidas pelo Batch, esse campo é obrigatório e precisa ser definido como2
ou superior.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 que lista 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 as bibliotecas MPI fornecidas pelo Batch, este campo precisa ser definido como verdadeiro.PERMISSIVE_SSH
: quando definido comotrue
, o Batch configura o SSH para permitir a comunicação sem senha entre as instâncias de VM em execução em um grupo de tarefas. Para usar as bibliotecas MPI fornecidas pelo Batch, esse campo precisa ser definido como verdadeiro.
Opcionalmente, você pode melhorar o desempenho das bibliotecas MPI fornecidas pelo Batch fazendo o seguinte:
- Crie e execute um job usando um modelo de instância de VM e especifique um modelo de instância de VM compatível com HP nos recursos do job.
- Especifique o Cloud Logging como destino das informações de geração de registros do job nos recursos dele.
Por exemplo, para criar um job de script a partir de um modelo de instância que use MPI e faça 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.
A seguir
- Para um exemplo mais detalhado de um job que usa MPI para tarefas estreitamente associadas, consulte Como executar o modelo de previsão e pesquisa meteorológica com o Batch.
- Se você tiver problemas para criar ou executar um job, consulte Solução de problemas.
- Visualizar jobs e tarefas.
- Saiba mais sobre as opções de criação de jobs.