tensorflow poliglota: integrando go e python · inferência em python, utilizada na api em go 34....
TRANSCRIPT
![Page 1: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/1.jpg)
Tensorflow poliglota: integrando Go e Python
Vitor De Mario
![Page 2: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/2.jpg)
2
![Page 3: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/3.jpg)
Deep learning
- Big data- GPUs- ImageNet- Redes neurais
convolucionais- TensorFlow
3
![Page 4: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/4.jpg)
Deep learning - GPUs
4
![Page 5: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/5.jpg)
- Biblioteca para criação de modelos de machine learning
- Redes neurais em primeiro lugar
- Desenvolvido pelo Google
- Open source desde novembro de 2015
5
![Page 6: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/6.jpg)
- 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
![Page 7: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/7.jpg)
TensorFlow na NeuralMed
- Transfer learning
- retrain.py
- SavedModelBuilder
- Primeiro treinamento: imagens normais vs anormais
- Resultados ruins
- Scores altos indicam exames muito alterados
7
![Page 8: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/8.jpg)
TensorFlow na NeuralMed
8
![Page 9: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/9.jpg)
SDK do TensorFlow em Go
- Onde entra Go nessa história?
- Suportado oficialmente (em tese)
- Understanding Tensorflow using Go - Paolo Galeone, 2017
9
![Page 10: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/10.jpg)
SDK do TensorFlow em Go
10
![Page 11: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/11.jpg)
SDK do TensorFlow em Go
11
![Page 12: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/12.jpg)
SDK do TensorFlow em Go
12
![Page 13: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/13.jpg)
- 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
![Page 14: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/14.jpg)
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
![Page 15: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/15.jpg)
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
![Page 16: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/16.jpg)
Inferência em Python com Keras
- Modelos criados com Keras
- Mesmo código da criação dos modelos
- Simplicidade16
![Page 17: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/17.jpg)
Inferência em Python com Keras
17
![Page 18: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/18.jpg)
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
![Page 19: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/19.jpg)
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
![Page 20: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/20.jpg)
RPC
- Java RMI- SOAP- CORBA- protobuf- gRPC- Message passing
20
![Page 21: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/21.jpg)
- 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
![Page 22: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/22.jpg)
Comunicação síncrona: HTTP com Flask
22
![Page 23: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/23.jpg)
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
![Page 24: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/24.jpg)
- 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
![Page 25: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/25.jpg)
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
![Page 26: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/26.jpg)
RabbitMQ em Python
26
![Page 27: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/27.jpg)
RabbitMQ em Python
27
![Page 28: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/28.jpg)
RabbitMQ em Go
28
![Page 29: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/29.jpg)
RabbitMQ em Go
29
![Page 30: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/30.jpg)
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
![Page 31: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/31.jpg)
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
![Page 32: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/32.jpg)
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
![Page 33: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/33.jpg)
Mapas de ativação
33
![Page 34: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/34.jpg)
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
![Page 35: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/35.jpg)
Níveis de criticidade
35
![Page 36: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/36.jpg)
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
![Page 37: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/37.jpg)
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
![Page 38: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/38.jpg)
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
![Page 39: Tensorflow poliglota: integrando Go e Python · inferência em Python, utilizada na API em Go 34. Níveis de criticidade 35. Onde chegamos - No começo: modelos simples, processamento](https://reader034.vdocuments.site/reader034/viewer/2022051921/600e64dc883e0f51576f2c9c/html5/thumbnails/39.jpg)
Obrigado
Twitter: vdemariogithub: vdemario