Origini dati per il calcolo del punteggio delle distribuzioni batch

È possibile fornire i dati di input per un lavoro di distribuzione batch in diversi modi, incluso il caricamento diretto di un file o la fornitura di un collegamento alle tabelle del database. I tipi di dati di input consentiti variano in base al tipo di lavoro di distribuzione che viene creato.

Per i tipi di input supportati per framework, fai riferimento a Batch deployment input details by framework.

I dati di input possono essere forniti a un lavoro batch come dati in linea o riferimento dati.

Tipi di input disponibili per distribuzioni batch per framework e tipo di asset

Tipi di input disponibili per distribuzioni batch per framework e tipo di asset
Framework Tipo di distribuzione batch
Decision Optimization Inline e riferimento
Python funzione In linea
PyTorch Inline e riferimento
Tensorflow Inline e riferimento
Scikit-learn Inline e riferimento
Script Python Riferimenti
Spark MLlib Inline e riferimento
SPSS Inline e riferimento
XGBoost Inline e riferimento

Descrizione dati in linea

I dati di input di tipo seriale per l'elaborazione batch sono specificati nel payload del lavoro di distribuzione batch. Ad esempio, è possibile passare un file CSV come input di distribuzione nell'interfaccia utente o come valore per il parametro scoring.input_data in un notebook. Una volta completato il lavoro di distribuzione batch, l'output viene scritto nel corrispondente parametro di metadati scoring.predictions del lavoro.

Descrizione riferimento dati

I dati di input e output di tipo riferimento dati utilizzati per l'elaborazione batch possono essere memorizzati:

  • In un'origine dati remota, ad esempio un bucket di archiviazione nel cloud o un database SQL o no-SQL.
  • Come un asset di dati locale o gestito in un spazio di distribuzione.

I dettagli per i riferimenti dati includono:

  • Il riferimento dell'origine dati type dipende dal tipo di asset. Fare riferimento alla sezione Tipi di riferimento origine dati in Aggiunta di asset di dati a uno spazio di distribuzione.

  • Per il tipo data_asset , il riferimento ai dati di input deve essere specificato come /v2/assets href nel parametro input_data_references.location.href nel payload del lavoro di distribuzione. L'asset di dati specificato è un riferimento a un asset di dati locale o connesso. Inoltre, se i dati di output del lavoro di distribuzione batch devono essere conservati in un'origine dati remota, i riferimenti ai dati di output devono essere specificati come parametro output_data_reference.location.name nel payload del lavoro di distribuzione.

  • I riferimenti data_asset di input e output devono trovarsi nello stesso ID spazio della distribuzione batch.

  • Se i dati di output del lavoro di distribuzione batch devono essere resi persistenti in uno spazio di distribuzione come asset locale, è necessario specificare output_data_reference.location.name . Quando il lavoro di distribuzione batch viene completato correttamente, l'asset con il nome specificato viene creato nello spazio.

  • I dati di output possono contenere informazioni su dove si trova l'asset di dati in un database remoto. In questa situazione, è possibile specificare se accodare l'output batch alla tabella o troncare la tabella e aggiornare i dati di output. Utilizzare il parametro output_data_references.location.write_mode per specificare i valori truncate o append.

    • Specificando truncate come valore si tronca la tabella e si inseriscono i dati di output batch.
    • Se si specifica append come valore, i dati di output batch vengono accodati alla tabella del database remoto.
    • write_mode è applicabile solo per il parametro output_data_references .
    • write_mode è applicabile solo alle risorse di dati in database remoti. Questo parametro non è applicabile alle risorse di dati locali o alle risorse situate in un bucket di archiviazione cloud locale.

Payload data_asset di esempio

"input_data_references": [{
    "type": "data_asset",
    "connection": {
    },
    "location": {
        "href": "/v2/assets/<asset_id>?space_id=<space_id>"
    }
}]

Payload connection_asset di esempio

"input_data_references": [{
    "type": "connection_asset",
    "connection": {
        "id": "<connection_guid>"
    },
    "location": {
        "bucket": "<bucket name>",
        "file_name": "<directory_name>/<file name>"
    }
    <other wdp-properties supported by runtimes>
}]

Strutturazione dei dati di input

La struttura dei dati di input, noti anche come payload, per il lavoro batch dipende dal framework per l'asset che si sta distribuendo.

Un file di input .csv o altri formati di dati strutturati devono essere formattati in modo da corrispondere allo schema dell'asset. Elencare i nomi colonna (campi) nella prima riga e i valori di cui calcolare il punteggio nelle righe successive. Ad esempio, vedere il seguente frammento di codice:

PassengerId, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin, Embarked
1,3,"Braund, Mr. Owen Harris",0,22,1,0,A/5 21171,7.25,,S
4,1,"Winslet, Mr. Leo Brown",1,65,1,0,B/5 200763,7.50,,S

Un file di input JSON deve fornire le stesse informazioni su campi e valori, utilizzando questo formato:

{"input_data":[{
        "fields": [<field1>, <field2>, ...],
        "values": [[<value1>, <value2>, ...]]
}]}

Ad esempio:

{"input_data":[{
        "fields": ["PassengerId","Pclass","Name","Sex","Age","SibSp","Parch","Ticket","Fare","Cabin","Embarked"],
        "values": [[1,3,"Braund, Mr. Owen Harris",0,22,1,0,"A/5 21171",7.25,null,"S"],
                  [4,1,"Winselt, Mr. Leo Brown",1,65,1,0,"B/5 200763",7.50,null,"S"]]
}]}

Preparazione di un payload che corrisponde allo schema di un modello esistente

Fare riferimento a questo codice di esempio:

model_details = client.repository.get_details("<model_id>")  # retrieves details and includes schema
columns_in_schema = []
for i in range(0, len(model_details['entity']['schemas']['input'][0].get('fields'))):
    columns_in_schema.append(model_details['entity']['schemas']['input'][0].get('fields')[i]['name'])

X = X[columns_in_schema] # where X is a pandas dataframe that contains values to be scored
#(...)
scoring_values = X.values.tolist()
array_of_input_fields = X.columns.tolist()
payload_scoring = {"input_data": [{"fields": [array_of_input_fields],"values": scoring_values}]}