estruturas de aprendizado de máquina customizadas
Você pode usar sua estrutura personalizada de aprendizado de máquina para concluir 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, a detecção de desvio e a função de devios automáticos para avaliações de modelos. A estrutura de aprendizado de máquina personalizada deve ter equivalência com o IBM watsonx.ai Runtime.
As seguintes estruturas personalizadas de aprendizado de máquina oferecem suporte a avaliações de modelos:
| Estrutura | Tipo de problema | Tipo de dados |
|---|---|---|
| Equivalente ao tempo de execução IBM watsonx.ai | Classificação | Estruturado |
| Equivalente ao tempo de execução IBM watsonx.ai | Regressão | Estruturado |
Para um modelo que não seja equivalente ao IBM watsonx.ai Runtime, você deve criar um wrapper para o modelo personalizado que exponha os pontos de extremidade da API REST necessários. Também deve-se fazer a ponte entre a entrada / saída entre Watson OpenScale e o mecanismo de aprendizado de máquina customizado real.
Quando um mecanismo de aprendizado de máquina customizado é a melhor escolha para mim?
Um mecanismo de aprendizado de máquina customizado é a melhor escolha quando as situações a seguir são verdadeiras:
- Você não está usando nenhum produto imediatamente disponível para servir seus modelos de aprendizado de máquina. Você tem um sistema para atender aos seus modelos e não existe suporte direto para essa função nas avaliações de modelos.
- O mecanismo de veiculação que você está usando de um fornecedor terceirizado ainda não é compatível com avaliações de modelos. Neste caso, considere desenvolver um mecanismo de aprendizado de máquina customizado como um wrapper para suas implementações originais ou nativas.
Como isso funciona
A imagem a seguir mostra o suporte ao ambiente customizado:

Também é possível referenciar os links a seguir:
API de criação de log de carga útil do Watson OpenScale
Critérios de entrada para o modelo suportar monitores
No exemplo a seguir, seu modelo usa um vetor de recurso, que é essencialmente uma coleção de campos nomeados e seus valores, como uma entrada.
{ "fields": [ "name", "age", "position" ], "values": [ [ "john", 33, "engineer" ], [ "mike", 23, "student" ] ]O campo
“age”pode ser avaliado para equidade.Se a entrada for um tensor ou uma matriz, que é transformada a partir do espaço de recursos de entrada, esse modelo não poderá ser avaliado. Por extensão, os modelos de deep learning com entradas de texto ou de imagem não podem ser manipulados para detecção e mitigação de propensão.
Adicionalmente, os dados de treinamento devem ser carregados para suportar a Explicabilidade.
Para explicabilidade no texto, o texto completo deve ser um dos recursos. A explicabilidade em imagens para um modelo Customizado não é suportada na liberação atual.
Critérios de saída para o modelo suportar monitores
Seu modelo fornece a saída do vetor de recurso de entrada ao lado das probabilidades de predição de várias classes nesse modelo.
{ "fields": [ "name", "age", "position", "prediction", "probability" ], "labels": [ "personal", "camping" ], "values": [ [ "john", 33, "engineer", "personal", [ 0.6744664422398081, 0.3255335577601919 ] ], [ "mike", 23, "student" "camping", [ 0.2794765664946941, 0.7205234335053059 ] ] ] }Neste exemplo,
"personal”e“camping”são as classes possíveis, e as pontuações em cada saída de pontuação são atribuídas a ambas as classes. Se as probabilidades de predição estão ausentes, funciona a detecção de propensão, mas a remoção automática de propensão não.Você pode acessar a saída de avaliação de um ponto de extremidade de avaliação ao vivo que pode ser chamado com a API REST para avaliações de modelo. Para o CUSTOMML, Amazon SageMaker, e IBM watsonx.ai Runtime, Watson OpenScale se conecta diretamente aos endpoints de pontuação nativos.
Mecanismo de aprendizagem de máquina customizado
Um mecanismo de aprendizado de máquina customizado fornece as capacidades de infraestrutura e hospedagem para modelos de aprendizado de máquina e aplicativos da web. Os mecanismos personalizados de aprendizado de máquina compatíveis com as avaliações de modelos devem estar em conformidade com os seguintes requisitos:
Exponha dois tipos de terminais da API de REST:
- terminal de descoberta (lista GET de implementações e detalhes)
- terminais de pontuação (pontuação on-line e em tempo real)
Todos os terminais precisam ser compatíveis com a especificação do swagger para serem suportados.
A carga útil de entrada e a saída para/da implementação devem ser compatíveis com o formato de arquivo JSON que está descrito na especificação.
Watson OpenScale suporta apenas os formatos de autenticação BasicAuth, none ou apiKey.
Para ver a especificação dos pontos de extremidade da API REST, consulte a API REST.
Adição de um mecanismo de aprendizado de máquina personalizado
Você pode configurar avaliações de modelos para trabalhar com um provedor de aprendizado de máquina personalizado usando um dos seguintes métodos:
- Você pode usar a interface de configuração para adicionar seu primeiro provedor de aprendizado de máquina personalizado. Para obter mais informações, consulte Especificando uma instância de aprendizado de máquina customizada.
- Também é possível incluir seu provedor de aprendizado de máquina usando o Python SDK. Deve-se usar esse método se você deseja ter mais de um provedor. Para obter informações adicionais, consulte Incluir seu mecanismo de aprendizado de máquina customizado.
Explorar mais
Você pode usar o monitor de aprendizado de máquina personalizado para criar uma maneira de interagir com outros serviços.
Especificando uma Instância de Serviço ML Customizada
Sua primeira etapa para configurar as avaliações de modelo é especificar uma instância de serviço. Sua instância de serviço é onde você armaza seus modelos e implementações de IA.
Conecte sua Instância de serviço customizado
Os modelos e as implementações de IA são conectados em uma instância de serviço para avaliações de modelos. É possível conectar um serviço customizado. Para conectar seu serviço, vá para a guia Configurar "
, adicione um provedor de aprendizado de máquina e clique no ícone Editar "
. Além de um nome, descrição e especificação do tipo de ambiente Pré-produção ou Produção, deve-se fornecer as informações a seguir que são específicas para este tipo de instância de serviço:
- Nome de Usuário
- Senha
- Terminal da API que usa o formato
https://host:port, comohttps://custom-serve-engine.example.net:8443
Escolha se deve se conectar às suas implementações solicitando uma lista ou inserindo terminais de pontuação individuais.
Solicitando a lista de implementações
Se você selecionou o ladrilho Solicitar a lista de implementações, insira suas credenciais e o Terminal de API, em seguida, salve sua configuração.
Fornecendo terminais de pontuação individuais
Se você selecionou o ladrilho Inserir terminais de pontuação individual, insira suas credenciais para o Terminal de API, salve sua configuração.
Agora você está pronto para selecionar modelos implementados e configurar seus monitores. Seus modelos implantados são listados 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.
Exemplos do mecanismo de aprendizado de máquina customizado
Use as ideias a seguir para configurar o seu próprio mecanismo de aprendizado de máquina customizado.
Python e flask
É possível usar Python e flask para servir o modelo scikit-learn.
Para gerar o modelo de detecção de desvio, deve-se usar o scikit-learn versão 0.20.2 no bloco de notas.
O app pode ser implementado localmente para propósitos de teste e como um aplicativo na IBM Cloud.
Node.js
Também é possível localizar um exemplo de um mecanismo de aprendizado de máquina customizado que está gravado no Node.js aqui.
Padrão de código End2end
Padrão de código que mostra um exemplo de implantação de mecanismo personalizado de end2end e integração com avaliações de modelo.
Criação de log de carga útil com o mecanismo de aprendizado da máquina
Para configurar o registro de carga útil para um watsonx.ai Runtime que não seja da IBM ou para um mecanismo de aprendizado de máquina personalizado, você deve associar o mecanismo de ML como personalizado.
Inclua seu mecanismo de aprendizado de máquina customizado
Um mecanismo de Runtime non-watsonx.ai é adicionado como personalizado usando metadados e não há integração direta com o serviço de Runtime watsonx.ai que não seja da IBM. Você pode adicionar mais de um mecanismo de aprendizado de máquina para avaliações de modelos usando o método " wos_client.service_providers.add.
CUSTOM_ENGINE_CREDENTIALS = {
"url": "***",
"username": "***",
"password": "***",
}
wos_client.service_providers.add(
name=SERVICE_PROVIDER_NAME,
description=SERVICE_PROVIDER_DESCRIPTION,
service_type=ServiceTypes.CUSTOM_MACHINE_LEARNING,
credentials=CustomCredentials(
url= CUSTOM_ENGINE_CREDENTIALS['url'],
username= CUSTOM_ENGINE_CREDENTIALS['username'],
password= CUSTOM_ENGINE_CREDENTIALS['password'],
),
background_mode=False
).result
É possível ver o seu provedor de serviços com o comando a seguir:
client.service_providers.get(service_provider_id).result.to_dict()

Configurar segurança com uma chave de API
Para configurar a segurança de seu mecanismo de aprendizado de máquina personalizado, você pode usar IBM Cloud e IBM Cloud Pak for Data como provedores de autenticação para suas avaliações de modelo. É possível usar a URL https://iam.cloud.ibm.com/identity/token para gerar um token de IAM para IBM Cloud e usar a URL https://<$hostname>/icp4d-api/v1/authorize para gerar um token para Cloud Pak for Data.
É possível usar a solicitação POST /v1/deployments/{deployment_id}/online para implementar sua API de pontuação nos formatos a seguir:
Solicitação
{
"input_data": [{
"fields": [
"name",
"age",
"position"
],
"values": [
[
"john",
33,
"engineer"
],
[
"mike",
23,
"student"
]
]
}]
}
Resposta
{
"predictions": [{
"fields": [
"name",
"age",
"position",
"prediction",
"probability"
],
"labels": [
"personal",
"camping"
],
"values": [
[
"john",
33,
"engineer",
"personal",
[
0.6744664422398081,
0.32553355776019194
]
],
[
"mike",
23,
"student",
"camping",
[
0.2794765664946941,
0.7205234335053059
]
]
]
}]
}
Incluir assinatura customizada
Para incluir uma assinatura customizada, execute o comando a seguir:
custom_asset = Asset(
asset_id=asset['entity']['asset']['asset_id'],
name=asset['entity']['asset']['name'],
url = "dummy_url",
asset_type=asset['entity']['asset']['asset_type'] if 'asset_type' in asset['entity']['asset'] else 'model',
problem_type=ProblemType.MULTICLASS_CLASSIFICATION,
input_data_type=InputDataType.STRUCTURED,
)
deployment = AssetDeploymentRequest(
deployment_id=asset['metadata']['guid'],
url=asset['metadata']['url'],
name=asset['entity']['name'],
deployment_type=asset['entity']['type'],
scoring_endpoint = scoring_endpoint
)
asset_properties = AssetPropertiesRequest(
prediction_field='predicted_label',
probability_fields = ["probability"],
training_data_reference=None,
training_data_schema=None,
input_data_schema=None,
output_data_schema=output_schema,
)
result = ai_client.subscriptions.add(
data_mart_id=cls.datamart_id,
service_provider_id=cls.service_provider_id,
asset=custom_asset,
deployment=deployment,
asset_properties=asset_properties,
background_mode=False
).result
Para obter a lista de assinatura, execute o comando a seguir:
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
Para ativar a criação de log de carga útil na assinatura, execute o comando a seguir:
request_data = {'fields': feature_columns,
'values': [[payload_values]]}
Para obter detalhes de criação de log, execute o comando a seguir:
response_data = {'fields': list(result['predictions'][0]),
'values': [list(x.values()) for x in result['predictions']]}
Pontuação e criação de log de carga útil
Pontue o seu modelo.
Armazene a solicitação e a resposta na tabela de criação de log de carga útil
records_list = [PayloadRecord(request=request_data, response=response_data, response_time=response_time), PayloadRecord(request=request_data, response=response_data, response_time=response_time)] subscription.payload_logging.store(records=records_list)
Para linguagens diferentes do Python, também é possível registrar carga útil usando uma API de REST.