Coletar dados de modelos em produção
APLICA-SE A: SDK do Python azureml v1
Este artigo mostra como coletar dados de um modelo do Azure Machine Learning implantado em um cluster do AKS (Serviço de Kubernetes do Azure). Os dados coletados são armazenados no Armazenamento de Blobs do Azure.
Quando a coleção estiver habilitada, os dados coletados ajudarão você a:
Monitorar descompassos de dados nos dados de produção coletados.
Analisar os dados coletados usando o Power BI ou o Azure Databricks.
Tomar melhores decisões sobre quando treinar ou otimizar seu modelo.
Treinar novamente seu modelo com os dados coletados.
Limitações
- O recurso de coleta de dados do modelo só pode funcionar com a imagem do Ubuntu 18.04.
Importante
A partir de 10/03/2023, a imagem do Ubuntu 18.04 foi preterida. O suporte para imagens do Ubuntu 18.04 será descartado a partir de janeiro de 2023, quando chegar ao EOL em 30 de abril de 2023.
O recurso MDC é incompatível com qualquer outra imagem que não seja o Ubuntu 18.04, que não estará disponível depois que a imagem do Ubuntu 18.04 for preterida.
Mais informações que você pode consultar:
Observação
O recurso de coleta de dados está atualmente em versão prévia, todos os recursos de versão prévia não são recomendados para cargas de trabalho de produção.
O que é coletado e para onde vai
Os dados a seguir podem ser coletados:
Dados de entrada de modelo de serviços Web implantados em um cluster do AKS. Áudio de voz, imagens e vídeos não são coletados.
Predições de modelo usando dados de entrada de produção.
Observação
A pré-agregação e os pré-cálculos nesses dados não fazem parte do serviço de coleta no momento.
A saída é salva no Armazenamento de Blobs. Uma vez que os dados são adicionados ao Armazenamento de Blobs, você pode selecionar sua ferramenta predileta para executar a análise.
O caminho para os dados de saída no blob segue esta sintaxe:
/modeldata/<subscriptionid>/<resourcegroup>/<workspace>/<webservice>/<model>/<version>/<designation>/<year>/<month>/<day>/data.csv
# example: /modeldata/1a2b3c4d-5e6f-7g8h-9i10-j11k12l13m14/myresourcegrp/myWorkspace/aks-w-collv9/best_model/10/inputs/2018/12/31/data.csv
Observação
Em versões do SDK do Azure Machine Learning para Python anteriores à versão 0.1.0a16, o argumento designation
é chamado de identifier
. Se você desenvolveu seu código com uma versão anterior, precisa atualizá-lo adequadamente.
Pré-requisitos
Se você não tiver uma assinatura do Azure, crie uma conta gratuita antes de começar.
Um workspace do Azure Machine Learning, um diretório local contendo seus scripts e o SDK do Azure Machine Learning para Python devem ser instalados. Para saber como instalá-los, confira Como configurar um ambiente de desenvolvimento.
Você precisa de um modelo de machine learning treinado para ser implantado no AKS. Se não tiver um, confira o tutorial Treinar modelos de classificação de imagem.
Você precisa de um cluster do AKS. Para obter mais informações sobre como criar um e implantar, consulte Implantar modelos de machine learning no Azure.
Configure seu ambiente e instale o SDK de Monitoramento do Azure Machine Learning.
Use uma imagem do Docker com base no Ubuntu 18.04, que é enviado com
libssl 1.0.0
, a dependência essencial do modeldatacollector. Você pode consultar imagens predefinidas.
Habilitar coleta de dados
Você pode habilitar a coleta de dados independentemente do modelo implantado por meio do Azure Machine Learning ou de outras ferramentas.
Para habilitar a coleta de dados, faça o seguinte:
Abra o arquivo de pontuação.
Adicione o seguinte código na parte superior do arquivo:
from azureml.monitoring import ModelDataCollector
Declare suas variáveis de coleta de dados na sua função
init
:global inputs_dc, prediction_dc inputs_dc = ModelDataCollector("best_model", designation="inputs", feature_names=["feat1", "feat2", "feat3", "feat4", "feat5", "feat6"]) prediction_dc = ModelDataCollector("best_model", designation="predictions", feature_names=["prediction1", "prediction2"])
CorrelationId é um parâmetro opcional. Você não precisará usá-lo se o seu modelo não exigir. O uso de CorrelationId ajuda a mapear mais facilmente com outros dados, como LoanNumber ou CustomerID.
O parâmetro Identifier é usado posteriormente para criar a estrutura de pastas em seu blob. Você pode usá-lo para diferenciar os dados brutos dos dados processados.
Adicione as seguintes linhas de código à função
run(input_df)
:data = np.array(data) result = model.predict(data) inputs_dc.collect(data) #this call is saving our input data into Azure Blob prediction_dc.collect(result) #this call is saving our prediction data into Azure Blob
A coleta de dados não é definida automaticamente como true quando você implanta um serviço no AKS. Atualize seu arquivo de configuração, como no seguinte exemplo:
aks_config = AksWebservice.deploy_configuration(collect_model_data=True)
Você também pode habilitar o Application Insights para o monitoramento de serviço alterando esta configuração:
aks_config = AksWebservice.deploy_configuration(collect_model_data=True, enable_app_insights=True)
Para criar uma nova imagem e implantar o modelo de machine learning, consulte Implantar modelos de machine learning no Azure.
Adicione o pacote pip "Azure-Monitoring" às dependências Conda do ambiente do serviço Web:
env = Environment('webserviceenv')
env.python.conda_dependencies = CondaDependencies.create(conda_packages=['numpy'],pip_packages=['azureml-defaults','azureml-monitoring','inference-schema[numpy-support]'])
Desativar coleta de dados
Você pode parar de coletar dados a qualquer momento. Use o Python para desabilitar a coleta de dados.
## replace <service_name> with the name of the web service
<service_name>.update(collect_model_data=False)
Validar e analisar os dados
Você pode escolher uma ferramenta de sua preferência para analisar os dados coletados em seu Armazenamento de Blobs.
Acessar rapidamente os dados de blobs
Entre no Portal do Azure.
Abra seu workspace.
Selecione Armazenamento.
Siga o caminho para os dados de saída do blob com esta sintaxe:
/modeldata/<subscriptionid>/<resourcegroup>/<workspace>/<webservice>/<model>/<version>/<designation>/<year>/<month>/<day>/data.csv # example: /modeldata/1a2b3c4d-5e6f-7g8h-9i10-j11k12l13m14/myresourcegrp/myWorkspace/aks-w-collv9/best_model/10/inputs/2018/12/31/data.csv
Analisar dados de modelo usando o Power BI
Baixe e abra o Power BI Desktop.
Selecione Obter Dados e clique em Armazenamento de Blobs do Azure.
Adicione o nome da sua conta de armazenamento e insira sua chave de armazenamento. Você pode encontrar essas informações selecionando Configurações>Chaves de acesso em seu blob.
Selecione o contêiner de dados do modelo e selecione Editar.
No editor de consultas, clique na coluna Nome e adicione sua conta de armazenamento.
Insira seu caminho do modelo para o filtro. Se você quiser apenas examinar arquivos de um ano ou mês específico, basta expandir o caminho do filtro. Por exemplo, para procurar apenas dados de março, use este caminho de filtro:
/modeldata/<subscriptionid>/<resourcegroupname>/<workspacename>/<webservicename>/<modelname>/<modelversion>/<designation>/<year>/3
Filtre os dados relevantes para você com base no Nome. Se você armazenou previsões e entradas, precisa criar uma consulta para cada.
Selecione as setas duplas para baixo ao lado do título de coluna de Conteúdo para combinar os arquivos.
Selecione OK. Os dados são pré-carregados.
Selecione Fechar e Aplicar.
Se você adicionou entradas e previsões, suas tabelas são automaticamente ordenadas por valores de RequestId.
Comece a criar relatórios personalizados em seus dados de modelo.
Analisar dados de modelo com o Azure Databricks
Crie um workspace do Azure Databricks.
Vá para seu workspace do Databricks.
No seu workspace do Databricks, selecione Carregar Dados.
Selecione Criar Tabela e Outras Fontes de Dados>Armazenamento de Blobs do Azure>Criar Tabela no Notebook.
Atualize o local dos seus dados. Este é um exemplo:
file_location = "wasbs://mycontainer@storageaccountname.blob.core.windows.net/*/*/data.csv" file_type = "csv"
Siga as etapas no modelo para exibir e analisar seus dados.
Próximas etapas
Detectar descompasso de dados nos dados coletados.