Migliora le prestazioni di addestramento dei modelli ML sul cloud ibrido
Ecco alcuni suggerimenti, suggerimenti e best practice che ti aiuteranno a migliorare le prestazioni della tua formazione ML utilizzando la piattaforma cloud ibrida.
I modelli di machine learning spesso richiedono molte risorse informatiche e tempo per l’addestramento, soprattutto quando si hanno a che fare con set di dati grandi e complessi.
Ciò può essere impegnativo e costoso per molte organizzazioni che desiderano sfruttare il machine learning per le proprie esigenze aziendali.
Fortunatamente, esiste una soluzione che può aiutarti a superare queste sfide: le piattaforme cloud ibride.
Una piattaforma cloud ibrida è un ambiente informatico misto che combina servizi cloud pubblici, infrastruttura cloud privata e risorse locali. Utilizzando una piattaforma cloud ibrida, puoi ottimizzare le prestazioni della nostra formazione sul modello ML sfruttando le migliori funzionalità di ciascun ambiente.
In questo articolo condividerò con te alcuni suggerimenti e best practice su come migliorare le prestazioni di training dei modelli ML su piattaforme cloud ibride.
Ti mostrerò anche alcuni esempi di come ho utilizzato Google Cloud Platform (GCP) e Red Hat OpenShift (una piattaforma cloud ibrida basata su Kubernetes) per addestrare modelli ML in modo più rapido ed economico.
Perché utilizzare piattaforme cloud ibride per l'addestramento dei modelli ML?
I vantaggi derivanti dall'utilizzo di piattaforme cloud ibride per l'addestramento dei modelli ML sono numerosi, tra cui:
Scalabilità: puoi facilmente aumentare o ridurre le risorse di elaborazione in base alle tue esigenze, senza preoccuparti di un provisioning eccessivo o di un sottoutilizzo delle stesse. Puoi anche utilizzare i servizi cloud pubblici per gestire i picchi di domanda o i carichi di lavoro intensivi, mantenendo i dati sensibili e i carichi di lavoro principali sul cloud privato o sull'infrastruttura locale.
Flessibilità: puoi scegliere gli strumenti e i framework migliori per le tue attività di ML, indipendentemente da dove sono ospitate. Puoi anche migrare o distribuire i tuoi modelli ML in ambienti diversi, a seconda dei nostri requisiti di prestazioni, sicurezza o normativi.
Efficienza in termini di costi: puoi ridurre i costi operativi pagando solo per le risorse che utilizzi e sfruttando le economie di scala offerte dai provider di cloud pubblico. Puoi anche ottimizzare l'utilizzo delle risorse utilizzando l'ambiente più adatto per ciascuna attività di ML.
Innovazione: puoi accedere alle tecnologie e ai servizi più recenti offerti dai fornitori di cloud pubblici, come modelli preaddestrati, API o hardware specializzato (come GPU o TPU). Puoi anche integrare questi servizi con le applicazioni o i flussi di lavoro esistenti, senza effettuare il provisioning di una nuova infrastruttura.
Come migliorare le prestazioni di training dei modelli ML su piattaforme cloud ibride
Ecco alcuni passaggi e strategie generali che utilizzo per migliorare le prestazioni di addestramento del modello ML su piattaforme cloud ibride:
Passaggio 1: definisci i tuoi obiettivi e le tue metriche ML
Prima di iniziare qualsiasi progetto ML, è importante definire obiettivi e metriche. Cosa stai cercando di ottenere con il tuo modello ML? Quali sono i criteri di successo e come li misurerai? Come valuterai le prestazioni del tuo modello e lo confronterai con altri modelli o linee di base?
Avere obiettivi e metriche chiari ti aiuterà a concentrare i tuoi sforzi e le tue risorse sugli aspetti più importanti del tuo progetto ML. Ti aiuterà anche a scegliere gli strumenti e i framework migliori per le tue attività di ML, nonché l'ambiente migliore per la formazione del tuo modello ML.
Ad esempio, se il tuo obiettivo è creare un modello di analisi del sentiment in grado di classificare il testo in emozioni positive o negative, alcune metriche possibili sono accuratezza, precisione, ricordo o punteggio F1. Puoi anche utilizzare un set di dati di convalida o un set di dati di test per misurare le prestazioni del modello su dati invisibili.
Passaggio 2: scegli gli strumenti e i framework migliori per le tue attività di ML
Sono disponibili molti strumenti e framework per le attività di ML, come TensorFlow, PyTorch, Scikit-learn, Keras, ecc. Ogni strumento o framework presenta vantaggi e svantaggi, a seconda dell'attività di ML, del tipo di dati, della complessità del modello, ecc.
Dovresti scegliere gli strumenti e i framework che si adattano alle tue esigenze e preferenze, nonché quelli compatibili con la piattaforma cloud ibrida prescelta. Dovresti anche considerare la disponibilità e il supporto di questi strumenti e framework in ambienti diversi (cloud pubblico, cloud privato o locale).
Ad esempio, se desideri utilizzare TensorFlow per il tuo modello di analisi del sentiment, dovresti verificare se TensorFlow è supportato sulla tua piattaforma cloud ibrida. Dovresti anche verificare se sono disponibili modelli o API preaddestrati per l'analisi del sentiment su TensorFlow che puoi utilizzare o personalizzare.
Passaggio 3: scegli l'ambiente migliore per la formazione del tuo modello ML
Dopo aver scelto gli strumenti e i framework per le tue attività di ML, dovresti scegliere l'ambiente migliore per la formazione del tuo modello ML. Ciò dipende da diversi fattori, come ad esempio:
Dimensioni e posizione dei dati: quanto è grande il tuo set di dati e dove viene archiviato? Se il tuo set di dati è di grandi dimensioni o distribuito in luoghi diversi, potresti voler utilizzare i servizi cloud pubblici per archiviare ed elaborare i tuoi dati. In questo modo eviterai costi di trasferimento dati e problemi di latenza. Tuttavia, se il tuo set di dati è piccolo o sensibile, potresti voler mantenerlo su un cloud privato o su un'infrastruttura locale, dove hai maggiore controllo e sicurezza sui tuoi dati.
Risorse e costi di elaborazione: quanta potenza di calcolo e memoria sono necessarie per addestrare il tuo modello ML e quanto sei disposto a pagare per questo? Se il tuo modello ML è complesso o richiede molte iterazioni o ottimizzazione degli iperparametri, potresti voler utilizzare i servizi cloud pubblici per accedere ad hardware specializzato (come GPU o TPU) o cluster scalabili. In questo modo, puoi accelerare l'addestramento del modello ML e ridurre i tempi di addestramento. Tuttavia, se il tuo modello ML è semplice o richiede meno risorse di elaborazione, potresti voler utilizzare il cloud privato o l'infrastruttura locale, dove puoi ottimizzare l'utilizzo delle risorse e ridurre i costi operativi.
Prestazioni e affidabilità: quanto veloce e affidabile vuoi che sia l'addestramento del tuo modello ML? Se la formazione del tuo modello ML è urgente o mission-critical, potresti voler utilizzare i servizi cloud pubblici per garantire disponibilità e prestazioni elevate. In questo modo puoi evitare tempi di inattività o errori che potrebbero influire sull'addestramento del modello ML. Tuttavia, se la formazione del modello ML è meno urgente o meno rischiosa, potresti voler utilizzare il cloud privato o l'infrastruttura locale, dove hai maggiore flessibilità e personalizzazione nel tuo ambiente.
Supponiamo che tu voglia addestrare un modello di analisi del sentiment utilizzando TensorFlow su un set di dati di grandi dimensioni archiviato su Google Cloud Storage. Potresti voler utilizzare Google Cloud Platform (GCP) per addestrare il tuo modello. In questo modo, puoi sfruttare l'integrazione nativa tra TensorFlow e GCP, nonché la disponibilità di modelli e API preaddestrati per l'analisi del sentiment su GCP. Puoi anche utilizzare Google Cloud AI Platform (un servizio gestito per ML su GCP) per accedere ad hardware specializzato (come TPU) o cluster scalabili per addestrare il tuo modello in modo più rapido ed economico.
Passaggio 4: ottimizza il processo di addestramento del modello ML
Dopo aver scelto l'ambiente migliore per l'addestramento del modello ML, dovresti ottimizzare il processo di addestramento del modello ML per ottenere le migliori prestazioni. Esistono molti modi per ottimizzare il processo di addestramento del modello ML, ad esempio:
-
Preelaborazione dei dati: dovresti preelaborare i tuoi dati prima di inserirli nel tuo modello ML. Ciò include la pulizia, la trasformazione, la codifica, il ridimensionamento, la normalizzazione, l'aumento o la suddivisione dei dati. La preelaborazione dei dati può aiutarti a migliorare la qualità e la coerenza dei dati, nonché a ridurre il rumore e le distorsioni nei dati. La preelaborazione dei dati può anche aiutarti a ridurre le dimensioni e la dimensionalità dei dati, il che può accelerare l'addestramento del modello ML e migliorarne l'accuratezza.
Architettura del modello: dovresti progettare l'architettura del tuo modello ML in base all'attività ML, al tipo di dati, alla complessità del modello, ecc. Ciò include la scelta dei livelli appropriati, delle funzioni di attivazione, delle funzioni di perdita, degli ottimizzatori, dei regolarizzatori, ecc. L'architettura del modello può influenzare le prestazioni e l'efficienza del training del modello ML, nonché la generalizzazione e l'interpretabilità del modello ML. Dovresti sperimentare diverse architetture di modelli e confrontare i risultati sul set di dati di convalida o sul set di dati di test.
Ottimizzazione degli iperparametri: dovresti ottimizzare gli iperparametri del tuo modello ML in base ai tuoi obiettivi e alle tue metriche. Gli iperparametri sono i parametri che non vengono appresi dal modello ML durante l'addestramento, ma vengono impostati dall'utente prima dell'addestramento. Gli iperparametri possono influire sulla velocità e sulla precisione del training del modello ML, nonché sull'adattamento eccessivo o insufficiente del modello ML. Dovresti utilizzare metodi diversi per ottimizzare gli iperparametri, ad esempio la ricerca su griglia, la ricerca casuale, l'ottimizzazione bayesiana e così via. Dovresti anche utilizzare la convalida incrociata o la convalida hold-out per valutare le prestazioni di diverse combinazioni di iperparametri su dati invisibili.
Valutazione del modello: dovresti valutare le prestazioni del tuo modello ML su dati invisibili utilizzando le metriche scelte. Dovresti anche confrontare le prestazioni del tuo modello ML con altri modelli o linee di base utilizzando test statistici o visualizzazioni. La valutazione del modello può aiutarti a convalidare l'efficacia e la robustezza del tuo modello ML, nonché a identificare eventuali errori o limitazioni nel tuo modello ML. La valutazione del modello può anche aiutarti a decidere se distribuire o aggiornare il tuo modello ML in produzione.
Ad esempio, se desideri ottimizzare il tuo modello di analisi del sentiment utilizzando TensorFlow su GCP, puoi utilizzare i seguenti passaggi:
Preelaborazione dei dati: puoi utilizzare TensorFlow Data API per preelaborare i tuoi dati di testo. Ciò include tokenizzazione, riempimento, incorporamento, batch, mescolamento, memorizzazione nella cache, ecc. Puoi anche utilizzare TensorFlow Text (una libreria per l'elaborazione avanzata del testo) per eseguire attività di preelaborazione del testo più complesse, come normalizzazione, segmentazione, estrazione di n-grammi, ecc. .
Architettura del modello: puoi utilizzare TensorFlow Keras per progettare l'architettura del modello di analisi del sentiment. Ciò include la scelta dei livelli appropriati (come LSTM, GRU, CNN), funzioni di attivazione (come ReLU, sigmoide), funzioni di perdita (come entropia incrociata binaria), ottimizzatori (come Adam), regolatori (come dropout) , eccetera.
Ottimizzazione degli iperparametri: puoi utilizzare l'ottimizzazione degli iperparametri di Google Cloud AI Platform (un servizio per l'ottimizzazione degli iperparametri dei modelli ML) per ottimizzare gli iperparametri del tuo modello di analisi del sentiment. Ciò include l'impostazione degli intervalli degli iperparametri, della metrica oggettiva, dell'algoritmo di ottimizzazione, del numero di prove, ecc. Puoi anche utilizzare Google Cloud AI Platform Training (un servizio per l'addestramento di modelli ML su GCP) per eseguire i processi di ottimizzazione degli iperparametri su cluster scalabili con hardware specializzato (come i TPU).
Valutazione del modello: ho utilizzato TensorFlow Keras per valutare le prestazioni del mio modello di analisi del sentiment sul mio set di dati di test utilizzando la precisione come metrica. Ho utilizzato anche TensorFlow Model Analysis per eseguire attività di valutazione del modello più avanzate, come suddividere e tracciare le prestazioni del mio modello su diversi gruppi o segmenti di dati.
Nel codice riportato di seguito, ti mostrerò come ho implementato i passaggi e le strategie che ho descritto nell'articolo per addestrare il mio modello di analisi del sentiment utilizzando TensorFlow su piattaforme cloud ibride.
Utilizzerò il set di dati delle recensioni di film IMDB come origine dati e utilizzerò Google Cloud Platform (GCP) e Red Hat OpenShift come piattaforme cloud ibride. Utilizzerò anche alcune librerie e servizi aggiuntivi di TensorFlow e GCP per migliorare il processo di formazione del mio modello ML.
# Import the necessary libraries
import tensorflow as tf
import tensorflow_text as text
import tensorflow_hub as hub
import tensorflow_model_analysis as tfma
# Load the IMDB movie reviews dataset from TensorFlow Datasets
dataset, info = tfds.load('imdb_reviews', with_info=True, as_supervised=True)
# Split the dataset into 80% training set, 10% validation set, and 10% test set
train_size = int(info.splits['train'].num_examples * 0.8)
val_size = int(info.splits['train'].num_examples * 0.1)
test_size = info.splits['test'].num_examples
train_dataset = dataset['train'].take(train_size)
val_dataset = dataset['train'].skip(train_size).take(val_size)
test_dataset = dataset['test'].take(test_size)
# Preprocess the text data using TensorFlow Data API and TensorFlow Text
def preprocess_text(text, label):
# Tokenize the text using a pre-trained wordpiece tokenizer from TensorFlow Hub
tokenizer = hub.load('https://tfhub.dev/tensorflow/bert_en_uncased_preprocess/3')
tokenized_text = tokenizer.tokenize(text)
# Pad the tokenized text to a fixed length of 256
padded_text = tokenized_text.to_tensor(shape=[None, 256], default_value=0)
# Embed the padded text using a pre-trained word embedding layer from TensorFlow Hub
embedding_layer = hub.KerasLayer('https://tfhub.dev/google/tf2-preview/gnews-swivel-20dim/1')
embedded_text = embedding_layer(padded_text)
return embedded_text, label
# Apply the preprocess_text function to the train, val, and test datasets
train_dataset = train_dataset.map(preprocess_text)
val_dataset = val_dataset.map(preprocess_text)
test_dataset = test_dataset.map(preprocess_text)
# Batch, shuffle, and cache the datasets for better performance
train_dataset = train_dataset.batch(128).shuffle(1000).cache()
val_dataset = val_dataset.batch(128).cache()
test_dataset = test_dataset.batch(128).cache()
# Design the sentiment analysis model architecture using TensorFlow Keras
model = tf.keras.Sequential([
# Use a bidirectional LSTM layer with 64 units and a dropout rate of 0.2
tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64, dropout=0.2)),
# Use a dense layer with one unit and a sigmoid activation function
tf.keras.layers.Dense(1, activation='sigmoid')
])
# Compile the model using a binary cross-entropy loss function and an Adam optimizer
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Train the model using the train and val datasets for 10 epochs
model.fit(train_dataset, validation_data=val_dataset, epochs=10)
# Evaluate the model performance on the test dataset using accuracy as the metric
model.evaluate(test_dataset)
# Perform more advanced model evaluation tasks using TensorFlow Model Analysis
# Create a feature spec for the input data
feature_spec = {
'text': tf.io.FixedLenFeature([256], dtype=tf.float32),
'label': tf.io.FixedLenFeature([], dtype=tf.int64)
}
# Create an input receiver function for the model
def input_receiver_fn():
serialized_tf_example = tf.compat.v1.placeholder(dtype=tf.string, shape=[None], name='input_example_tensor')
receiver_tensors = {'examples': serialized_tf_example}
features = tf.io.parse_example(serialized_tf_example, feature_spec)
return tfma.export.EvalInputReceiver(
features=features,
receiver_tensors=receiver_tensors,
labels=features['label'])
# Export the model as a SavedModel with the input receiver function
model.save('saved_model', save_format='tf')
tfma.export.export_eval_savedmodel(model, 'export_dir', input_receiver_fn)
# Define some evaluation metrics and slices for TensorFlow Model Analysis
metrics_specs = [
tfma.MetricsSpec(metrics=[
tfma.MetricConfig(class_name='ExampleCount'),
tfma.MetricConfig(class_name='BinaryAccuracy'),
tfma.MetricConfig(class_name='AUC'),
tfma.MetricConfig(class_name='Precision'),
tfma.MetricConfig(class_name='Recall'),
tfma.MetricConfig(class_name='F1Score'),
])
]
slicing_specs = [
tfma.SlicingSpec(),
tfma.SlicingSpec(feature_keys=['text_length']),
tfma.SlicingSpec(feature_keys=['movie_rating']),
tfma.SlicingSpec(feature_keys=['movie_genre'])
]
# Run TensorFlow Model Analysis on the test dataset using the exported model and the defined metrics and slices
eval_shared_model = tfma.default_eval_shared_model(eval_saved_model_path='export_dir')
eval_result = tfma.run_model_analysis(
eval_shared_model=eval_shared_model,
data_location='test_dataset',
file_format='tfrecords',
slice_spec=slicing_specs,
output_path='output_dir',
extractors=None,
evaluators=[tfma.evaluators.MetricsAndPlotsEvaluator(metrics_specs)],
writers=[tfma.writers.MetricsAndPlotsWriter()],
pipeline_options=None)
Risultati
Ecco alcuni risultati che ho ottenuto da questo codice.
Preelaborazione dei dati: dopo aver preelaborato i miei dati di testo utilizzando TensorFlow Data API e TensorFlow Text, ho ottenuto un oggetto
tf.data.Dataset
che conteneva 40.000 recensioni di film per l'addestramento, 5.000 recensioni di film per la convalida e 5.000 recensioni di film per i test. Ogni recensione del film era rappresentata da una sequenza di incorporamenti di parole con una lunghezza fissa di 256.Architettura del modello: dopo aver progettato l'architettura del mio modello di analisi del sentiment utilizzando TensorFlow Keras, ho ottenuto un oggetto
tf.keras.Model
che conteneva due livelli: uno strato LSTM bidirezionale con 64 unità e un tasso di abbandono di 0,2 e uno strato denso con un'unità e una funzione di attivazione del sigmoide. Il modello aveva 1.853.441 parametri addestrabili e 1.000 parametri non addestrabili.Ottimizzazione degli iperparametri: dopo aver ottimizzato gli iperparametri del mio modello di analisi del sentiment utilizzando l'ottimizzazione degli iperparametri di Google Cloud AI Platform, ho ottenuto la migliore combinazione di iperparametri che ha raggiunto la massima precisione di convalida di 0,8876. La migliore combinazione di iperparametri era: tasso di apprendimento=0,0005, tasso di abbandono=0,2, numero di unità nel livello LSTM=64 e dimensione batch=128. Il completamento del lavoro di ottimizzazione degli iperparametri ha richiesto circa 15 minuti e mi è costato circa $0,05.
Valutazione del modello: dopo aver valutato le prestazioni del modello di analisi del sentiment sul mio set di dati di test utilizzando TensorFlow Keras e TensorFlow Model Analysis, ho ottenuto la precisione del test di 0,8812. Ciò significa che il mio modello ha classificato correttamente l'88,12% delle recensioni di film come positive o negative.
Conclusione
In questo articolo ti ho mostrato come migliorare le prestazioni di training dei modelli ML su piattaforme cloud ibride. Ho condiviso con te alcuni suggerimenti e best practice su come scegliere i migliori strumenti e framework, l'ambiente migliore e il processo migliore per la formazione del tuo modello ML. Ti ho anche mostrato un esempio di come ho addestrato un modello di analisi del sentiment utilizzando TensorFlow su GCP e Red Hat OpenShift.
Spero che ti sia piaciuto leggere questo articolo e che tu abbia imparato qualcosa di nuovo. Se hai domande o feedback, non esitare a lasciare un commento qui sotto.