Estruturas do Microsoft Azure ML Service

Você pode usar o Microsoft Azure ML Service para realizar o registro de carga útil, o registro de feedback e para medir a precisão do desempenho, a detecção de viés de tempo de execução, a explicabilidade e a função de autodebias para avaliações de modelos.

As seguintes estruturas do Serviço Microsoft Azure Machine Learning são compatíveis para avaliações de modelos:

Tabela 1. Detalhes do suporte da estrutura

Detalhes do suporte da estrutura
Estrutura Tipo de problema Tipo de dados
Native Classificação Estruturado
scikit-learn Classificação Estruturado
scikit-learn Regressão Estruturado

Para gerar o modelo de detecção de desvio, deve-se usar o scikit-learn versão 0.20.2 no Notebooks.

Azure Endpoints automatizados Machine Learning e Azure são gerenciados com notebooks para avaliações de modelos.

Adição do serviço de ML Microsoft Azure

Você pode configurar avaliações de modelos para trabalhar com o Serviço de ML Microsoft Azure usando um dos seguintes métodos:

Vários pontos de extremidade REST são chamados e são necessários para interagir com o Serviço de ML Azure. Para fazer isso, você deve vincular o serviço Azure Machine Learning.

  1. Crie uma Entidade do Serviço do Active Directory do Azure.
  2. Especifique os detalhes da credencial quando você adicionar a associação de serviço do Serviço de ML Azure, seja por meio da interface do usuário ou do Python SDK.

Requisitos para solicitação de JSON e arquivos de resposta

Para que as avaliações de modelo funcionem com o Serviço de ML Azure, as implantações de serviço da Web que você cria devem atender a determinados requisitos. As implementações de serviços da web que você cria devem aceitar as solicitações JSON e retornar respostas JSON, de acordo com os requisitos a seguir.

Formato de solicitação JSON de serviço da web necessário

  • O corpo da solicitação da API de REST deve ser um documento JSON que contém uma matriz JSON de objetos JSON
  • A matriz JSON deve ser denominada "input".
  • Cada objeto JSON pode incluir apenas pares de chave e valor simples, em que os valores podem ser uma sequência, um número, true, false ou null
  • Os valores não podem ser um objeto ou matriz JSON
  • Cada objeto JSON na matriz deve todos ter as mesmas chaves (e, portanto, número de chaves) especificado, independentemente de haver um valor não null disponível

O arquivo JSON de amostra a seguir atende aos requisitos anteriores e pode ser usado como um modelo para criação de seus próprios arquivos de solicitação JSON:

{
  "input": [
    {
      "field1": "value1",
      "field2": 31,
      "field3": true,
      "field4": 2.3
    },
    {
      "field1": "value2",
      "field2": 15,
      "field3": false,
      "field4": 0.1
    },
    {
      "field1": null,
      "field2": 5,
      "field3": true,
      "field4": 6.1
    }
  ]
}

Formato de resposta JSON de serviço da web necessário

Anote os itens a seguir quando você criar um arquivo de resposta JSON:

  • O corpo de resposta da API de REST deve ser um documento JSON que contém uma matriz JSON de objetos JSON

  • A matriz JSON deve ser denominada "output".

  • Cada objeto JSON pode incluir apenas pares de valor e chave, em que os valores podem ser uma sequência, um número, true, false, null ou uma matriz que não contém nenhum outro objeto JSON ou matrizes

  • Os valores não podem ser um objeto JSON

  • Cada objeto JSON na matriz deve todos ter as mesmas chaves (e número de chaves) especificado, independentemente de haver um valor não null disponível

  • Para modelos de classificação: o serviço da web deve retornar uma matriz de probabilidades para cada classe e a ordenação das probabilidades deve ser consistente para cada objeto JSON na matriz

    • Exemplo: suponha que você tenha um modelo de classificação binária que prevê o risco de crédito, em que as classes são Risk ou No Risk
    • Para cada resultado retornado de volta na matriz "output", os objetos devem conter um par de chave-valor que inclua as probabilidades em ordem fixa, no formato:
    {
    "output": [
      {
        "Scored Probabilities": ["Risk" probability,"No Risk" probability
        ]
        },
        {
          "Scored Probabilities": ["Risk" probability,"No Risk" probability
            ]
           }
        ]
    

Para ser consistente com ferramentas visuais Azure ML que são usadas no Azure ML Studio e no Service, use os nomes da chave a seguir:

  • o nome de chave "Scored Labels" para a chave de saída que denota o valor previsto do modelo
  • o nome de chave "Scored Probabilities" para a chave de saída que denota uma matriz de probabilidades para cada classe

O arquivo JSON de amostra a seguir atende aos requisitos anteriores e pode ser usado como um modelo para a criação de seus próprios arquivos de resposta JSON:

{
  "output": [
    {
      "Scored Labels": "No Risk",
      "Scored Probabilities": [
        0.8922524675865824,
        0.10774753241341757
      ]
    },
    {
      "Scored Labels": "No Risk",
      "Scored Probabilities": [
        0.8335192848546905,
        0.1664807151453095
      ]
    }
  ]
}

Blocos de notas de amostra

Os Blocos de Notas a seguir mostram como trabalhar com o Microsoft Azure ML Service:

Especificando uma instância do Microsoft Azure ML Service

Sua primeira etapa para configurar as avaliações de modelo é especificar uma instância do Serviço de ML Microsoft Azure. Sua instância do Azure ML Service é o local em que você armazena seus modelos e implementações de IA.

Os modelos e as implantações de IA são conectados em uma instância do Serviço de ML Azure para avaliações de modelos. Para conectar seu serviço, vá para a guia Configure O ícone da guia de configuração , adicione um provedor de aprendizado de máquina e clique no ícone Edit O ícone Editar . Além de um nome e descrição e se o ambiente é Pré-produção ou Produção, deve-se fornecer as informações a seguir:

  • ID do cliente: o valor de sequência real de seu ID do cliente, que verifica quem você é e autentica e autoriza chamadas que você faz para o Azure Service.
  • Segredo do cliente: o valor real da sequência do segredo, que verifica quem você é e autentica e autoriza chamadas que você faz para o Azure Service.
  • Locatário: o seu ID do locatário corresponde à sua organização e é uma instância dedicada do Azure AD. Para localizar o ID do locatário, passe o cursor do mouse sobre seu nome da conta para obter o diretório e o ID do locatário, ou selecione Azure Active Directory > Propriedades > ID do diretório no portal Azure.
  • ID da assinatura: credenciais de assinatura que identificam com exclusividade a sua assinatura do Microsoft Azure. O ID da assinatura faz parte do URI para cada chamada de serviço.

Consulte Como usar o portal para criar um aplicativo do Azure AD e uma entidade de serviço que possa acessar recursos para obter instruções sobre como obter as suas credenciais do Microsoft Azure.

Agora você está pronto para selecionar modelos implementados e configurar seus monitores. Seus modelos implantados no painel do Insights, onde você pode clicar em Add to dashboard (Adicionar ao painel). Selecione as implementações que deseja monitorar e clique em Configurar.

Para obter mais informações, consulte Configurar monitores.

Criação de log de carga útil com o mecanismo do Microsoft Azure ML Service

Inclua seu mecanismo do Microsoft Azure ML Service

Um mecanismo de tempo de execução watsonx.ai que não seja da IBM é vinculado como Personalizado e consiste em metadados. Não há integração direta com o serviço de tempo de execução watsonx.ai que não seja da IBM.

service_type = "azure_machine_learning_service"
added_service_provider_result = wos_client.service_providers.add(
        name=SERVICE_PROVIDER_NAME,
        description=SERVICE_PROVIDER_DESCRIPTION,
        service_type = service_type,
        credentials=AzureCredentials(
            subscription_id= AZURE_ENGINE_CREDENTIALS['subscription_id'],
            client_id = AZURE_ENGINE_CREDENTIALS['client_id'],
            client_secret= AZURE_ENGINE_CREDENTIALS['client_secret'],
            tenant = AZURE_ENGINE_CREDENTIALS['tenant']
        ),
        background_mode=False
    ).result

É possível ver a sua ligação de serviços com o comando a seguir:

client.service_providers.list()

A saída de amostra:

uid	                                   name	                      service_type	                   created
410e730f-8462-45fe-8b41-a029d6d6043a	My Azure ML Service engine azure_machine_learning_service2019-06-10T22:10:29.398Z

Incluir assinatura do Microsoft Azure ML Service

Incluir assinatura

asset_deployment_details = wos_client.service_providers.list_assets(data_mart_id=data_mart_id, service_provider_id=service_provider_id).result
asset_deployment_details

deployment_id=''
for model_asset_details in asset_deployment_details['resources']:
    if model_asset_details['metadata']['guid']==deployment_id:
        break

azure_asset = Asset(
            asset_id=model_asset_details["entity"]["asset"]["asset_id"],
            name=model_asset_details["entity"]["asset"]["name"],
            url=model_asset_details["entity"]["asset"]["url"],
            asset_type=model_asset_details['entity']['asset']['asset_type'] if 'asset_type' in model_asset_details['entity']['asset'] else 'model',
            input_data_type=InputDataType.STRUCTURED,
            problem_type=ProblemType.BINARY_CLASSIFICATION
        )

deployment_scoring_endpoint = model_asset_details['entity']['scoring_endpoint']
scoring_endpoint = ScoringEndpointRequest(url = model_asset_details['entity']['scoring_endpoint']['url'],request_headers = model_asset_details['entity']['scoring_endpoint']['request_headers'],
                                                 credentials = None)

deployment = AssetDeploymentRequest(
    deployment_id=model_asset_details['metadata']['guid'],
    url=model_asset_details['metadata']['url'],
    name=model_asset_details['entity']['name'],
    description=model_asset_details['entity']['description'],
    deployment_type=model_asset_details['entity']['type'],
    scoring_endpoint = scoring_endpoint
)

asset_properties = AssetPropertiesRequest(
        label_column="Risk ",
        prediction_field='Scored Labels',
        probability_fields=['Scored Probabilities'],
        training_data_reference=training_data_reference,
        training_data_schema=None,
        input_data_schema=None,
        output_data_schema=None,
    )

subscription_details = wos_client.subscriptions.add(
        data_mart_id=data_mart_id,
        service_provider_id=service_provider_id,
        asset=azure_asset,
        deployment=deployment,
        asset_properties=asset_properties,
        background_mode=False
).result

Obter lista de assinaturas

subscription_id = subscription_details.metadata.id
subscription_id

details: wos_client.subscriptions.get(subscription_id).result.to_dict()

Ativar a criação de log de carga útil

Ativar a criação de log de carga útil na assinatura

payload_data_set_id = None
payload_data_set_id = wos_client.data_sets.list(type=DataSetTypes.PAYLOAD_LOGGING,
                                                target_target_id=subscription_id,
                                                target_target_type=TargetTypes.SUBSCRIPTION).result.data_sets[0].metadata.id

Obter detalhes da criação de log

subscription.payload_logging.get_details()

Pontuação e criação de log de carga útil

Pontue o seu modelo. Para obter um exemplo completo, consulte Trabalhando com o Azure Machine Learning Service Engine Notebook.

Armazene a solicitação e a resposta na tabela de criação de log de carga útil:

wos_client.data_sets.store_records(data_set_id=payload_data_set_id, request_body=[PayloadRecord(
           scoring_id=str(uuid.uuid4()),
           request=request_data,
           response=response_data,
           response_time=460
)])

Para linguagens diferentes de Python, também é possível registrar a carga útil usando uma API de REST.