39
Tensorflow poliglota: integrando Go e Python Vitor De Mario

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

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

- 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

- 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

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

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

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

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

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

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

- 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

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

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

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

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

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

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

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

- 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

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

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

- 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Obrigado

Twitter: vdemariogithub: vdemario