Vai al contenuto principale
Cloud

Cloud computing e architettura per data scientist

Scopri come i data scientist usano il cloud per mettere in produzione soluzioni di data science o per ampliare la potenza di calcolo.
Alex Castrounis's photo
Alex Castrounis
Aggiornato · 13 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

Crea il tuo account gratuito

Pratica and corso your progress.

Continua Con Google
Continuando, accetti i nostri Termini di utilizzo, la nostra Informativa sulla privacy e che i tuoi dati siano conservati negli Stati Uniti.

Data science scalabile oltre la macchina locale

Data science è un termine che rappresenta l'intersezione di molte cose importanti.

Credo che ci siano dei pilastri dell'expertise in data science, ovvero:

  • Dominio di business
  • Probabilità e statistica
  • Informatica e programmazione software
  • Comunicazione scritta e orale

Il terzo cosiddetto pilastro riguarda la comprensione dell'informatica e della programmazione software.

Anche se potrebbe non essere subito evidente a chi si avvicina alla data science, questa area spesso include anche aspetti come devops, cloud computing, pipeline di dati, data engineering, esperienza nell'interrogare diversi tipi di database, creazione e deploy di soluzioni software di produzione, e così via.

Inoltre, i data scientist devono sviluppare solide competenze di programmazione, ma potrebbero non avere la stessa formazione o esperienza in informatica, concetti di programmazione o architettura e infrastruttura software di produzione rispetto a ingegneri software ben formati o con molta esperienza. Quando si inizia in data science, ci si ritrova a installare Python e/o R sul proprio computer locale, per poi scrivere ed eseguire codice in un IDE locale (Integrated Development Environment) come l'applicazione Jupyter Notebook o RStudio.

In aggiunta, man mano che l'analisi avanzata diventa più diffusa e i team di data science crescono, aumenta il bisogno di soluzioni collaborative per fornire insight, analisi predittive, sistemi di raccomandazione e così via. La ricerca riproducibile e gli strumenti a notebook combinati con il controllo del codice sorgente fanno parte della soluzione per la collaborazione, così come l'uso di strumenti e piattaforme online collaborative basate sul cloud.

Le esigenze collaborative si estendono anche a chi è al di fuori dei team di data science, soprattutto perché la data science viene ampiamente impiegata per raggiungere obiettivi di business. Pertanto, gli stakeholder di un progetto di data science possono includere dirigenti, responsabili di reparto e altri membri del team dati come architetti, data engineer, analyst e così via.

Questo articolo vuole offrire ai data scientist una panoramica di ciò che c'è oltre il laptop o il desktop locale, in particolare nel contesto di mettere in produzione soluzioni di data science, o di espandere la tua potenza e le tue capacità di calcolo. A seconda della tua esperienza con questi temi, il contenuto dovrebbe essere rilevante per data scientist di tutti i livelli.

Iniziamo!

Che cos'è esattamente il cloud?

Ah sì, il famigerato e ancora spesso poco compreso cloud. Oltre a suonare molto ipotetico e astratto, il cloud ha in realtà un significato molto concreto. Definiamo alcuni concetti chiave prima di passare al concetto di cloud.

I computer connessi tra loro che condividono risorse sono chiamati una rete, con Internet stessa che è l'esempio più grande e famoso di rete di computer. Le reti domestiche, come una LAN (Local Area Network) o un SSID Wi-Fi (Service Set Identifier), in cui più computer sono connessi, sono un altro esempio, anche se molto più piccolo. Le risorse descritte qui possono includere pagine web, media, archiviazione dati, server di applicazioni, stampanti, ecc.

I computer in una rete sono solitamente chiamati nodi e comunicano tra loro usando protocolli ben definiti come HTTP (HyperText Transfer Protocol), TCP/IP (Transmission Control Protocol/Internet Protocol) e così via. Queste comunicazioni possono servire per aggiornamenti di stato, monitoraggio, richieste/risposte e molti altri usi.

Inoltre, spesso i computer non si trovano on-premise, il che significa che applicazioni e dati sono spesso ospitati su computer situati in un data center. Questi luoghi forniscono tutta l'infrastruttura necessaria, come alimentazione, raffreddamento, sicurezza, protezione dai disastri, ecc., per mantenere e far funzionare correttamente un gran numero di computer accessibili alle aziende o, in generale, al mondo esterno.

Poiché nel tempo computer e storage sono diventati relativamente economici, molte soluzioni oggi impiegano più computer che lavorano insieme e che non sono troppo costosi da scalare, invece di scalare acquistando una singola macchina di calcolo super potente e molto costosa. Parte di questo "lavorare insieme" serve a garantire che la soluzione continui a funzionare automaticamente anche se uno dei computer si guasta e che il sistema sia in grado di scalare automaticamente per gestire qualsiasi carico imposto sul sistema.

Twitter, Facebook, Instagram, Snapchat, Netflix e YouTube sono esempi perfetti di applicazioni basate sul cloud che devono scalare in entrambi questi modi. È altamente improbabile vedere le loro applicazioni "andare giù" completamente e sono anche in grado di gestire letteralmente milioni di utenti giornalieri che interagiscono con le loro piattaforme.

Quando un certo gruppo di computer è connesso alla stessa rete e lavora insieme per svolgere lo stesso compito o un insieme di compiti, si parla di un cluster. Un cluster può essere visto come un singolo computer, ma può offrire enormi miglioramenti in termini di prestazioni, disponibilità e scalabilità rispetto a una singola macchina. Questi vantaggi saranno discussi più avanti in questo post.

Il termine calcolo distribuito o sistemi distribuiti si riferisce a software e sistemi progettati per sfruttare i cluster per svolgere compiti specifici, come Hadoop, Spark e MapReduce.

Infine, arriviamo alla definizione di cloud. Oltre alle risorse condivise descritte sopra, altre risorse importanti di una soluzione possono includere server, servizi, microservizi, reti e così via. Un cloud descrive la situazione in cui un'unica entità possiede, amministra e gestisce un gruppo di computer in rete e di risorse condivise, tipicamente per ospitare e fornire soluzioni software. Dato questa definizione, sebbene Internet sia sicuramente considerata una rete, non è un cloud poiché non è di proprietà di un'unica entità.

Per approfondire il cloud computing e discutere i concetti chiave nella creazione di software scalabile e architetture di big data, dai un'occhiata alla mia serie approfondita in tre parti su questo argomento.

Data science nel cloud

In questo post abbiamo trattato il cloud computing e altri concetti correlati con sufficiente profondità da illustrare le idee in gioco. Se finora la tua esposizione ad architettura e ingegneria del software è limitata allo sviluppo locale, potresti chiederti perché tutto questo sia rilevante per i data scientist. Lo vediamo subito.

Se conosci il processo di data science, sai che spesso gran parte del flusso di lavoro viene svolta sul computer locale del data scientist. Il computer ha installati i linguaggi preferiti, come Python e R, e anche l'IDE preferito dal data scientist. L'altro setup principale dell'ambiente di sviluppo consiste nell'installare i pacchetti rilevanti tramite un gestore di pacchetti come Anaconda, o installando singolarmente i pacchetti a mano.

Una volta impostato l'ambiente di sviluppo e tutto pronto, inizia il tipico flusso di lavoro o processo di data science, con i dati come unico altro elemento necessario nella maggior parte dei casi. I passaggi iterativi del flusso di lavoro includono tipicamente:

  • Acquisire i dati
  • Effettuare parsing, munging, wrangling, trasformazione e pulizia dei dati
  • Analizzare ed esplorare i dati, come Exploratory Data Analysis (EDA), statistiche descrittive, ...
  • Costruire, validare e testare modelli, ad esempio predittivi, di raccomandazione, ...
    • Nota: se non si costruiscono modelli, allora individuare pattern o trend, generare insight azionabili, estrarre informazioni utili, creare report e così via. Qui, questo tutorial considererà in entrambi i casi "la creazione di un deliverable".
  • Effettuare tuning e ottimizzazione di modelli o deliverable

A volte, però, non è pratico o desiderabile eseguire tutte le attività di data science o big data sull'ambiente di sviluppo locale. Ecco alcune delle principali ragioni:

  • I dataset sono troppo grandi e non entrano nella memoria di sistema (RAM) dell'ambiente di sviluppo per l'addestramento dei modelli o altre analisi
  • La potenza di elaborazione (CPU) dell'ambiente di sviluppo non è in grado di svolgere i compiti in un tempo ragionevole o sufficiente, o addirittura per nulla
  • Il deliverable deve essere messo in produzione e possibilmente integrato come componente in un'applicazione più ampia (ad esempio applicazione web, piattaforma SaaS, ...)
  • Semplicemente si preferisce usare una macchina più veloce e potente (CPU, RAM, ...) e non imporre il carico necessario sulla macchina di sviluppo locale

Quando si presentano queste situazioni, sono disponibili più opzioni. Invece di usare la macchina locale del data scientist, in genere si sposta il lavoro computazionale su una macchina on-premise o su una macchina virtuale basata sul cloud (ad esempio AWS EC2, AWS Elastic Beanstalk). Il vantaggio di usare macchine virtuali e cluster auto-scalanti è che possono essere avviati e dismessi secondo necessità, e anche configurati su misura per soddisfare i requisiti di calcolo e archiviazione dei dati.

Nel caso del deploy dei deliverable in un ambiente di produzione da utilizzare come parte di un'applicazione più ampia o di una pipeline di dati, ci sono molte opzioni e sfide da considerare. Un'ulteriore discussione su questo punto esula dallo scopo di questo articolo.

Oltre a soluzioni e strumenti di data science sviluppati ad hoc per il cloud o la produzione, ci sono molte offerte cloud e basate su servizi disponibili da fornitori molto noti, che spesso funzionano bene con strumenti a notebook come Jupyter. Sono disponibili in gran parte come API di big data, machine learning e intelligenza artificiale e includono opzioni come la piattaforma AWS Artificial Intelligence, Databricks, Google Cloud Platform Datalab e Machine Learning e molte altre.

Per una discussione molto più dettagliata e approfondita sulla data science e l'analisi avanzata in produzione rispetto allo sviluppo, comprese raccomandazioni su linguaggi, pacchetti, framework e piattaforme, dai un'occhiata alla mia serie in tre parti su questo argomento. La mia serie su software scalabile e architetture big data è anche un'ottima integrazione sul cloud computing.

Architettura software e attributi di qualità

L'architettura software consiste nel progettare un sistema software, di solito basato sul cloud, che rappresenta un prodotto, un servizio o un sistema di calcolo orientato ai compiti. Potresti anche sentire i termini architettura di sistema o architettura software, che significano più o meno la stessa cosa.

Parte del disegno di un'architettura software è scegliere i linguaggi e le tecnologie appropriati (ovvero lo stack), i componenti, i pacchetti, i framework, le piattaforme e così via. Questo può richiedere molte valutazioni, in particolare rispetto allo scopo previsto del sistema e ad altri trade-off importanti. Questo aspetto dell'architettura software richiede competenze, conoscenze ed esperienza maturate nel tempo da una persona, come un software architect.

Un altro aspetto fondamentale dell'architettura e dell'ingegneria dei sistemi e del software sono i cosiddetti quality attributes o requisiti non funzionali. Ciò è particolarmente vero per soluzioni di produzione reali.

I requisiti non funzionali includono tipicamente aspetti come:

  • Disponibilità
  • Prestazioni
  • Affidabilità
  • Scalabilità (verticale e orizzontale)
  • Estensibilità
  • Usabilità
  • Modularità
  • Riutilizzabilità

In questo articolo avrai una breve panoramica di quattro tra i più importanti, ovvero disponibilità, prestazioni, affidabilità e scalabilità. Nota che la discussione è volutamente ad alto livello e non entra in definizioni o requisiti basati su metriche per questi attributi di qualità.

Disponibilità è esattamente ciò che suggerisce il nome: il sistema è disponibile, ovvero è attivo e funziona correttamente. Questo può significare molte cose ed è anche fortemente dipendente da affidabilità e scalabilità. "Attivo e funzionante correttamente" significa che il sistema funziona come previsto e ogni volta che serve. Può essere un utente finale che prova a usare il sistema, per esempio Facebook o Netflix, oppure può essere un insieme di servizi basati sul cloud usati per elaborare dati, ad esempio.

Affidabilità è un termine che rappresenta la capacità del sistema di funzionare correttamente senza guasti o errori. Più un sistema riesce a operare in questo modo, più si dice che è tollerante ai guasti. Dato che è difficile pensare e testare in anticipo tutti i possibili casi d'uso e edge case, raggiungere il 100% di affidabilità può essere molto difficile. Inoltre, i guasti possono avvenire per molte ragioni, con bug nel codice, problemi ambientali e risorse limitate (CPU, RAM, memoria su disco, ...) tra le principali cause.

Prestazioni è un termine usato per descrivere la velocità con cui il sistema svolge i compiti, o visto in un altro modo il tempo che il sistema impiega per eseguire un compito specifico. Prendi YouTube, per esempio. Ti aspetti che quando vai a guardare un video, il video si carichi e inizi a riprodursi in un tempo ragionevole. Più Google riesce a rendere YouTube performante, più velocemente il video si carica e parte, più sono felici gli utenti di YouTube e meno è probabile che abbandonino l'applicazione. Il contrario sarebbe se YouTube funzionasse estremamente lento al punto da non valerne la pena, e quindi le persone smettessero di usarlo. Per fortuna, nella maggior parte dei casi vale la prima ipotesi e non la seconda.

Infine, la scalabilità è fondamentale per alcune applicazioni ed è un termine che rappresenta la capacità di un sistema di mantenere un certo livello di prestazioni (come definito sopra, sempre a livello alto) nonostante l'aumento del carico sul sistema. Carico è un termine usato per indicare il numero di richieste concorrenti o simultanee al sistema.

Un ottimo esempio in cui è richiesta scalabilità è quando i biglietti vengono messi in vendita per una squadra sportiva molto popolare o un artista musicale. A seconda della popolarità, il numero di richieste simultanee per acquistare biglietti su un'applicazione web come Ticketmaster può essere di centinaia di migliaia quando i biglietti vengono messi in vendita. A seconda della capacità di un sistema di scalare, questo può ridurne molto le prestazioni, o mandare in crash l'intero sistema. Nessuno dei due scenari è positivo.

Per rispondere a questo requisito, si usano tecniche per scalare il sistema verticalmente o orizzontalmente. Scalare verticalmente significa sostituire i dispositivi di calcolo nel sistema con macchine più potenti (CPU, più core, ...) e affidabili, con risorse maggiori come la memoria di sistema o RAM. Macchine di questo tipo possono essere costose.

Scalare orizzontalmente, invece, significa usare macchine commodity a basso costo che non sono particolarmente potenti singolarmente, ma che, usate in gruppo, sono più che capaci di gestire il carico sul sistema. Poiché le soluzioni che usano questa tecnica richiedono più computer, è importante configurare i sistemi per gestire automaticamente scenari in cui uno o più computer (nodi) si guastano o vanno in crash (failover), e così via.

Conclusione

Spero che questo articolo abbia fatto luce sui molti aspetti importanti della data science oltre lo sviluppo locale e nel contesto di soluzioni di produzione reali. I concetti di calcolo e architettura basati sul cloud sono importanti da comprendere quando si lavora su soluzioni dati di produzione o quando servono potenza di calcolo e risorse aggiuntive.

Sentiti libero di condividere i tuoi pensieri nei commenti qui sotto. Se vuoi saperne di più, puoi seguire @innoarchitech su Twitter, iscriverti alla newsletter di InnoArchiTech e dare un'occhiata al blog di InnoArchiTech. Puoi anche dare un'occhiata al mio corso su intelligenza artificiale e machine learning guidati dagli obiettivi.

Argomenti
Cloud
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

Mostra altro