Perguntas frequentes

Posso usar a TPU para inferência?

Sim, é possível usá-la para treinamento e inferência. Por exemplo, no tutorial do ResNet, você realiza avaliações periódicas durante o ciclo de treinamento. Para a disponibilização de modelos, há algumas ressalvas a serem observadas. O principal é que a pilha de software da TPU é otimizada atualmente para capacidade, e não latência. No momento, executar a inferência em um único lote de entrada e aguardar o resultado tem uma sobrecarga de pelo menos 10 ms, o que pode ser um problema na disponibilização de baixa latência.

Essa sobrecarga será reduzida consideravelmente nas próximas versões do TensorFlow.

Há alguma operação integrada do TensorFlow que não esteja disponível na TPU?

No momento, há uma pequena quantidade de operações integradas do TensorFlow que não estão disponíveis na TPU. Consulte o guia sobre as operações disponíveis do TensorFlow, que mostra detalhes das soluções alternativas atuais.

Como escrever uma operação personalizada para a TPU?

As operações do TensorFlow executadas na TPU são implementadas no HLO do XLA. Essa é uma linguagem para definir operações detalhadas de tensor por meio de um pequeno conjunto de funções básicas. O XLA está incluído na versão de código aberto do TensorFlow. Portanto, é tecnicamente possível escrever a operação no HLO. Você encontra a maioria das implementações existentes no diretório tf2xla. No entanto, isso possibilita apenas a execução de um conjunto limitado de operações de tensor na TPU, não código arbitrário em C++ ou Python. A maioria das operações de tensor comuns que você pode implementar no HLO já foi escrita. Uma versão futura do TensorFlow será compatível com a execução eficiente de operações padrão da CPU durante o treinamento/inferência da TPU.

Posso usar marcadores e dicionários de feed com uma TPU?

Esse padrão de uso está tecnicamente disponível na TPU, mas é altamente recomendável não usá-lo. Com ele, é utilizado apenas um núcleo de TPU, o que gera muita sobrecarga. Em vez disso, para criar um pipeline de treinamento, use a API TPUEstimator e a API Dataset. Confira o tutorial ResNet para ver um exemplo de como criar um ciclo de treinamento simples com TPUEstimator e Dataset.

Posso treinar um modelo de aprendizado por reforço (RL, na sigla em inglês) com uma TPU?

O aprendizado por reforço inclui uma ampla variedade de técnicas. No momento, algumas delas não são compatíveis com as abstrações de software nas TPUs. Certas configurações do aprendizado por reforço exigem a execução de um "ambiente de simulação" de caixa preta usando uma CPU como parte do ciclo de treinamento. Elas não conseguem acompanhar a TPU e geram ineficiências significativas. As versões futuras do TensorFlow incluirão abstrações para facilitar o aprendizado por reforço que "dispensa políticas".

Posso usar incorporações de palavras com uma TPU?

Sim, a TPU é compatível com tf.nn.embedding_lookup(), já que é apenas um wrapper em torno de tf.gather(), que tem uma implementação na TPU. No entanto, a TPU não é compatível com tf.nn.embedding_lookup_sparse(). O tensor da ID de entrada em tf.embedding_lookup() precisa ter uma forma estática durante o treinamento. Ou seja, o tamanho do lote e o comprimento da sequência precisam ser iguais em cada lote. Essa é uma restrição mais geral em todos os tensores ao usar a TPU.

Posso usar sequências de comprimento variável com uma TPU?

Há vários métodos para representar sequências de comprimento variável no TensorFlow, incluindo preenchimento, tf.while_loop(), dimensões do tensor inferidas e intervalos. Infelizmente, o mecanismo atual de execução da TPU é compatível apenas com um subconjunto deles. É necessário implementar sequências de comprimento variável usando concatenação de sequência, preenchimento, intervalos, tf.dynamic_rnn() ou tf.while_loop().

Posso treinar uma rede neural recorrente (RNN, na sigla em inglês) em uma TPU?

Em certas configurações, tf.static_rnn() e tf.dynamic_rnn() são compatíveis com o mecanismo atual de execução da TPU. De forma mais geral, a TPU é compatível com tf.while_loop() e TensorArray, que são usados para implementar tf.dynamic_rnn(). Kits de ferramentas especializados como o CuDNN não são compatíveis com a TPU porque contêm códigos específicos da GPU. Usar tf.while_loop() na TPU requer a especificação de um limite superior no número de iterações de ciclo para que o mecanismo de execução determine estaticamente o uso de memória.

Posso treinar uma rede adversária generativa (GAN, na sigla em inglês) com uma TPU?

Com as GANs, é frequente alternar entre treinar o gerador e treinar o discriminador. O mecanismo de execução atual da TPU é compatível apenas com um único gráfico de execução. A alternância entre os gráficos requer uma recompilação completa, que pode levar 30 segundos ou mais. Essa limitação será reduzida em uma versão futura do TensorFlow.

Uma possível solução alternativa é sempre calcular a soma das perdas do gerador e do discriminador, mas multiplicar essas perdas por dois tensores de entrada g_w e d_w. Nos lotes em que o gerador e o discriminador precisam ser treinados, você pode passar g_w=1.0 e d_w=0.0 vice-versa.

Posso treinar um modelo de aprendizado de várias tarefas com uma TPU?

Se for possível representar as tarefas como um gráfico grande com uma função de perda agregada, não será necessário suporte especial para o aprendizado de várias tarefas. No entanto, o mecanismo de execução da TPU é compatível atualmente apenas com um único gráfico de execução. Portanto, não é possível alternar rapidamente vários gráficos de execução que compartilhem variáveis, mas tenham estruturas diferentes. Alterar os gráficos de execução requer a repetição da etapa de compilação do gráfico, que pode levar 30 segundos ou mais.

A TPU é compatível com o modo adiantado?

Não, o modo adiantado usa um novo mecanismo de execução dinâmico. Já a TPU utiliza o XLA, que executa a compilação estática do gráfico de execução.

A TPU é compatível com o paralelismo de modelos?

O paralelismo de modelos é a execução de programas de TPU não idênticos em vários núcleos dentro de um único dispositivo de TPU. No momento, ele não é compatível com a TPU, mas será em uma versão futura do TensorFlow.

Como posso inspecionar o valor real dos tensores intermediários na TPU, como em tf.Print ou tfdbg?

No momento, esse recurso não é compatível com a TPU. O padrão sugerido para desenvolvimento na TPU é implementar o modelo usando o framework TPUEstimator. Ele possibilita a transição simples entre a TPU e a CPU/GPU com a sinalização use_tpu. Recomendamos que você depure os modelos na CPU/GPU usando as ferramentas padrão do TensorFlow. Em seguida, mude para a TPU quando o modelo estiver pronto para um treinamento em grande escala.

Meu esquema de treinamento é muito complexo ou especializado para a API TPUEstimator. Há uma API de nível mais baixo que eu possa usar?

TPUEstimator é o framework principal para o treinamento de TPU em uma Cloud TPU. No entanto, o TPUEstimator encapsula a API tpu, que é parte do TensorFlow de código aberto. Portanto, é tecnicamente possível (mas não compatível) usar diretamente a API básica tpu. Se o pipeline de treinamento exigir comunicação frequente entre a TPU e a CPU ou a alteração constante do gráfico de execução, o cálculo não será executado com eficiência na TPU. As próximas versões do TensorFlow vão aprimorar ambos os recursos.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…