È possibile utilizzare il framework di apprendimento automatico personalizzato per completare la registrazione del payload, la registrazione del feedback e per misurare l'accuratezza delle prestazioni, il rilevamento dei bias di runtime, la spiegabilità, il rilevamento della deriva e la funzione di auto-debias per le valutazioni del modello. Il framework di apprendimento automatico personalizzato deve essere equivalente a IBM watsonx.ai Runtime.
I seguenti framework di apprendimento automatico personalizzati supportano le valutazioni dei modelli:
Framework | Tipo di problema | Tipo di dati |
---|---|---|
Equivalente a IBM watsonx.ai Runtime | Classificazione | Structured |
Equivalente a IBM watsonx.ai Runtime | Regressione | Structured |
Per un modello non equivalente a IBM watsonx.ai Runtime, è necessario creare un wrapper per il modello personalizzato che esponga gli endpoint API REST richiesti. Devi anche collegare l'input/output tra Watson OpenScale e l'effettivo motore di machine learning personalizzato.
Quando un motore di machine learning personalizzato rappresenta la scelta migliore?
Un motore di machine learning personalizzato rappresenta la scelta migliore quando le seguenti situazioni sono vere:
- Non si utilizza alcun prodotto immediatamente disponibile per servire i modelli di machine learning. Avete un sistema per servire i vostri modelli e non esiste un supporto diretto per questa funzione per le valutazioni dei modelli.
- Il motore di servizio utilizzato da un fornitore 3rd-party non è ancora supportato per le valutazioni dei modelli. In questo caso, considerare di sviluppare un motore di machine learning personalizzato come un wrapper per le distribuzioni originali o native.
Come funziona
La seguente immagine mostra il supporto dell'ambiente personalizzato:
È anche possibile fare riferimento ai seguenti link:
Watson OpenScale API di registrazione dei payload
Criteri di input perché il modello supporti i monitor
Nell'esempio seguente, il tuo modello prende un vettore di feature, che è essenzialmente una raccolta di campi denominati e i loro valori, come input.
{ "fields": [ "name", "age", "position" ], "values": [ [ "john", 33, "engineer" ], [ "mike", 23, "student" ] ]
Il campo
“age”
può essere valutato per l'equità.Se l'input è un tensore o una matrice trasformata dallo spazio delle caratteristiche dell'input, il modello non può essere valutato. Per estensione, i modelli di deep learning con input di testo o immagine non possono essere gestiti per la rilevazione e la mitigazione della distorsione.
Inoltre, i dati di formazione devono essere caricati per supportare l'Explainability.
Per l'esplicabilità sul testo, una delle funzioni deve essere il testo completo. L'esplicabilità sulle immagini per un modello personalizzato non è supportata nella release corrente.
Criteri di output perché il modello supporti i monitor
Il tuo modello outmette il vettore funzione di input accanto alle probabilità di previsione di varie classi in quel modello.
{ "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 ] ] ] }
In questo esempio,
"personal”
e“camping”
sono le classi possibili e i punteggi in ogni emissione di punteggio vengono assegnati a entrambe le classi. Se mancano le probabilità di previsione, le funzioni di rilevamento dei bias, ma auto - debias no.È possibile accedere all'output del punteggio da un endpoint di punteggio live che si può chiamare con l'API REST per le valutazioni del modello. Per CUSTOMML, Amazon SageMaker, e IBM watsonx.ai Runtime, Watson OpenScale si collega direttamente agli endpoint di scoring nativi.
Motore di machine learning personalizzato
Un motore di machine learning personalizzato fornisce l'infrastruttura e le capacità di hosting per i modelli di machine learning e le applicazioni web. I motori di apprendimento automatico personalizzati supportati per la valutazione dei modelli devono essere conformi ai seguenti requisiti:
Esporre due tipi di endpoint API REST:
- endpoint di rilevamento (fornisce l'elenco di distribuzioni e i dettagli)
- endpoint di calcolo del punteggio (calcolo del punteggio online e in tempo reale)
Per essere supportati, tutti gli endpoint devono essere compatibili con la specifica swagger.
Il payload di input e l'output da o verso la distribuzione devono essere compatibili con il formato file JSON descritto nella specifica.
Watson OpenScale supporta solo i formati di autenticazione BasicAuth
, none
o apiKey
.
Per vedere le specifiche degli endpoint dell'API REST, consultare l'API REST.
Aggiunta di un motore di apprendimento automatico personalizzato
È possibile configurare le valutazioni del modello per lavorare con un provider di apprendimento automatico personalizzato utilizzando uno dei seguenti metodi:
- È possibile utilizzare l'interfaccia di configurazione per aggiungere il primo provider di apprendimento automatico personalizzato. Per ulteriori informazioni, consultare Specifica di un'istanza di machine learning personalizzata.
- È anche possibile aggiungere il provider di machine learning utilizzando l'SDK Python. È necessario utilizzare questo metodo se si desidera avere più di un provider. Per ulteriori informazioni, consultare Aggiungi il tuo motore di machine learning personalizzato.
Scopri di più
È possibile utilizzare monitor di apprendimento automatico personalizzato per creare un modo per interagire con altri servizi.
Specifica di un'istanza del servizio ML personalizzata
Il primo passo per configurare le valutazioni del modello è specificare un'istanza di servizio. L'istanza del servizio è il luogo dove si memorizzano i modelli AI e le distribuzioni.
Connessione dell'istanza del servizio personalizzata
I modelli di intelligenza artificiale e le implementazioni sono collegati in un'istanza di servizio per la valutazione dei modelli. È possibile collegare un servizio personalizzato. Per collegare il servizio, andare alla scheda Configura ', aggiungere un provider di apprendimento automatico e fare clic sull'icona Modifica '. Oltre ad un nome, la descrizione e la specifica del tipo di ambiente Preproduzione o Produzione , è necessario fornire le seguenti informazioni specifiche per questo tipo di istanza di servizio:
- Nome utente
- Password
- Endpoint API che utilizza il formato
https://host:port
, comehttps://custom-serve-engine.example.net:8443
Scegli se connettersi alle tue distribuzioni richiedendo un elenco o inserendo singoli endpoint di punteggio.
Richiesta dell'elenco di distribuzioni
Se si seleziona il riquadro Richiedi l'elenco di distribuzioni, immettere le credenziali e l'endpoint API, quindi salvare la configurazione.
Fornitura di singoli endpoint di calcolo del punteggio
Se si seleziona il riquadro Immetti gli endpoint del punteggio individuali, immettere le credenziali per l'endpoint API, quindi salvare la configurazione.
Ora si è pronti per selezionare i modelli distribuiti e configurare i monitor. I modelli distribuiti sono elencati nella dashboard Insights, dove è possibile fare clic su Aggiungi alla dashboard. Selezionare le distribuzioni che si desidera monitorare e fare clic su Configura.
Per ulteriori informazioni, consultare Configura monitor.
Esempi di motori di machine learning personalizzati
Usa le seguenti idee per impostare il tuo motore di machine learning personalizzato.
Python e flask
È possibile utilizzare Python e il pallone per servire il modello di scikit - imparare.
Per generare il modello di rilevamento della deviazione, è necessario utilizzare scikit-learn versione 0.20.2 nel notebook.
L'app può essere distribuita localmente per scopi di test e come applicazione su IBM Cloud.
Node.js
Puoi anche trovare un esempio di un motore di machine learning personalizzato scritto in Node.js qui.
Modello di codice end2end
Modello di codice che mostra un esempio end2end di distribuzione del motore personalizzato e di integrazione con le valutazioni del modello.
Registrazione del payload con il motore di machine learning personalizzato
Per configurare la registrazione del payload per un Runtime watsonx.ai IBM IBM o per un motore di apprendimento automatico personalizzato, è necessario vincolare il motore ML come personalizzato.
Aggiungi il tuo motore di machine learning personalizzato
Un motore Runtime non-watsonx.ai viene aggiunto come personalizzato utilizzando i metadati e non esiste un'integrazione diretta con il servizio Runtime non IBM watsonx.ai È possibile aggiungere più di un motore di apprendimento automatico per la valutazione dei modelli utilizzando il metodo '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
È possibile consultare il fornitore del servizio con il seguente comando:
client.service_providers.get(service_provider_id).result.to_dict()
Configurare la sicurezza con una chiave API
Per configurare la sicurezza del motore di apprendimento automatico personalizzato, è possibile utilizzare IBM Cloud e IBM Cloud Pak for Data come fornitori di autenticazione per le valutazioni dei modelli. È possibile utilizzare l'URL https://iam.cloud.ibm.com/identity/token
per generare un token IAM per IBM Cloud e utilizzare l'URL https://<$hostname>/icp4d-api/v1/authorize
per generare un token per Cloud Pak for Data.
È possibile utilizzare la richiesta POST /v1/deployments/{deployment_id}/online
per implementare la propria API di punteggio nei seguenti formati:
Request
{
"input_data": [{
"fields": [
"name",
"age",
"position"
],
"values": [
[
"john",
33,
"engineer"
],
[
"mike",
23,
"student"
]
]
}]
}
Risposta
{
"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
]
]
]
}]
}
Aggiungere la sottoscrizione personalizzata
Per aggiungere un abbonamento personalizzato, eseguire il seguente comando:
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
Per ottenere l'elenco di abbonamento, eseguire il seguente comando:
subscription_id = subscription_details.metadata.id
subscription_id
details: wos_client.subscriptions.get(subscription_id).result.to_dict()
Abilitare la registrazione del payload
Per abilitare la registrazione del payload in abbonamento, eseguire il seguente comando:
request_data = {'fields': feature_columns,
'values': [[payload_values]]}
Per ottenere i dettagli di registrazione, eseguire il seguente comando:
response_data = {'fields': list(result['predictions'][0]),
'values': [list(x.values()) for x in result['predictions']]}
Calcolare il punteggio e registrare il payload
Calcolare il punteggio del modello.
Memorizzare la richiesta e la risposta nella tabella di registrazione del payload
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)
Per le lingue diverse da Pythonè possibile anche registrare payload utilizzando una API REST.
Argomento principale: Motori di machine learning supportati, quadri e modelli