Recursos Machine Learning da Microsoft – Azure Model Management

Olá pessoal,

Abordei recentemente vários recursos Microsoft para Machine Learning. Um dos recursos abordados é o Azure Machine Learning Workbench, que permite criar projetos de Machine Learning, preparar dados e executar algoritmos em diferentes targets, como máquina local, Docker local, máquina remota e clusters.

Ao desenvolver esses projetos e criar modelos, o cientista de dados conta também com outro recurso, o Azure Model Management CLI para publicar o modelo e disponibilizá-lo em produção. O Model Management provê vários recursos como:

  • Versionamento de Modelos
  • Acompanhamento de uso de modelos em produção
  • Implantação de modelos para produção através do Azure ML Compute Environment com Azure Container Service e Kubernetes
  • Criação de containers Docker para serem testados na máquina local.
  • Retreino de modelo.
  • Informações de telemetria e insights

Segue visão geral do Azure Machine Learning:

Para apresentar o Model Management, iremos focar em um exemplo que utiliza o Microsoft CNTK (Cognitive Toolkit) para classificação de imagens. O tutorial original do exemplo pode ser obtido aqui.

Pré-Requisitos

De acordo com o link acima, existem alguns pré-requisitos que devem ser atendidos antes de realizar o exemplo. Dentre eles destaco aqui:

  • Assinatura Azure com crédito disponível para uso
  • Acesso a computador com GPU (pode ser máquina virtual de Data Science disponibilizada pelo Microsoft Azure)
  • Sistema Operacional Windows

Preparação do Ambiente

Uma vez atendidos os requisitos acima, podemos seguir para a preparação do ambiente:

  1. Criar no Azure o serviço de Experimento do Azure Machine Learning (acessar link).
  2. Baixar e instalar o Azure Machine Learning Workbench na máquina com GPU (acessar link).
  3. Baixar e instalar outros pré-requisitos de bibliotecas Python na máquina, conforme especificados nesse link.

Sobre o exemplo de classificação de imagens

Vamos utilizar aqui o exemplo de classificação de imagens disponibilizado pela Microsoft. Este exemplo utiliza uma rede neural já treinada para classificar imagens de roupas, identificando se a estampa da roupa é de bolinhas (Dotted), listrada (Stripped) ou de leopardo (Leopard):

É possível criar esse exemplo diretamente pelo Workbench. Selecionar File > New Project e então buscar pelo template de projeto usando o termo de busca “Image Classification”:

Será então baixado todo conteúdo do projeto e será apresentado o Dashboard com informações e links como estes que estou apresentando aqui:

Note que temos a pasta de resources que contém um arquivo TSV com o Label e a URL da foto. Algumas dessas URLs já apontam para recursos que não existem mais. Você pode corrigir as URLs quebradas. Mas mesmo sem corrigir, provavelmente teremos uma quantidade suficiente para criar o modelo.

Treinando e Avaliando o Modelo de Classificação de Imagens

Agora vamos seguir o tutorial apresentado pela Microsoft. Irei destacar aqui apenas as etapas macro. Para detalhes de cada etapa, acesse o tutorial.

  1. Baixar as imagens listadas no arquivo TSV. Para isso, execute localmente o script 0_downloadData.py:
  2. Realizar a etapa 1 de preparação dos dados através da execução do script 1_prepareData.py e posteriormente do Notebook showImages.ipynb:
  3. Realizar a etapa 2 de Rede Neural de Deep Learning através da execução do script 2_refineDNN.py. Ao término da execução deste script será criado um modelo baseado no modelo ResNet pré-treinado. O modelo refinado será então gravado em DATA_DIR/proc/fashionTexture/cntk_fixed.model..
    • É possível obter o log do script executado clicando no item correspondente a execução do Script em Jobs (do lado esquerdo) ou em History (do lado direito):
  4. Realizar a etapa 3 de avaliação da Rede Neural para todas as imagens através da execução do script 3_runDNN.py.py. Ao término da execução, todas as representações de imagem da DNN são salvas no arquivo DATA_DIR/proc/fashionTexture/cntkFiles/features.pickle.
  5. Realizar a etapa 4 de treinamento do Support Vector Machine (SVM), utilizado neste exemplo para realizar a classificação das imagens. Para isso, execute localmente o script 4_trainSVM.py. Ao término da execução, a SVM treinada é gravada no arquivo DATA_DIR/proc/fashionTexture/cntkFiles/features.pickle:
  6. Realizar a etapa 5 de avaliação dos resultados através da execução do script 5_evaluate.py. É mostrado o resultado com informações de acurácia, a curva ROC e também a Matriz de Confusão para nossos Labels:
  7. Depois disso, podemos visualizar os resultados utilizando o Notebook “showResults.ipynb”:

Publicando o Modelo de Classificação

É neste momento que iremos utilizar o recurso Azure Model Management através da ferramenta de linha de comando do Azure ML Model Management.

  1. Antes de começar, no momento da escrita deste artigo precisei atualizar o arquivo conda_dependencies.yml para utilizar a dependência conda-forge::opencv ao invés de somente opencv.
  2. Abrir a ferramenta de linha de comando do próprio Azure Machine Learning Workbench através de File > Open Command Prompt.
  3. Abrir o Notebook deploy.ipynb.
  4. Iniciar Notebook Server, especificar o Kernel do projeto local (PROJECTNAME local) e executar a célula para inicialização:
  5. Os arquivos para implantação serão então copiados dentro do diretório de trabalho, na pasta deploy.
  6. Depois, vamos fazer a implantação de fato usando a ferramenta de linha de comando citada acima. No momento da escrita deste artigo, não foi possível concluir a implantação para ambiente local e sim somente para a nuvem. Portanto, executar os passos conforme descritos na sessão de Cloud Deployment
    • Este script irá publicar o modelo no Model Management do Azure, preparar uma imagem e então disponibilizar essa imagem em um container Docker dentro do Kubernates.
  7. Agora acesse o Azure para visualizar o resultado da implantação dentro do serviço de gerenciamento de modelo utilizado a pouco:
  8. Ao clicar no serviço, serão mostradas informações do serviço como Service Id, as chaves de acesso, a URL da API e vários comandos para manipular o serviço:

Chamando o Web Service

Agora chegou o momento de invocar o Web Service. Para isso iremos utilizar o script 6_callWebservice.py. Mas antes precisamos modificar esse script para incluir o endereço do serviço e também a chave de acesso. Essas informações podem ser obtidas diretamente no Azure, conforme explicado a pouco.

E como resultado obtemos a classificação da imagem de teste presente na pasta resources:

O mesmo também pode ser chamado via linha de comando usando

az ml service run realtime -i [SERVICEID] -d "{\"input_df\": [{\"image base64 string\": \"iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAIAAAACDbGyAAAAFElEQVR4nGP8//8/AxJgYkAFpPIB6vYDBxf2tWQAAAAASUVORK5CYII=\"}]}"

Considerações Finais

Neste artigo foquei na implantação e invocação de um modelo publicado na nuvem através do serviço de gerenciamento de modelo do Azure. Para tanto, foi utilizado um exemplo disponibilizado pela Microsoft para classificação de imagens.

Até a próxima!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s