Argomento tradotto automaticamente È possibile passare alla versione ingleseConsultare la dichiarazione di non responsabilità
Fare riferimento alla versione inglese (originale) per visualizzare una versione più accurata e aggiornata di questa documentazione. IBM non è responsabile di eventuali danni o perdite derivanti dall'uso di contenuti tradotti automaticamente (machine translation).
Esercitazione federated Learning XGBoost per UI
Ultimo aggiornamento: 28 nov 2024
Esercitazione federated Learning XGBoost per UI
Questa esercitazione mostra l'uso dell'apprendimento federato con l'obiettivo di addestrare un modello di apprendimento automatico con i dati di diversi utenti senza che questi condividano i loro dati. Le operazioni vengono eseguite in un ambiente a basso codice con l'IU e con un framework XGBoost. Utilizzando il set di dati UCI: Adulti - Prevedere il reddito, il modello addestrato prevede se il reddito supera $50K/yr in base ai dati del censimento. Il set di dati è noto anche come "Census Income".
Questa è un'esercitazione dettagliata per l'esecuzione di un esperimento di apprendimento federato basato sull'IU. Per visualizzare un codice di esempio per un approccio basato sull'API, vai a Federated Learning XGBoost samples.
In questa esercitazione, admin fa riferimento all'utente che avvia l'esperimento Federated Learning e party fa riferimento a uno o più utenti che inviano i relativi risultati del modello dopo che l'esperimento è stato avviato dall'amministratore. Mentre l'esercitazione può essere eseguita dall'amministratore e da più parti, un singolo utente può anche completare un'esecuzione completa sia come amministratore che come parte. Per uno scopo dimostrativo più semplice, nella seguente esercitazione viene inoltrato un solo dataset da una parte. Per ulteriori informazioni sull'amministratore e sulla parte, vedere Terminologia.
Prerequisiti
Copy link to section
Verificare il Python versione
Copy link to section
Assicurati di utilizzare la stessa versione di Python dell'amministratore. L'utilizzo di una versione di Python differente potrebbe causare problemi di compatibilità. Per vedere le versioni Python compatibili con diversi framework, vedi Frameworks e Python version compatibility.
Aprire un progetto
Copy link to section
Utilizzare un progetto esistente o crearne uno nuovo. È necessario disporre almeno dell'autorizzazione di amministratore.
Associare il servizio watsonx.ai Runtime al progetto.
Nel tuo progetto, fai clic su Manage> Service & integrations.
Fare clic su Associa servizio.
Selezionare l'istanza di watsonx.ai Runtime dall'elenco e fare clic su Associa; oppure fare clic su Nuovo servizio se non si dispone di un'istanza.
Attività 1: avviare l'apprendimento federato
Copy link to section
In questa sezione creerai, configuri e avvierai un esperimento di apprendimento federato.
Compito 1a: Crea la risorsa dell'esperimento di apprendimento federato
Copy link to section
Nel tuo progetto, fai clic su Risorse scheda nel tuo progetto.
Clic Nuova risorsa > Addestra modelli su dati distribuiti per creare la risorsa dell'esperimento di apprendimento federato.
Immettere un Nome per l'esperimento e, facoltativamente, una descrizione.
Verificare l'istanza di watsonx.ai Runtime associata in Seleziona un'istanza di apprendimento automatico. Se non si vede associata un'istanza di watsonx.ai Runtime, seguire questi passaggi:
Fare clic su Associa un'istanza del servizio Machine Learning.
Selezionare un'istanza esistente e fare clic su Associaoppure creare un Nuovo servizio.
Fare clic su Ricarica per visualizzare il servizio associato.
Fare clic su Avanti.
Compito 1b: Configura l'esperimento
Copy link to section
Nella pagina Configura , selezionare Specifica hardware.
Nel menu a discesa Machine learning framework , seleziona scikit-learn.
Per il Tipo di modello, selezionare XGBoost.
Per il Metodo di fusione, selezionare Fusione classificazione XGBoost.
Fare clic su Avanti.
Compito 1c: Definire gli iperparametri
Copy link to section
Impostare il valore del campo Rounds su 5.
Accettare i valori predefiniti per il resto dei campi.
Fare clic su Avanti.
Compito 1d: Seleziona i sistemi di formazione a distanza
Copy link to section
Fare clic su Aggiungi nuovi sistemi.
Digita un nome per il tuo sistema di formazione remota.
In Identità consentite, selezionare l'utente che parteciperà all'esperimento e fare clic su Aggiungi. È possibile aggiungere un numero di identità consentite pari al numero di partecipanti in questa istanza di addestramento Esperimento federato. Per questo tutorial, scegli solo te stesso. Qualsiasi identità consentita deve essere un collaboratore del progetto e avere almeno Ammin autorizzazione. Aggiungi ulteriori sistemi ripetendo questo passaggio per ogni partecipante remoto che intendi utilizzare.
Una volta terminato, fare clic su Aggiungi sistemi.
Tornare alla pagina Seleziona sistemi di addestramento remoti , verificare che il sistema sia selezionato e fare clic su Avanti.
Compito 1e: Rivedi le impostazioni
Copy link to section
Rivedere le proprie impostazioni e fare clic su Crea.
Guarda lo stato. Lo stato dell'esperimento Federated Learning è In sospeso quando viene avviato. Quando l'esperimento è pronto per la connessione delle parti, lo stato cambia in Impostazione - In attesa di sistemi remoti. Questa operazione potrebbe richiedere alcuni minuti.
Clic Visualizza le informazioni di configurazione per scaricare la configurazione del party e lo script del connettore del party che è possibile eseguire sul party remoto.
Fare clic sull'icona Scarica configurazione accanto a ciascuno dei sistemi di formazione remota creati. Salva lo script del connettore del party in una directory sul tuo computer con il nome:
remote-test-system-configuration.py
Copy to clipboardCopiato negli appunti
Fare clic su Eseguito.
Controllare i progressi compiuti
Copy link to section
L'immagine seguente mostra l'esperimento con lo stato "in attesa di sistemi remoti".
Compito 2: Addestrare il modello come gruppo
Copy link to section
Per addestrare il modello, è necessario scaricare i set di dati, quindi modificare ed eseguire script Python. Segui questi passaggi per addestrare il modello come gruppo:
Compito 2a: Scarica i set di dati e gli script
Copy link to section
Crea una nuova directory locale e inserisci sposta lo script del connettore del party scaricato in Task 1e nella nuova directory.
Scaricare i seguenti file facendo clic con il pulsante destro del mouse sul nome del file, quindi fare clic su Salva collegamento come. Salvalo nella stessa directory dello script del connettore del party.
Verificare di disporre dello script del connettore del party, the Adulto set di dati, il gestore dati e il file di configurazione del log nella stessa directory. Se elenchi i file nella directory, dovresti vedere questi file:
Se utilizzi Windows o Linux, correrepip install 'ibm_watsonx_ai[fl-rt23.1-py3.10]' .
Se utilizzi Mac OS con CPU serie M e Conda, scarica il file script di installazione e poi corri./install_fl_rt23.1_macos.sh <name for new conda environment> .
Compito 2c: Modifica ed esegui lo script del connettore del party
Copy link to section
Modifica il file del connettore del partito,remote-test-systm-configuration.py e apportare le seguenti modifiche:
Aggiungi il seguente codice come seconda riga del file Python.
log_config_path = "log_config.yaml"
Copy to clipboardCopiato negli appunti
Fornisci le tue credenziali: incolla la chiave API per l'utente definito nel sistema di formazione remota. Se non si dispone di una chiave API, andare alla pagina delle chiavi API diIBM Cloud, fare clic su Crea chiave API, compilare i campi e fare clic su Crea.
Per il party_metadata campo, fornire il nome, il percorso e le informazioni, che dovrebbero essere simili al seguente testo JSON.
name: il nome classe definito per il gestore dati.
path: percorso dell'ubicazione del gestore dati.
info: creare una coppia di valori chiave per il tipo di file del dataset locale o il percorso del dataset.
Salva lo script del connettore del party.
Esegui lo script del connettore del party utilizzando uno dei duepython Opython3 a seconda di cosa hai installato.
python remote-test-system-configuration.py
Copy to clipboardCopiato negli appunti
Dall'interfaccia utente puoi monitorare lo stato del tuo esperimento di apprendimento federato. Quando tutte le parti partecipanti si collegano all'aggregatore, l'aggregatore facilita l'addestramento del modello locale e l'aggiornamento del modello globale. Lo stato è Formazione. È possibile monitorare lo stato dell'esperimento Federated Learning dall'interfaccia utente. Una volta completata la formazione, il gruppo riceve unReceived STOP message sulla festa. Ora, puoi salvare il modello preparato e distribuirlo in uno spazio.
Controllare i progressi
Copy link to section
L'immagine seguente mostra l'esperimento completato.
Attività 3: salva e distribuisci il modello online
Copy link to section
In questa sezione, imparerai come salvare e distribuire il modello che hai addestrato.
Compito 3a: Salva il tuo modello
Copy link to section
Nell'esperimento di Federated Learning completato, fai clic su Salva aggregato.
Sul Salva il modello aggregato nel progetto schermata, digitare un nome per il modello. e fare clic Creare.
Quando vedi la notifica che il modello è stato creato, fai clic su Visualizza nel progetto. Se perdi la notifica, fai clic sul nome del progetto per tornare alla scheda delle risorse e fai clic sul nome del modello per visualizzarlo.
Compito 3b: Promuovere il modello in uno spazio
Copy link to section
Nella sezione Modelli , fare clic sul modello per visualizzare la pagina dei dettagli.
Fare clic su Promuovi per lo spazio di distribuzione '.
Scegli un Spazio di destinazione dall'elenco o creare un nuovo spazio di distribuzione.
Selezionare Crea un nuovo spazio di distribuzione.
Digitare un nome per lo spazio di distribuzione.
Seleziona il tuo servizio di archiviazione.
Seleziona il tuo servizio di machine learning.
Fare clic su Crea.
Una volta creato lo spazio di distribuzione, chiudere la finestra.
Seleziona l'opzione Vai al modello nello spazio dopo averlo promosso .
Fare clic su Promuovi.
Compito 3c: Creare e visualizzare la distribuzione online
Copy link to section
Quando il modello viene visualizzato nello spazio di distribuzione, fare clic su Nuova distribuzione.
Selezionare In linea come Tipo di distribuzione.
Specificare un nome per la distribuzione.
Fare clic su Crea.
Attendi che lo stato della distribuzione venga modificato in Distribuito, quindi fare clic sul nome della distribuzione.
Visualizza gli endpoint e gli snippet di codice per utilizzare questa distribuzione nella tua applicazione.
Controllare i progressi
Copy link to section
L'immagine seguente mostra la distribuzione online,
Compito 4: valutazione del modello
Copy link to section
In questa sezione si apprende come creare una funzione Python per elaborare i dati dei punteggi e assicurarsi che siano nello stesso formato usato durante l'addestramento. Per un confronto, si ottiene anche il punteggio del set di dati grezzi chiamando la funzione Python che abbiamo creato.
È possibile creare uno script Python ed eseguirlo localmente, oppure creare un blocco note Jupyter ed eseguire il codice nel blocco note.
Impostazione dell'ambiente
Copy link to section
Questo codice importa la libreria e il pacchetto necessari e imposta le credenziali per accedere al client API di apprendimento automatico.
# import the library and package and set the credentialsfrom ibm_watsonx_ai import APIClient
wml_credentials = {
"url": "https://us-south.ml.cloud.ibm.com",
"apikey": "<insert-api-key-here>"
}
client = APIClient(wml_credentials)
client.set.default_space('<insert-deployment-space-id-here>')
software_spec_id = client.software_specifications.get_id_by_name('default_py3.10')
Copy to clipboardCopiato negli appunti
Incollare la chiave API di IBM Cloud nel campo apikey.
Incollare l'ID dello spazio di distribuzione. Seguite questi passaggi per trovare l'ID dello spazio di distribuzione.
Copiare il GUID dello spazio e incollarlo al posto di <insert-deployment-space-id-here> nel codice.
Caricare il set di dati
Copy link to section
Questo codice legge il set di dati memorizzato nell'hub delle risorse.
# read the data setimport pandas as pd
import io
import requests
url = "https://api.dataplatform.cloud.ibm.com/v2/gallery-assets/entries/5fcc01b02d8f0e50af8972dc8963f98e/data"
s = requests.get(url).content
adult_csv = pd.read_csv(io.StringIO(s.decode('utf-8')))
adult_csv.head(5)
Copy to clipboardCopiato negli appunti
Creare il set di dati di addestramento
Copy link to section
Questo codice sceglie 10 righe casuali dal set di dati per l'assegnazione del punteggio.
# choose 10 random rows for the test data set
training_data = adult_csv.sample(n=10)
training_data.head(10)
Copy to clipboardCopiato negli appunti
Definire la funzione per preparare i dati di tracciamento
Copy link to section
Questo codice definisce una funzione per caricare i dati del punteggio nel loro formato grezzo ed elaborare i dati esattamente come è stato fatto durante l'allenamento. Quindi, attribuire un punteggio ai dati elaborati
Il codice esegue la seguente preelaborazione sui dati di addestramento e di test degli adulti:
Eliminare le seguenti caratteristiche: 'classe di lavoro', 'classe di età', 'istruzione', 'stato civile', 'occupazione', 'relazione', 'guadagno di capitale', 'perdita di capitale', 'ore settimanali', 'paese di origine'
Ulteriori dettagli in Kamiran, F. e Calders, T. Tecniche di pre-elaborazione dei dati per la classificazione senza discriminazione
Dividere le colonne "età" e "istruzione" in più colonne in base al valore
# define the preprocess function to prepare the data for scoringdefpreprocess(training_data):
iflen(training_data.columns)==15:
# drop 'fnlwgt' column
training_data = training_data.drop(training_data.columns[2], axis='columns')
training_data.columns = ['age',
'workclass',
'education',
'education-num',
'marital-status',
'occupation',
'relationship',
'race',
'sex',
'capital-gain',
'capital-loss',
'hours-per-week',
'native-country',
'class']
# filter out columns unused in training, and reorder columns
training_dataset = training_data[['race', 'sex', 'age', 'education-num', 'class']]
# map 'sex' and 'race' feature values based on sensitive attribute privileged/unpriveleged groups
training_dataset['sex'] = training_dataset['sex'].map({
' Female': 0,
' Male': 1
})
training_dataset['race'] = training_dataset['race'].map({
' Asian-Pac-Islander': 0,
' Amer-Indian-Eskimo': 0,
' Other': 0,
' Black': 0,
' White': 1
})
# map 'class' values to 0/1 based on positive and negative classification
training_dataset['class'] = training_dataset['class'].map({' <=50K': 0, ' >50K': 1})
training_dataset['age'] = training_dataset['age'].astype(int)
training_dataset['education-num'] = training_dataset['education-num'].astype(int)
# split age column into category columnsfor i inrange(8):
if i != 0:
training_dataset['age' + str(i)] = 0for index, row in training_dataset.iterrows():
if row['age'] < 20:
training_dataset.loc[index, 'age1'] = 1elif ((row['age'] < 30) & (row['age'] >= 20)):
training_dataset.loc[index, 'age2'] = 1elif ((row['age'] < 40) & (row['age'] >= 30)):
training_dataset.loc[index, 'age3'] = 1elif ((row['age'] < 50) & (row['age'] >= 40)):
training_dataset.loc[index, 'age4'] = 1elif ((row['age'] < 60) & (row['age'] >= 50)):
training_dataset.loc[index, 'age5'] = 1elif ((row['age'] < 70) & (row['age'] >= 60)):
training_dataset.loc[index, 'age6'] = 1elif row['age'] >= 70:
training_dataset.loc[index, 'age7'] = 1# split age column into multiple columns
training_dataset['ed6less'] = 0for i inrange(13):
if i >= 6:
training_dataset['ed' + str(i)] = 0
training_dataset['ed12more'] = 0for index, row in training_dataset.iterrows():
if row['education-num'] < 6:
training_dataset.loc[index, 'ed6less'] = 1elif row['education-num'] == 6:
training_dataset.loc[index, 'ed6'] = 1elif row['education-num'] == 7:
training_dataset.loc[index, 'ed7'] = 1elif row['education-num'] == 8:
training_dataset.loc[index, 'ed8'] = 1elif row['education-num'] == 9:
training_dataset.loc[index, 'ed9'] = 1elif row['education-num'] == 10:
training_dataset.loc[index, 'ed10'] = 1elif row['education-num'] == 11:
training_dataset.loc[index, 'ed11'] = 1elif row['education-num'] == 12:
training_dataset.loc[index, 'ed12'] = 1elif row['education-num'] > 12:
training_dataset.loc[index, 'ed12more'] = 1
training_dataset.drop(['age', 'education-num'], axis=1, inplace=True)
# move class column to be last column
label = training_dataset['class']
training_dataset.drop('class', axis=1, inplace=True)
training_dataset['class'] = label
return training_dataset
Copy to clipboardCopiato negli appuntiShow more
Elaborare i dati di formazione
Copy link to section
Questo codice utilizza la funzione preprocess per preparare i dati.
# use the preprocess function to prepare the data
processed_dataset = preprocess(training_data)
# drop class column
processed_dataset.drop('class', inplace=True, axis='columns')
processed_dataset.head(10)
Questo codice invia una richiesta di punteggio al modello utilizzando lo scoring_dataset. In questo codice è necessario includere l'ID dell'impiego online. Seguite questi passaggi per trovare l'ID di distribuzione online.
Nel riquadro Informazioni, copiare l'Identificazione dell'installazione e incollarlo al posto di <insert-your-online-deployment-id-here> nella cella sottostante.
# score data
prediction = client.deployments.score('<insert-your-online-deployment-id-here>', scoring_dataset)
print("Predictions and probabilities: ")
prediction_formatted = json.dumps(prediction, indent=2)
print(prediction_formatted)
Copy to clipboardCopiato negli appunti
Controllare i progressi
Copy link to section
L'immagine seguente mostra le previsioni e le probabilità della richiesta di punteggio completata.