Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Tensorflow poliglota: integrando Go e Python
Vitor De Mario
2
Deep learning
- Big data- GPUs- ImageNet- Redes neurais
convolucionais- TensorFlow
3
Deep learning - GPUs
4
- Biblioteca para criação de modelos de machine learning
- Redes neurais em primeiro lugar
- Desenvolvido pelo Google
- Open source desde novembro de 2015
5
- API principal em Python
- C/C++ por trás
- Outras APIs: Go, JavaScript, C++, Swift, Java
- Release 2.0 em preview: foco em facilitar o uso inspirado
pelo Keras
6
TensorFlow na NeuralMed
- Transfer learning
- retrain.py
- SavedModelBuilder
- Primeiro treinamento: imagens normais vs anormais
- Resultados ruins
- Scores altos indicam exames muito alterados
7
TensorFlow na NeuralMed
8
SDK do TensorFlow em Go
- Onde entra Go nessa história?
- Suportado oficialmente (em tese)
- Understanding Tensorflow using Go - Paolo Galeone, 2017
9
SDK do TensorFlow em Go
10
SDK do TensorFlow em Go
11
SDK do TensorFlow em Go
12
- Carrega o SavedModel do disco
- Carrega a imagem do disco
- Transforma a imagem em um tensor
- Roda a imagem através do modelo usando uma session
- Extrai a matriz com resultados
- Mapeia scores em float32 vs labels
SDK do TensorFlow em Go
13
Problemas com o SDK em Go
- Evolução para Keras, modelos melhores e mais complexos;
resultados não batem mais com a validação
14
TensorFlow Serving
- Sistema de inferência para modelos prontos
- Servables, Loaders, Sources, Managers, Core
- Suporta REST e gRPC (sem docs, somente github)
- Servidor em C++
- Difícil de usar
15
Inferência em Python com Keras
- Modelos criados com Keras
- Mesmo código da criação dos modelos
- Simplicidade16
Inferência em Python com Keras
17
Validação dos resultados
- Resultados começam a bater no código de inferência com
o código de validação pós treinamento
18
Como integrar Go e Python
- Dois sistemas separados exigem algum tipo de
comunicação
- Com a inferência em Python não é mais possível só
chamar um método na aplicação Go
- Remote Procedure Call
19
RPC
- Java RMI- SOAP- CORBA- protobuf- gRPC- Message passing
20
- Primeira tentativa foi criar uma API que fizesse a inferência
em tempo real
- Modelos carregados apenas uma vez
- Problemas com multithreading entre Flask e TensorFlow
Comunicação síncrona: HTTP com Flask
21
Comunicação síncrona: HTTP com Flask
22
Comunicação síncrona: HTTP com Flask
- Me aproveito do Flask para dar nome ao projeto: Estus
- Tempos de resposta altos, precisamos de outra solução
23
- Mesmo dado que era passado via HTTP agora é colocado
em uma fila do RabbitMQ
- Estus consome a fila, faz a inferência e devolve os
resultados em outra fila
Comunicação assíncrona: RabbitMQ
24
Comunicação assíncrona: RabbitMQ
- Go consome os resultados e associa ao metadado do
exame processado anteriormente
- Separação entre processamento dos exames e inferência
em Python
- Outros sistemas de fila considerados: ZeroMQ, NATS, etc
25
RabbitMQ em Python
26
RabbitMQ em Python
27
RabbitMQ em Go
28
RabbitMQ em Go
29
RabbitMQ em Go
- Callback abstraído como um channel em Go
- Dados que trafegam no RabbitMQ consumidos como se
fossem passados entre goroutines em memória
- Intuitivo e idiomático
30
Evolução: múltiplos modelos de deep learning
- Arquitetura cresce com o aumento do número de modelos
- Mexer na inferência em Python não afeta processamento
dos exames em Go e vice-versa
- Equipe de data science se envolve na inferência de
produção com código de Keras/TensorFlow familiar
31
Mapas de ativação
- Grad CAM- Indicação para o
radiologista de onde olhar- Pesado de gerar, N para 1,
depende de:- Modelo- Imagem- Label
- Geração só sob demanda32
Mapas de ativação
33
Níveis de criticidade
- Com múltiplas patologias, passamos a entregar uma interpretação da gravidade do exame, calculada na inferência em Python, utilizada na API em Go
34
Níveis de criticidade
35
Onde chegamos
- No começo: modelos simples, processamento e inferência
juntos
- Onde chegamos: múltiplos modelos, muito mais precisão,
mapas de ativação e níveis de priorização
- Arquitetura flexível e eficiente
36
Onde chegamos
- Processamento em background eficiente em Go
- Inferência em Python com código próximo ao da
construção dos modelos
- Data science em produção, equipes cooperando
37
Pontos principais
- Arquiteturas eficientes para Machine Learning são
possíveis com as mesmas ferramentas da engenharia de
software de sempre. Mensageria e RPC não é novidade.
- Código em Python é onde ML de fato vive
- Código em Go é onde o trabalho mais pesado fica
- Right tool for the job, mas cuidado com exageros
38
Obrigado
Twitter: vdemariogithub: vdemario