Perguntas frequentes

Posso usar um Compute Engine para inferência? É possível fazer a inferência em um modelo treinado no Compute Engine por meio do modo Predict no TPUEstimator. Veja Método Predict no TPUEstimator.

Há operações integradas do TensorFlow que não estão disponíveis no Compute Engine?

Há algumas operações integradas do TensorFlow que não estão disponíveis no Compute Engine no momento. Veja Operações disponíveis do TensorFlow, que detalha as alternativas atuais.

Como gravar uma operação personalizada para o Compute Engine?

As operações do TensorFlow executadas no Compute Engine são implementadas no XLA HLO. Essa é uma linguagem para definir operações de tensor de alto nível 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, por isso é tecnicamente possível gravar a operação em HLO. A maioria das implementações atuais pode ser encontrada no diretório tf2xla (link em inglês).

O XLA só permite a execução de um conjunto limitado de operações do tensor na TPU, não código C++ ou Python arbitrário. As operações de tensor mais comuns que podem ser implementadas no HLO já foram gravadas.

Posso usar marcadores de posição e dicionários de feed com o Compute Engine?

Tecnicamente, esse padrão de uso está disponível no Compute Engine. No entanto, é altamente recomendável não usá-lo. O uso de marcadores de posição e dicionários de feed limita o acesso a um único núcleo do Compute Engine e gera muita sobrecarga.

Em vez disso, para criar um pipeline de treinamento, use a API TPUEstimator e a API Dataset. O tutorial do ResNet fornece um exemplo de como criar um loop de treinamento simples com TPUEstimator e Dataset.

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

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 loop de treinamento. Descobrimos que elas não acompanham o Compute Engine e resultam em ineficiências significativas.

Posso usar incorporações de palavras com um Compute Engine?

Sim, o Compute Engine é compatível com tf.nn.embedding_lookup() já que é apenas um wrapper de tf.gather(), que tem uma implementação no Compute Engine. No entanto, o Compute Engine não é compatível com tf.nn.embedding_lookup_sparse(). Observe que o tensor de ID de entrada para tf.embedding_lookup() precisa ter uma forma estática durante o treinamento, isto é, o tamanho do lote e da sequência precisam ser os mesmos para cada lote. Essa é uma restrição mais geral a todos os tensores ao usar o Compute Engine.

Posso usar sequências de tamanho variável com o Compute Engine?

Há vários métodos para representar sequências de tamanho variável no TensorFlow, incluindo preenchimento, tf.while_loop(), dimensões do tensor inferidas e agrupamento por classes. Infelizmente, o mecanismo de execução atual do Compute Engine é compatível com um subconjunto deles. As sequências de tamanho variável precisam ser implementadas usando tf.while_loop(), tf.dynamic_rnn(), agrupamento por classes, preenchimento ou concatenação de sequência.

Posso treinar uma rede neural repetitiva (RNN, na sigla em inglês) no Compute Engine?

Em algumas configurações, tf.static_rnn() e tf.dynamic_rnn() são compatíveis com o mecanismo de execução da TPU atual. Em geral, a TPU é compatível com tf.while_loop() e TensorArray, 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 loop para que o mecanismo de execução da TPU determine estaticamente o uso da memória.

Posso treinar uma rede adversária geradora (GAN, na sigla em inglês) com o Compute Engine?

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.

Uma alternativa possível é sempre calcular a soma das perdas tanto para a geração quanto para o discriminador, mas multiplicá-las por dois tensores de entrada g_w e d_w. Em lotes em que o gerador precisa ser treinado, é possível transmitir g_w=1.0 e d_w=0.0 e vice-versa para lotes em que o discriminador precisa ser treinado.

Posso treinar um modelo de aprendizado de várias tarefas com o Compute Engine?

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.

O Compute Engine oferece suporte ao modo antecipado?

Não. O modo antecipado usa um novo mecanismo de execução dinâmica, enquanto o Compute Engine usa XLA, que realiza a compilação estática do gráfico de execução.

O Compute Engine oferece suporte ao paralelismo de modelo?

No momento, não há suporte ao paralelismo de modelo (ou à execução de programas não idênticos nos diversos núcleos em um único dispositivo do Compute Engine).

Como posso inspecionar o valor real dos tensores intermediários no Compute Engine, como com tf.Print ou tfdbg?

No momento, o Compute Engine não oferece suporte para esse recurso. Para desenvolver no Compute Engine, sugerimos implementar um modelo que use o framework TPUEstimator, que permite uma transição tranquila entre a TPU e a CPU/GPU (sinalização use_tpu). Recomenda-se depurar os modelos na CPU/GPU usando as ferramentas padrão do TensorFlow e, em seguida, alternar para o Compute Engine quando o modelo estiver pronto para um treinamento em grande escala.

Meu esquema de treinamento é muito complexo ou especializado para a API TPUEstimator. Existe uma API básica que eu possa usar?

TPUEstimator é o principal framework de treinamento da Cloud TPU. No entanto, TPUEstimator encapsula a API tpu, que é parte do TensorFlow de código aberto. Por isso, é tecnicamente possível (mas não compatível) usar a API básica tpu diretamente. Se o pipeline de treinamento exigir comunicação frequente entre o Compute Engine e a CPU ou exigir alterações frequentes no gráfico de execução, o cálculo não poderá ser executado com eficiência no Compute Engine.

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

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.