Introdução ao Cloud TPU

As Unidades de Processamento de Tensor (TPUs) são específicas para aplicativos desenvolvidos pelo Google circuitos integrados (ASICs, na sigla em inglês) usados para acelerar as cargas de trabalho de machine learning. Para Para mais detalhes sobre o hardware de TPU, consulte Arquitetura do sistema. O Cloud TPU é um serviço da Web que disponibiliza TPUs como computação escalonável recursos no Google Cloud.

As TPUs treinam seus modelos com mais eficiência se usarem hardwares projetados para executar operações de matriz de grande escala, geralmente encontradas em algoritmos de machine learning. As TPUs têm memória de alta largura de banda on-chip (HBM), permitindo que você use modelos maiores tamanhos. As TPUs podem ser conectadas em grupos chamados pods, que escalonar verticalmente suas cargas de trabalho com pouca ou nenhuma alteração no código.

Como funciona?

Para entender como as TPUs funcionam, vale a pena entender como outros aceleradores lidam com os desafios computacionais do treinamento de modelos de ML.

Como funciona uma CPU

A CPU é um processador de uso geral baseado na arquitetura de von Neumann. Isso significa que uma CPU trabalha com software e memória, assim:

Ilustração de como funciona uma CPU

O maior benefício das CPUs é a flexibilidade delas. É possível carregar qualquer tipo de software em uma CPU para vários tipos diferentes de aplicativos. Por exemplo, é possível usar uma CPU para processar textos em um PC, controlar motores de foguetes, executar transações bancárias ou classificação de imagens com uma rede neural.

Uma CPU carrega valores da memória, realiza um cálculo com base nos valores e armazena o resultado de cada cálculo na memória. O acesso à memória está lento quando comparada à velocidade de cálculo, o que pode limitar a capacidade total de processamento das CPUs. Isso geralmente é chamado de gargalo de von Neumann.

Como funciona uma GPU

Para aumentar a capacidade de processamento, as GPUs contêm milhares de unidades lógicas aritméticas (ALUs, na sigla em inglês) em um único processador. Uma GPU moderna geralmente contém entre 2.500 e 5.000 ALUs. O grande número de processadores significa que é possível executar milhares de multiplicações e adições ao mesmo tempo.

Ilustração de como funciona uma GPU

Essa arquitetura de GPU funciona bem em aplicativos com enorme paralelismo, como a operação de matrizes em uma rede neural. Na verdade, em uma carga de trabalho de treinamento típica para aprendizado profundo, uma GPU fornece uma ordem de grandeza maior do que uma CPU.

Mas a GPU ainda é um processador de uso geral que precisa dar suporte a muitas aplicativos e softwares diferentes. Portanto, as GPUs têm o mesmo problema que e CPUs. Para cada cálculo nas milhares de ALUs, uma GPU precisa acessar registros ou memória compartilhada para ler e armazenar os resultados de cálculos intermediários.

Como funciona uma TPU

O Google projetou as Cloud TPUs como um processador de matriz especializado em cargas de trabalho de redes neurais. As TPUs não podem executar processadores de texto, controlar motores de foguetes nem executar transações bancárias, mas podem lidar com operações matriciais massivas usadas em processos e redes em alta velocidade.

A principal tarefa das TPUs é o processamento de matrizes, que é uma combinação de operações de multiplicação e acumulação. As TPUs contêm milhares de acumuladores de multiplicação que estão diretamente conectados entre si para formar uma matriz física grande. Isso é chamado de arquitetura de matriz sistólica. O Cloud TPU v3 contém duas matrizes sistólicas de ALUs de 128 x 128 em um único processador.

O host da TPU transmite os dados para uma fila de entrada. A TPU carrega dados da fila de alimentação e os armazena na memória HBM. Quando a computação é concluída, a TPU carrega os resultados na fila de saída. Em seguida, o host da TPU lê os resultados da fila de saída e os armazena na memória do host.

Para realizar as operações matriciais, a TPU carrega os parâmetros da memória HBM na unidade de multiplicação de matriz (MXU).

Ilustração de como uma TPU carrega parâmetros da memória

Em seguida, ela carrega dados da memória HBM. À medida que cada multiplicação é executada, o resultado é passado para o próximo multiplicador de acumulador. A saída é soma de todos os resultados de multiplicação entre os dados e os parâmetros. Não é necessário acessar a memória durante o processo de multiplicação de matrizes.

Ilustração de como uma TPU carrega dados da memória

Como resultado, as TPUs alcançam uma alta capacidade computacional em redes neurais cálculos.

Compilador XLA

O código executado em TPUs precisa ser compilado pela álgebra linear do acelerador (XLA). . O XLA é uma solução um compilador que pega o grafo emitido por um aplicativo de framework de ML e compila os componentes lineares de álgebra, perda e gradiente do grafo em Código de máquina da TPU. O restante do programa é executado na máquina host da TPU. O XLA faz parte da imagem da VM da TPU executada em uma máquina host da TPU.

Quando usar TPUs

Os Cloud TPUs são otimizados para cargas de trabalho específicas. Em algumas situações, é recomendável usar GPUs ou CPUs em instâncias do Compute Engine para executar cargas de trabalho de aprendizado de máquina. Em geral, é possível decidir qual hardware é melhor para sua carga de trabalho com base nas diretrizes a seguir:

CPUs

  • prototipagem rápida que requer flexibilidade máxima
  • Modelos simples que não demoram para ser treinados
  • modelos pequenos com tamanhos de lotes menores
  • modelos que contêm muitas operações personalizadas do TensorFlow escritos em C++
  • Modelos limitados por E/S disponível ou pela largura de banda de rede do sistema host

GPUs

  • modelos com um número significativo de operações personalizadas do TensorFlow/PyTorch/JAX que precisam ser executadas pelo menos parcialmente nas CPUs.
  • Modelos com operações do TensorFlow que não estão disponíveis no Cloud TPU Veja a lista de operações do TensorFlow disponíveis.
  • modelos de médio a grande porte com tamanhos de lote maiores

TPUs

  • modelos com preponderância de computações matriciais
  • modelos sem operações personalizadas do TensorFlow/PyTorch/JAX na instância principal loop de treinamento
  • modelos com treinamento de semanas ou meses
  • modelos grandes com tamanhos grandes de lote efetivo

Os Cloud TPUs não são adequados para as seguintes cargas de trabalho:

  • Programas de álgebra linear que exigem ramificações frequentes ou que contêm operações álgebra com elementos
  • Cargas de trabalho que acessam a memória de maneira esparsa
  • Cargas de trabalho que exigem aritmética de alta precisão
  • Cargas de trabalho de rede neural com operações personalizadas no loop de treinamento principal

Práticas recomendadas para o desenvolvimento de modelos

Um programa com computação dominada por operações não matriciais, como "add", "reshape" ou "concatenate", provavelmente não atingirá uma alta utilização de MXU. Confira a seguir algumas diretrizes para escolher e criar adequados para o Cloud TPU.

Layout

O compilador XLA executa transformações no código, incluindo a divisão do produto de matrizes em blocos menores para executar computações na MXU com mais eficiência. A estrutura do hardware MXU, um arquivo sistólico de matriz e o design das TPUs subsistema de memória, que prefere dimensões que são múltiplas de 8, são usados por o compilador XLA para eficiência do agrupamento. Por consequência, determinados layouts são mais propícios para a divisão em blocos, enquanto outros requerem a realização de remodelações antes da divisão. As operações de remodelação geralmente são limitadas pela memória no Cloud TPU.

Formas

O compilador XLA compila um gráfico de ML a tempo para o primeiro lote. Se houver e os próximos lotes têm formas diferentes, o modelo não funciona. (Recompilação do gráfico cada vez que a forma muda é muito lenta.) Portanto, qualquer modelo que que tem tensores com formas dinâmicas não é adequado para TPUs.

Preenchimento

Um programa do Cloud TPU de alto desempenho é aquele em que o denso podem ser divididas em blocos de 128 x 128. Quando uma computação de matriz não ocupa uma MXU inteira, o compilador preenche os tensores com zeros. O preenchimento apresenta duas desvantagens:

  • Os tensores preenchidos com zeros utilizam pouco o núcleo da TPU.
  • O preenchimento aumenta a quantidade de armazenamento em memória on-chip necessária para um tensor, o que pode resultar em erro de falta de memória em casos extremos.

O preenchimento é realizado automaticamente pelo compilador XLA quando necessário. No entanto, é possível determinar a quantidade de preenchimento por meio da ferramenta op_profile. Para evitar o preenchimento, escolha dimensões de tensor que sejam adequadas para as TPUs.

Dimensões

Escolher as dimensões de tensores adequadas ajuda muito para conseguir o máximo de desempenho do hardware da TPU, especialmente da MXU. O compilador XLA tenta usar o tamanho do lote ou uma dimensão de atributo para maximizar use a MXU. Portanto, um desses deve ser um múltiplo de 128. Caso contrário, o compilador preencherá um desses valores até chegar em 128. De preferência, o tamanho do lote e as dimensões da característica devem ser múltiplos de oito, permitindo, assim, conseguir um alto desempenho do subsistema de memória.

Integração do VPC Service Controls

O VPC Service Controls do Cloud TPU permite definir perímetros de segurança ao redor os recursos do Cloud TPU e controlar a movimentação de dados por todo o perímetro limite. Para saber mais sobre o VPC Service Controls, consulte a visão geral sobre ele. Para saber mais sobre as limitações de uso da Cloud TPU com os VPC Service Controls, consulte os produtos e limitações com suporte.

Edge TPU

Os modelos de machine learning treinados na nuvem precisam executar cada vez mais inferências no nível mais avançado, ou seja, em dispositivos que operam no limite da Internet das coisas (IoT). Esses dispositivos incluem sensores e outros dispositivos inteligentes que reúnem dados em tempo real, tomam decisões inteligentes e, em seguida, realizam ações ou comunicam informações a outros dispositivos ou à nuvem.

Como esses dispositivos precisam funcionar com energia limitada, o Google desenvolveu o coprocessador Edge TPU para acelerar a inferência de ML em dispositivos de baixa potência. Um Edge TPU individual pode executar quatro trilhões de operações por segundo (4 TOPS) usando apenas 2 watts de energia. Em outras palavras, você recebe 2 TOPS por watt. Por exemplo, o Edge TPU pode executar modelos de última geração para dispositivos móveis, como o MobileNet V2, em quase 400 frames por segundo e com eficiência de consumo de energia.

Esses aceleradores de ML de baixo consumo ampliam a Cloud TPU e Cloud IoT para fornecem uma infraestrutura completa (da nuvem ao perímetro, hardware + software) que facilita as soluções baseadas em IA.

O Edge TPU está disponível para dispositivos de prototipagem e produção em vários formatos, incluindo um computador de placa única, um sistema em módulo, uma placa PCIe/M.2 e um módulo para superfície. Para mais informações sobre o Edge TPU e todos os produtos disponíveis, visite coral.ai.

Primeiros passos com o Cloud TPU

Pedir ajuda

Entre em contato com o suporte do Cloud TPU. Se você tiver um projeto ativo do Google Cloud, prepare-se para fornecer as seguintes informações:

  • ID do seu projeto do Google Cloud
  • O nome da TPU, se houver
  • Outras informações que você quer fornecer

A seguir

Quer saber mais sobre o Cloud TPU? Os recursos a seguir podem ajudar: