È possibile utilizzare Microsoft Azure ML Service per eseguire la registrazione del payload, la registrazione del feedback e per misurare l'accuratezza delle prestazioni, il rilevamento dei bias in fase di esecuzione, la spiegabilità e la funzione di auto-debias per le valutazioni dei modelli.
I seguenti Microsoft Azure Machine Learning sono supportati per la valutazione dei modelli:
Tabella 1. Dettagli supporto framework
Framework | Tipo di problema | Tipo di dati |
---|---|---|
Nativo | Classificazione | Structured |
scikit-learn | Classificazione | Structured |
scikit-learn | Regressione | Structured |
Per generare il modello di rilevamento della deviazione, è necessario utilizzare scikit-learn versione 0.20.2 nei notebook.
Azure Automated Machine Learning gestisce gli endpoint e i modelli Azure con notebook per le valutazioni dei modelli.
Aggiunta del servizio ML di Microsoft Azure
È possibile configurare le valutazioni dei modelli per lavorare con Microsoft Azure ML Service utilizzando uno dei seguenti metodi:
- Per la prima volta che si aggiunge un provider di apprendimento automatico, è possibile utilizzare l'interfaccia di configurazione. Per ulteriori informazioni, vedere Specificare un'istanza di Microsoft Azure ML Service.
- È 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 Microsoft Azure.
Vengono richiamati vari endpoint REST necessari per interagire con Azure ML Service. A tal fine, è necessario eseguire il binding del servizio Azure Machine Learning Service.
- Creare un principal di Azure Active Directory Service.
- Specificare i dettagli della credenziale quando si aggiunge il binding del servizio Azure ML Service, tramite l'interfaccia utente o l'SDK Python.
Requisiti per i file di richiesta e di risposta JSON
Affinché le valutazioni dei modelli funzionino con Azure ML Service, le distribuzioni di servizi Web create devono soddisfare determinati requisiti. Le distribuzioni del servizio web che si creano devono accettare richieste JSON e restituire risposte JSON, secondo i seguenti requisiti.
Formato richiesto per la richiesta JSON del servizio web
- Il corpo della richiesta API REST deve essere un documento JSON che contiene un array JSON di oggetti JSON
- L'array JSON deve essere denominato
"input"
. - Ogni oggetto JSON può includere solo semplici coppie di valore chiave, dove i valori possono essere una stringa, un numero,
true
,false
onull
- I valori non possono essere un oggetto o un array JSON
- Ogni oggetto JSON nella schiera deve avere tutti gli stessi tasti (e quindi il numero di chiavi) specificato, indipendentemente dal fatto che ci sia un valore non
null
disponibile
Il seguente file JSON di esempio soddisfa i requisiti precedenti e può essere utilizzato come modello per la creazione dei propri file di richiesta 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 richiesto per la risposta JSON del servizio web
Prendere nota dei seguenti elementi quando si crea un file di risposta JSON:
Il corpo della risposta API REST deve essere un documento JSON che contiene un array JSON di oggetti JSON
L'array JSON deve essere denominato
"output"
.Ogni oggetto JSON può includere solo coppie chiave - valore, dove i valori possono essere una stringa, un numero,
true
,false
,null
o una matrice che non contiene altri oggetti JSON o arrayI valori non possono essere un oggetto JSON
Ogni oggetto JSON nella schiera deve avere tutti gli stessi tasti (e il numero di chiavi) specificato, indipendentemente dal fatto che ci sia un valore non
null
disponibilePer i modelli di classificazione: il servizio web deve restituire un array di probabilità per ogni classe e l'ordine delle probabilità deve essere congruente per ogni oggetto JSON nell'array
- Esempio: supponiamo di avere un modello di classificazione binario che prevede il rischio di credito, dove le classi sono
Risk
oNo Risk
- Per ogni risultato restituito nell'array "output", l'oggetto deve contenere una coppia chiave-valore che include le probabilità in ordine fisso, nel formato:
{ "output": [ { "Scored Probabilities": ["Risk" probability,"No Risk" probability ] }, { "Scored Probabilities": ["Risk" probability,"No Risk" probability ] } ]
- Esempio: supponiamo di avere un modello di classificazione binario che prevede il rischio di credito, dove le classi sono
Per essere coerenti con gli strumenti visivi Azure ML utilizzati sia in Azure ML Studio e Service, utilizzare i seguenti nomi chiave:
- il nome chiave
"Scored Labels"
per la chiave di uscita che denota il valore previsto del modello - il nome chiave
"Scored Probabilities"
per la chiave di uscita che denota una schiera di probabilità per ogni classe
Il seguente file JSON di esempio soddisfa i requisiti precedenti e può essere utilizzato come modello per la creazione dei propri file di risposta JSON:
{
"output": [
{
"Scored Labels": "No Risk",
"Scored Probabilities": [
0.8922524675865824,
0.10774753241341757
]
},
{
"Scored Labels": "No Risk",
"Scored Probabilities": [
0.8335192848546905,
0.1664807151453095
]
}
]
}
Notebook di esempio
I seguenti notebook mostrano come operare con Microsoft Azure ML Service:
Specifica di un'istanza di Microsoft Azure ML Service
Il primo passo per configurare le valutazioni dei modelli è specificare un'istanza di Microsoft Azure ML Service. L'istanza di Azure ML Service è il luogo dove si memorizzano i modelli AI e le distribuzioni.
I modelli e le implementazioni di intelligenza artificiale sono collegati in un'istanza di Azure ML Service per la valutazione dei modelli. Per collegare il servizio, andare alla scheda Configura ', aggiungere un provider di apprendimento automatico e fare clic sull'icona Modifica '. Oltre ad un nome e una descrizione e se l'ambiente è Preproduzione o Produzione, è necessario fornire le seguenti informazioni:
- ID client: il valore stringa effettivo dell'ID client, che verifica chi è l'utente e autentica e autorizza le chiamate che si fanno ad Azure Service.
- Segreto client: il valore stringa effettivo del segreto, che verifica chi è l'utente e autentica e autorizza le chiamate che si fanno ad Azure Service.
- Tenant: l'ID tenant corrisponde alla propria organizzazione ed è un'istanza dedicata di Azure AD. Per trovare l'ID tenant, passare sopra il tuo nome account per ottenere la directory e l'ID tenant oppure selezionare Azure Active Directory > Proprietà> ID directory nel portale Azure .
- ID abbonamento: credenziali di sottoscrizione che identificano univocamente il tuo abbonamento Microsoft Azure . L'ID sottoscrizione forma parte dell'URI per ogni chiamata al servizio.
Consultare Come utilizzare il portale per creare un principal di applicazione e di servizio Azure AD in grado di accedere alle risorse per le istruzioni su come ottenere le proprie credenziali Microsoft Azure .
Ora si è pronti per selezionare i modelli distribuiti e configurare i monitor. I modelli distribuiti vengono visualizzati 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.
Registrazione del payload con il motore Microsoft Azure ML Service
Aggiungi il tuo motore Microsoft Azure ML Service
Un motore Runtime watsonx.ai IBM IBM è vincolato come Custom e consiste in metadati. Non esiste un'integrazione diretta con il servizio watsonx.ai Runtime non 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
È possibile visualizzare il bind del servizio con il seguente comando:
client.service_providers.list()
L'output di esempio:
uid name service_type created
410e730f-8462-45fe-8b41-a029d6d6043a My Azure ML Service engine azure_machine_learning_service2019-06-10T22:10:29.398Z
Aggiungere la sottoscrizione a Microsoft Azure ML Service
Aggiungere la sottoscrizione
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
Richiamare l'elenco di sottoscrizioni
subscription_id = subscription_details.metadata.id
subscription_id
details: wos_client.subscriptions.get(subscription_id).result.to_dict()
Abilitare la registrazione del payload
Abilitare la registrazione del payload nella sottoscrizione
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
Richiamare i dettagli della registrazione
subscription.payload_logging.get_details()
Calcolare il punteggio e registrare il payload
Calcolare il punteggio del modello. Per un esempio completo, consultare il Working with Azure Machine Learning Service Engine Notebook.
Memorizzare la richiesta e la risposta nella tabella di registrazione del payload:
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
)])
Per le lingue diverse da Pythonè possibile anche registrare payload utilizzando un'API REST.
Argomento principale: Motori di machine learning supportati, quadri e modelli