Este documento explica como configurar uma tarefa em lote com tarefas estreitamente associadas que comunicam entre si em diferentes VMs através de uma biblioteca Message Passing Interface (MPI).
Para tarefas em lote, a associação descreve as tarefas de interdependência. Isto influencia a forma como configura o número de tarefas que podem ser executadas em paralelo (em vez de sequencialmente) através do campo parallelism
de uma tarefa.
As tarefas podem ser descritas através dos seguintes tipos de associação:
- Tarefas pouco acopladas: tarefas que podem ser executadas de forma independente.
- Tarefas fortemente interligadas: tarefas que dependem umas das outras para serem executadas.
Opcionalmente, pode criar uma tarefa que use uma biblioteca MPI para permitir que as tarefas fortemente acopladas comuniquem entre si em diferentes instâncias de VMs. Um exemplo de utilização comum do MPI são as cargas de trabalho de computação de alto desempenho (HPC) fortemente acopladas.
Antes de começar
- Se nunca usou o Batch, reveja o artigo Comece a usar o Batch e ative o Batch concluindo os pré-requisitos para projetos e utilizadores.
-
Para receber as autorizações de que precisa para criar uma tarefa, peça ao seu administrador para lhe conceder as seguintes funções de IAM:
-
Editor de tarefas em lote (
roles/batch.jobsEditor
) no projeto -
Utilizador da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço da tarefa, que, por predefinição, é a conta de serviço predefinida do Compute Engine
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
-
Editor de tarefas em lote (
- Se especificar a rede para esta tarefa, certifique-se de que a rede tem uma regra de firewall que permite ligações entre as VMs da tarefa. Saiba como configurar regras de firewall de VPC para exemplos de utilização comuns.
Crie e execute uma tarefa que use MPI para tarefas fortemente acopladas
Esta secção fornece exemplos de como criar uma tarefa que pode usar a MPI. Em particular, a tarefa de exemplo tem 3 executáveis:
- O primeiro executável é um script que prepara a tarefa para a MPI através da desativação da multithreading simultânea e da instalação da Intel MPI.
- O segundo executável é um executável de barreira vazio (formatado como
{ "barrier": {} }
), que garante que todas as tarefas terminam de configurar a MPI antes de continuar para executáveis futuros. - O terceiro executável (e todos os executáveis subsequentes) está disponível para a carga de trabalho da tarefa.
Pode criar uma tarefa que use a MPI para tarefas fortemente acopladas através da CLI gcloud ou da API Batch.
gcloud
Para criar uma tarefa de script que use MPI para tarefas fortemente acopladas através da CLI gcloud, faça o seguinte:
Crie um ficheiro 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 o seguinte:
SCRIPT
: um script executável para uma carga de trabalho que usa MPI.TASK_COUNT
: o número de tarefas para o trabalho. O valor tem de ser um número inteiro entre1
e o limite de tarefas por grupo de tarefas. Para usar as bibliotecas MPI fornecidas pelo Batch, este campo é obrigatório e tem de ser definido como2
ou superior.TASK_COUNT_PER_NODE
: o número de tarefas que um trabalho pode executar em simultâneo numa instância de VM. Para usar as bibliotecas MPI fornecidas pelo Batch, este campo é obrigatório e tem de ser definido como1
, o que equivale a executar uma instância de VM por tarefa.REQUIRE_HOSTS_FILE
: quando definida comotrue
, a tarefa cria uma lista de ficheiros com as instâncias de VM em execução num grupo de tarefas. O caminho do ficheiro está armazenado na variável de ambienteBATCH_HOSTS_FILE
. Para usar as bibliotecas MPI fornecidas pelo Batch, este campo tem de ser definido como verdadeiro.PERMISSIVE_SSH
: quando definido comotrue
, o Batch configura o SSH para permitir a comunicação sem palavra-passe entre as instâncias de VM em execução num grupo de tarefas. Para usar as bibliotecas MPI fornecidas pelo Batch, este campo tem de ser definido como verdadeiro.
Para criar a tarefa, use o comando
gcloud batch jobs submit
.gcloud batch jobs submit JOB_NAME \ --location LOCATION \ --config JSON_CONFIGURATION_FILE
Substitua o seguinte:
JOB_NAME
: o nome da tarefa.LOCATION
: a localização do trabalho.JSON_CONFIGURATION_FILE
: o caminho para um ficheiro JSON com os detalhes de configuração da tarefa.
Opcionalmente, pode aumentar o desempenho das bibliotecas da MPI fornecidas pelo Batch fazendo o seguinte:
- Crie e execute uma tarefa com um modelo de instância de VM e especifique um modelo de instância de VM pronto para HPC nos recursos da tarefa.
- Especifique o Cloud Logging como o destino das informações de registo do seu trabalho nos recursos do trabalho.
Por exemplo, para criar uma tarefa de script a partir de um modelo de instância que usa MPI e faz com que 1 tarefa produza o nome do anfitrião das 3 tarefas no grupo de tarefas:
Crie um ficheiro JSON no diretório atual com o nome
example-job-uses-mpi.json
e 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 o seguinte comando:
gcloud batch jobs submit example-template-job-uses-mpi \ --location us-central1 \ --config example-job-uses-mpi.json
API
Para criar uma tarefa de script que use uma MPI para tarefas fortemente acopladas através da API Batch, use o método jobs.create
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 o seguinte:
PROJECT_ID
: o ID do projeto do seu projeto.LOCATION
: a localização do trabalho.JOB_NAME
: o nome da tarefa.SCRIPT
: o script executável para uma carga de trabalho que usa MPI.TASK_COUNT
: o número de tarefas para o trabalho. O valor tem de ser um número inteiro entre1
e o limite de tarefas por grupo de tarefas. Para usar as bibliotecas MPI fornecidas pelo Batch, este campo é obrigatório e tem de ser definido como2
ou superior.TASK_COUNT_PER_NODE
: o número de tarefas que um trabalho pode executar em simultâneo numa instância de VM. Para usar as bibliotecas MPI fornecidas pelo Batch, este campo é obrigatório e tem de ser definido como1
, o que equivale a executar uma instância de VM por tarefa.REQUIRE_HOSTS_FILE
: quando definido comotrue
, a tarefa cria uma lista de ficheiros com as instâncias de VM em execução num grupo de tarefas. O caminho do ficheiro está armazenado na variável de ambienteBATCH_HOSTS_FILE
. Para usar as bibliotecas MPI fornecidas pelo Batch, este campo tem de ser definido como verdadeiro.PERMISSIVE_SSH
: quando definido comotrue
, o Batch configura o SSH para permitir a comunicação sem palavra-passe entre as instâncias de VM em execução num grupo de tarefas. Para usar as bibliotecas MPI fornecidas pelo Batch, este campo tem de estar definido como verdadeiro.
Opcionalmente, pode aumentar o desempenho das bibliotecas da MPI fornecidas pelo Batch fazendo o seguinte:
- Crie e execute uma tarefa com um modelo de instância de VM e especifique um modelo de instância de VM pronto para HPC nos recursos da tarefa.
- Especifique o Cloud Logging como o destino das informações de registo do seu trabalho nos recursos do trabalho.
Por exemplo, para criar uma tarefa de script a partir de um modelo de instância que usa MPI e faz com que 1 tarefa produza o nome do anfitrião das 3 tarefas no grupo de tarefas, use o seguinte pedido:
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"
}
}
onde PROJECT_ID
é o
ID do projeto
do seu projeto.
O que se segue?
- Para ver um exemplo mais detalhado de uma tarefa que usa MPI para tarefas fortemente acopladas, consulte o artigo Executar o modelo de investigação e previsão meteorológica com o Batch.
- Saiba como reduzir a latência para trabalhos com tarefas fortemente interligadas.
- Se tiver problemas ao criar ou executar uma tarefa, consulte a secção Resolução de problemas.
- Ver empregos e tarefas.
- Saiba mais sobre as opções de criação de tarefas.