{"id":2402,"date":"2021-01-22T10:23:28","date_gmt":"2021-01-22T09:23:28","guid":{"rendered":"https:\/\/blog.besharp.it\/?p=2402"},"modified":"2021-03-17T15:33:08","modified_gmt":"2021-03-17T14:33:08","slug":"clustering-con-sagemaker-experiments-un-caso-duso-reale","status":"publish","type":"post","link":"https:\/\/blog.besharp.it\/it\/clustering-con-sagemaker-experiments-un-caso-duso-reale\/","title":{"rendered":"Clustering con SageMaker Experiments: un caso d\u2019uso reale"},"content":{"rendered":"\n
Lo sviluppo di un modello di Machine Learning<\/strong> \u00e8 un processo altamente iterativo, con continui cicli di feedback ottenuti da test e prove precedenti, molto pi\u00f9 somigliante ad un esperimento scientifico che ad un progetto di sviluppo. Amazon mette a disposizione diversi strumenti per aiutare i Data Scientist a trovare il corretto set di parametri per i loro modelli. Se il progetto \u00e8 grande abbastanza, sono di solito coinvolti molteplici ingegneri a pi\u00f9 livelli. Di conseguenza \u00e8 fondamentale mantenere un progetto il pi\u00f9 strutturato possibile, cos\u00ec come trovare metodologie efficaci per condividere tutti i dataset, i notebook, gli iperparametri e naturalmente i risultati.<\/p>\n\n\n\n I componenti principali di un progetto di Machine Learning, di cui sono necessari versionamenti, indicizzazione e condivisione tra tutti i Data Scientists coinvolti, sono:<\/p>\n\n\n\n Ogni membro del team dovrebbe sempre avere chiaro qualsiasi sia l\u2019ultima versione di ogni componente citato, ed essere cos\u00ec in grado di ricercare velocemente risultati e artefatti di ogni precedente versione dei processi e delle prove effettuate.<\/p>\n\n\n\n Per venire incontro ai Data Scientists nei processi di gestione e strutturazione dei progetti di ML, Amazon ha rilasciato un nuovo servizio: SageMaker Experiments. In questo articolo, vi presentiamo dunque un caso d\u2019uso reale in cui abbiamo fatto uso estensivo di SageMaker Experiments.<\/p>\n\n\n\n Il progetto aveva come scopo la gestione del clustering di un dataset di clienti molto sparso, contenente diversi milioni di tuple, per estrarre informazioni comportamentali. La struttura del dataset e le feature disponibili avevano reso la scelta dell\u2019algoritmo di clustering e il tuning degli iperparametri tutt\u2019altro che semplice. Dopo diverse iterazioni, abbiamo notato che il risultato pi\u00f9 stabile si \u00e8 ottenuto mediante DBSCAN dopo aver effettuato una riduzione di dimensionalit\u00e0 con UMAP (Uniform Manifold Approximation and Projection). L\u2019analisi KNN \u00e8 servita a trovare il valore ottimo del raggio (eps) per DBSCAN.<\/p>\n\n\n\n UMAP, DBSCAN e KNN sono algoritmi che traggono peraltro grande giovamento dalla parallelizzazione via GPU. <\/p>\n\n\n\n Per garantire la massima efficienza nell\u2019effettuare il clustering del dataset, abbiamo deciso di usare il framework RapidsAI, che include la versione GPU per CUDA di tutti gli algoritmi da noi menzionati e necessari alla nostra pipeline. Per installare RapidsAI, possiamo partire dal sito della libreria<\/a>.<\/a> Qui \u00e8 possibile trovare i comandi di installazione per Conda Python3<\/strong>, che \u00e8 proprio ci\u00f2 che ci serviva per la nostra istanza di testing di SageMaker:<\/p>\n\n\n\n Dopo aver eseguito i comandi, sar\u00e0 possibile eseguire il nuovo Kernel Jupiter, ma per farlo dovrete chiudere e riaprire il notebook, quindi selezionare \u201cKernel\u201d -> \u201cChange Kernel\u201d; fatto questo potrete scegliere il nuovo Kernel RapidsAI appena installato.<\/p>\n\n\n\n Nota: <\/strong>ogni volta che si stoppa un\u2019istanza di SageMaker ogni custom Kernel viene perso perch\u00e8 non fa parte dell\u2019immagine standard che viene associata all\u2019istanza, quindi \u00e8 necessario procedere di nuovo alla procedura di installazione vista precedentemente. <\/em><\/p>\n\n\n\n Alcuni metodi tipici di partizione come K-means o clustering PAM sono particolarmente adatti a trovare cluster sferici o, pi\u00f9 in generale, convessi. Di solito funzionano molto bene per cluster compatti e ben separati, pressappoco della stessa dimensione. Di solito sono per\u00f2 sensibili alla presenza di forte anisotropia nei dati (rumore e outlier).<\/p>\n\n\n\n Anche se possono dunque sembrare pi\u00f9 che adatti in molte situazioni, ve ne sono molti altri in cui non solo non lo sono, ma in particolare, performano veramente male con:<\/p>\n\n\n\n
I Data Scientists sono soliti effettuare molti training su modelli differenti ogni giorno, cercando di trovare quello pi\u00f9 robusto per lo scenario su cui stanno lavorando e tenere traccia di tutti i processi svolti si rivela spesso un compito sfidante, anche in un progetto seguito da una singola persona.<\/p>\n\n\n\n
Servizi come Automatic Model Tuning e Amazon SageMaker Autopilot, giungono in aiuto, aiutando ad esplorare velocemente e automaticamente grosse sezioni dello spazio di fase. Tuttavia questi servizi contribuiscono, inevitabilmente, anche alla crescita senza fine di gruppi di parametri per i training e artefatti dei modelli compilati.<\/p>\n\n\n\n
Questo nuovo componente di Amazon SageMaker ha come scopo proprio quello di risolvere questa sfida gestionale, fornendo una vista unificata per tutti questi parametri, per i training effettuati e per gli artefatti di output.<\/p>\n\n\n\nClustering dei clienti<\/h2>\n\n\n\n
Abbiamo testato diversi tipi di algoritmi di clustering (Kmeans, Gaussian mixture, DBSCAN) con differenti combinazioni di feature. Per scoprire inoltre quelle pi\u00f9 rilevanti per il clustering stesso abbiamo utilizzato la tecnica PCA e i valori di correlazioni tra le variabili in gioco.<\/p>\n\n\n\nTraining con SageMaker su AWS con istanze GPU<\/h2>\n\n\n\n
AWS offre diversi tagli per le istanze GPU di SageMaker. Per il nostro carico di lavoro abbiamo selezionato una ml.p3.2xlarge per il testing e l\u2019esplorazione dei dati e una ml.g4dn.2xlarge per il training dei modelli.<\/p>\n\n\n\nInstallare RapidsAI su una istanza di ML<\/h2>\n\n\n\n
conda create -n rapids-0.17 -c rapidsai -c nvidia -c conda-forge \\\n -c defaults rapids-blazing=0.17 python=3.7 cudatoolkit=10.1\n<\/pre>\n\n\n\n
DBSCAN<\/h2>\n\n\n\n