Como processar imagens grandes com o Cloud TPU
Este documento abrange o uso do particionamento de espaço com Cloud TPUs e TPUEstimator para possibilitar o treinamento para imagens e vídeos muito grandes.
O recurso de particionamento de espaço do Cloud TPU permite dividir uma imagem através de vários chips TPU. O recurso de particionamento de espaço permite que você escalone modelos para serem executados com imagens de entrada grandes demais para caber na memória disponível em um único núcleo de um chip acelerador.
Esse recurso distribui ativações em vários núcleos de TPU, permitindo que você escalone seu modelo para usar 2, 4, 8 ou até 16 núcleos para treinamento. O escalonamento do número de processadores disponíveis para treinamento elimina a necessidade de reduzir a resolução dos dados da imagem, o que proporciona maior precisão e desempenho de treinamento mais eficiente.
É possível aplicar o particionamento de espaço a tarefas como:
- Segmentação de imagens 3D de tomografia computadorizada
- análise de conteúdo em vídeo
- detecção de objetos para executar autonomamente sem diminuir a resolução dos dados de imagem.
Como ativar o particionamento de espaço com a TPUEstimator
O compilador otimizador de XLA para Tensorflow gerencia automaticamente as comunicações entre todos os núcleos do Cloud TPU. Não é necessária nenhuma alteração no código para ativar o particionamento de espaço em um modelo. Só é necessário configurar como particionar cada tensor de entrada na TPUConfig, já que a TPUEstimator é compatível com a API de particionamento de espaço.
Exemplo
O código a seguir mostra um exemplo de TPUConfig de particionamento de espaço em quatro níveis para um modelo de classificação de imagem. O tensor é dividido em quatro partes ao longo da dimensão de altura, supondo que o tensor tenha a forma (lote, altura, largura, canal).
tpu_config=tpu_config.TPUConfig( iterations_per_loop=100, num_cores_per_replica=4, per_host_input_for_training=tpu_config.InputPipelineConfig.PER_HOST_V2, input_partition_dims=[[1, 4, 1, 1], None]]
Para o particionamento de espaço, o pipeline de entrada precisa estar no formato tf.data
e o valor per_host_input_for_training
value (train_batch_size
) precisa estar configurado para PER_HOST_V2
. O num_cores_per_replica
especificado determina o número máximo de partições em que é possível dividir uma imagem.
Os valores de input_partition_dims
fornecem uma lista com dois elementos: feature_partition_dims
e label_partition_dims
, que descrevem como particionar os tensores de entrada. A estrutura de feature_partition_dims
e label_partition_dims
precisa corresponder à estrutura de recursos e rótulos de input_fn
. Especifique "none" para a partição de rótulo para que os rótulos não sejam divididos.
Como executar modelos de referência com particionamento de espaço
Detecção de objetos em 2D
O RetinaNet é um modelo de detecção de objetos que localiza objetos em imagens com uma caixa delimitadora e classifica os objetos identificados. Treinar o modelo com imagens muito grandes é um desafio, porque a maior resolução que cabe em um único núcleo do Cloud TPU (com lote de 8 por dispositivo) é 1280 x 1280. É possível treinar imagens quatro vezes maiores, particionando espacialmente o modelo em oito núcleos de TPU, como mostrado.
Tamanho da imagem | Tipo de TPU | Núcleos de TPU | Tamanho global do lote | Tempo de duração |
---|---|---|---|---|
1280x1280 | v3-8 | 8 | 64 | 910 ms |
2560x2560 | v3-64 | 64 | 64 | 822 ms |
Segmentação de imagens em 3D
3D UNet é um modelo conhecido de segmentação 3D densa que tem sido usado na área médica. A resolução original de uma imagem de tomografia computadorizada pode chegar a 256x256x256, o que não cabe em um único núcleo TPU. Por isso, os pesquisadores geralmente precisam diminuir a escala das imagens. É possível encaixar imagens com a resolução original usando o particionamento de espaço em 16 níveis da TPU.
Tamanho da imagem | Tipo de TPU | Núcleos de TPU | Tamanho global do lote | Tempo de duração |
---|---|---|---|---|
128x128x128 | v3-8 | 8 | 32 | 3.428s |
2560x2560 | v3-64 | 64 | 32 | 3.02s |
Outros recursos
- Guia de particionamento de espaço: mais instruções sobre como configurar o particionamento de espaço.
- Como usar a API Systrace na Cloud TPU