Treinar em um contêiner usando o Google Kubernetes Engine

Nesta página, mostramos como executar um job de treinamento em uma instância de Deep Learning Containers e executar essa imagem de contêiner em um cluster do Google Kubernetes Engine.

Antes de começar

Antes de começar, conclua as etapas a seguir.

  1. Conclua as etapas de configuração na seção "Primeiros passos" em Primeiros passos com um contêiner de aprendizado profundo local.

  2. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

    Saiba como ativar o faturamento

  3. Ative as APIs Google Kubernetes Engine, Compute Engine e Artifact Registry.

    Ative as APIs

Abrir a ferramenta de linha de comando

Siga este guia usando o Cloud Shell ou as ferramentas de linha de comando localmente. O Cloud Shell vem pré-instalado com as ferramentas de linha de comando gcloud, docker e kubectl usadas neste tutorial. Se você usa o Cloud Shell, não precisa instalar essas ferramentas de linha de comando na sua estação de trabalho.

Cloud Shell

Para usar o Cloud Shell, conclua as etapas a seguir.

  1. Acesse o Console do Google Cloud.

  2. Clique no botão Ativar o Cloud Shell no topo da janela do console.

    Console do Google Cloud Platform

    Uma sessão do Cloud Shell abre dentro de um novo frame na parte inferior do console e exibe um prompt de linha de comando.

    Sessão do Cloud Shell

Linha de comando local

Para usar a linha de comando local, siga as etapas a seguir.

  1. Instale a ferramenta de linha de comando Kubernetes usando a CLI gcloud. A ferramenta kubectl é usada para se comunicar com o Kubernetes, que é o sistema de orquestração de clusters de contêineres de aprendizado profundo:

    gcloud components install kubectl
    

    Quando você tiver concluído o artigo etapas, você instalou a Google Cloud CLI e Docker (em inglês).

Criar um cluster do GKE

Execute o seguinte comando para criar um cluster de dois nós no GKE chamado pytorch-training-cluster:

gcloud container clusters create pytorch-training-cluster \
    --num-nodes=2 \
    --zone=us-west1-b \
    --accelerator="type=nvidia-tesla-p100,count=1" \
    --machine-type="n1-highmem-2" \
    --scopes="gke-default,storage-rw"

Para mais informações sobre essas configurações, consulte a documentação sobre como criar clusters para executar contêineres.

A criação do cluster talvez leve vários minutos.

Como alternativa, em vez de criar um cluster, é possível usar um cluster atual no seu projeto do Google Cloud. Se você fizer isso, talvez seja necessário executar o seguinte comando para garantir que a ferramenta de linha de comando kubectl tenha as credenciais apropriadas para acessar seu cluster:

gcloud container clusters get-credentials YOUR_EXISTING_CLUSTER

Em seguida, instale os drivers do dispositivo da GPU NVIDIA.

Criar o Dockerfile

Há muitas maneiras de criar uma imagem de contêiner. Nestas etapas, você verá como criar um para executar um script Python chamado trainer.py.

Para ver uma lista de imagens de contêiner disponíveis:

gcloud container images list \
    --repository="us-docker.pkg.dev/deeplearning-platform-release/gcr.io"

Acesse Como escolher um contêiner para ajudar a selecionar o contêiner desejado.

O exemplo a seguir mostra como colocar um script Python chamado trainer.py em um tipo de contêiner de aprendizado profundo específico do PyTorch.

Para criar o dockerfile, grave os seguintes comandos em um arquivo chamado Dockerfile. Nesta etapa, presume-se que você tenha o código para treinar um modelo de machine learning em um diretório chamado model-training-code e que o principal módulo Python nesse diretório seja denominado trainer.py. Nesse cenário, o contêiner será removido quando o job for concluído. Dessa maneira, o script de treinamento precisa ser configurado para saída no Cloud Storage. Consulte um exemplo de um script que envia para Cloud Storage ou a saída para o armazenamento permanente.

FROM us-docker.pkg.dev/deeplearning-platform-release/gcr.io/pytorch-gpu
COPY model-training-code /train
CMD ["python", "/train/trainer.py"]

Criar e fazer upload da imagem do contêiner

Para criar e fazer upload da imagem do contêiner para o Artifact Registry, use os seguintes comandos:

export PROJECT_ID=$(gcloud config list project --format "value(core.project)")
export IMAGE_REPO_NAME=pytorch_custom_container
export IMAGE_TAG=$(date +%Y%m%d_%H%M%S)
export IMAGE_URI=us-docker.pkg.dev/$PROJECT_ID/$IMAGE_REPO_NAME:$IMAGE_TAG

docker build -f Dockerfile -t $IMAGE_URI ./

docker push $IMAGE_URI

Implantar aplicativo

Crie um arquivo chamado pod.yaml com o seguinte conteúdo, substituindo IMAGE_URI pelo URI da imagem.

apiVersion: v1
kind: Pod
metadata:
  name: gke-training-pod
spec:
  containers:
  - name: my-custom-container
    image: IMAGE_URI
    resources:
      limits:
        nvidia.com/gpu: 1

Use a ferramenta de linha de comando kubectl para executar o seguinte comando e implantar o aplicativo:

kubectl apply -f ./pod.yaml

Para rastrear o status do pod, execute o comando abaixo:

kubectl describe pod gke-training-pod