Insegnamento del supercalcolo e delle competenze ingegneristiche SW
Il nostro corso all'ETH di Zurigo insegna il supercalcolo e l'ingegneria del software agli studenti di scienze e ingegneria. Utilizziamo GPU e Julia per le simulazioni basate sulla fisica, una parte fondamentale della scienza moderna. I nostri studenti imparano facendo, lavorando su progetti di ricerca numerica reali con strumenti open-source e risorse dell'ETH. Comunichiamo attraverso Matrix/Element e GitHub e valutiamo gli studenti attraverso esercizi e progetti, senza esami. Il nostro corso è innovativo, pratico e orientato alla ricerca.
Nel bel mezzo della pandemia, abbiamo progettato e lanciato un nuovo corso per insegnare le competenze di supercalcolo e ingegneria del software agli studenti di scienze e ingegneria dell'ETH di Zurigo. Una buona panoramica del corso è disponibile al sito sito web,che ospita la maggior parte del materiale. Il corso colma una lacuna nel curriculum dell'ETH per quanto riguarda il calcolo ad alte prestazioni (HPC) su unità di elaborazione grafica (GPU), con particolare attenzione alle simulazioni basate sulla fisica. Il corso si concentra su calcoli impegnativi, che svolgono un ruolo sempre più importante nella scienza moderna.
Il nostro corso espone gli studenti di scienze e ingegneria ai più avanzati progressi tecnologici in campo informatico e insegna loro le competenze computazionali. (oltre al solo GPU Computing) che si allineano molto bene con la strategia di insegnamento e digitalizzazione dell'ETH. Nuovi linguaggi di programmazione avanzati, come il linguaggio Julia, che utilizziamo, rendono ora possibile a studenti non informatici progettare e codificare simulazioni HPC basate su GPU senza anni di formazione, in un corso che dura solo un semestre. Questo è il maggior contributo di questo corso all'innovatività, come definito nei criteri KITE.
Forniamo un approccio pratico al GPU e all'HPC computing, ovvero il corso si fonda su insegnamento basato su progetti, strumenti e ricerca per trasmettere la progettazione, l'implementazione e la gestione di tali applicazioni. Vogliamo che i nostri studenti si sentano responsabili del lavoro (il codice) che hanno prodotto, degli strumenti che hanno imparato e dei progetti che hanno realizzato durante il corso. A tal fine, abbiamo progettato il nostro corso in modo che fosse improntato alla pratica. Oltre a scrivere codice, per noi hands-on significa anche che gli studenti devono imparare e applicare le competenze e gli strumenti necessari per creare ed eseguire con successo le simulazioni: strumenti di ingegneria del software (ad esempio, controllo di versione con git, GitHub, test) e competenze di gestione del progetto (ad esempio, scrittura di documentazione e relazioni, esecuzione di simulazioni). A nostro avviso, tutte queste competenze sono ugualmente importanti se uno studente vuole avere successo come scienziato computazionale, soddisfacendo così la Sustainability dell'approccio, come definito nei criteri KITE.
Perseguiamo un approccio all'insegnamento e all'apprendimento orientato alla ricerca,Gli studenti traggono il massimo beneficio quando sono coinvolti attivamente nel processo di ricerca, anziché limitarsi ad apprendere i contenuti della ricerca. Questo avviene attraverso l'apprendimento basato su progetti, che è una forma di apprendimento attivo in cui gli studenti sviluppano autonomamente le conoscenze piuttosto che farle presentare dagli insegnanti. Ciò contribuisce all'efficacia dell'approccio, come definito nei criteri KITE.
Il nostro corso è completamente open-source,Il corso si svolge in un'aula di informatica, con l'intero contenuto disponibile sul sito web, e utilizza vari strumenti e risorse online, per lo più l'ETH, per una partecipazione coinvolgente in loco e online. Le lezioni hanno un formato ibrido. La codifica e gli esercizi delle prime due lezioni sono ospitati su un'istanza JupyterHub dell'ETH che si integra con Moodle. Le lezioni successive avvengono su GitHub, dove gli studenti ospitano i loro compiti e i loro due progetti.
Il corso insegnamento pratico e basato su progetti consiste in sei compiti settimanali assegnati dagli studenti durante la prima parte del corso. Ciò consente un feedback personalizzato e affina le competenze necessarie per completare due progetti più ampi, che costituiscono il nucleo del corso. Il progetto 1 consiste nel risolvere la convezione termica porosa in tre dimensioni su più GPU del supercomputer Piz Daint del Centro nazionale svizzero di supercalcolo (CSCS). Nel progetto 2, gli studenti scelgono equazioni di loro interesse da risolvere utilizzando i metodi e gli strumenti appresi. Il corso prevede anche elementi di apprendimento attivo durante le tre ore di lezione settimanali, sotto forma di codifica in classe. Un ulteriore supporto all'apprendimento attivo avviene su richiesta attraverso i vari canali digitali presenti durante e tra le lezioni.
Elementi innovativi
Gli studenti si sentono ispirati e motivati dalle soluzioni innovative che forniamo nel nostro corso. I risultati includono una maggiore partecipazione e una soddisfazione degli studenti superiore alla media, come risulta dal sondaggio condotto durante le due prime edizioni del corso (per i risultati della valutazione, vedere l'Appendice). Anche la motivazione degli studenti è molto importante e, con l'avanzare del semestre, molti dei nostri studenti hanno iniziato a dare priorità ai compiti, ai compiti e ai progetti legati al corso rispetto ad altri corsi. Ma forse la cosa più importante è che l'elemento innovativo del corso favorisce l'autonomia degli studenti. Gli studenti imparano a cercare soluzioni, in alcuni casi a lavorare in team, e a riferire su problemi non funzionanti creando esempi minimi che mettano in evidenza i loro problemi.
Il nostro corso innova con nuovi approcci e metodi didattici, supportando nuove forme di trasferimento delle conoscenze, interazioni, apprendimento indipendente e feedback. Il nostro corso insegna agli studenti le competenze computazionali di punta necessarie per eseguire studi di modellazione numerica all'avanguardia. Implementiamo nuovi approcci didattici utilizzando un'ampia varietà di strumenti digitali disponibili online, tra cui JupyterHub, Moodle, Matrix/Element, GitHub e il linguaggio di programmazione Julia. Questi strumenti sono disponibili per l'intera comunità dell'ETH e alcuni (come JupyterHub o Moodle) sono stati progettati specificamente per l'insegnamento. GitHub, il principale servizio di hosting git, è attualmente uno standard nell'industria e nello sviluppo di software e sta iniziando a essere utilizzato nei flussi di lavoro dell'informatica scientifica che richiedono riproducibilità, documentazione e sviluppo collaborativo del codice. Nel nostro corso, sfruttiamo alcune funzionalità avanzate di git e GitHub, come la realizzazione di compiti e progetti completamente basati su git, l'utilizzo di rami e richieste di pull come flusso di lavoro per un feedback personalizzato. Inoltre, usiamo GitHub Actions per insegnare e implementare l'integrazione e il testing continui e per distribuire automaticamente sul web contenuti come il sito web del corso. Oltre agli strumenti legati al codice, abbiamo introdotto con successo e ora utilizziamo la piattaforma di chat Matrix/Element per il personale e gli studenti per gestire il nostro servizio di chat basato sul corso. L'idea è quella di avere uno spazio digitale condiviso in cui gli studenti possano scambiare informazioni sul corso, sugli esercizi e sul progetto, insieme e con gli insegnanti. Contemporaneamente, gli insegnanti utilizzano il servizio su un canale privato per coordinarsi sul corso. Dopo alcune settimane, osserviamo un'interessante dinamica nello spazio di chat: gli studenti iniziano a interagire, rispondendo alle domande dei compagni, favorendo l'impegno e la partecipazione in modo autonomo.
Un'altra innovazione del corso è il contenuto completamente open-source. Il materiale del corso è liberamente accessibile online; il codice, la documentazione e le intere lezioni possono essere distribuite localmente clonando il repository GitHub del corso, il che fornisce un ambiente completamente riproducibile da un'unica fonte. Quest'ultimo punto è fondamentale per i docenti, in quanto avere un'unica fonte da mantenere e modificare consente un flusso di lavoro altamente efficiente e limita i conflitti lavorando in modo collaborativo sui contenuti del corso. Inoltre, gli studenti possono suggerire modifiche o miglioramenti ai contenuti direttamente aprendo un pull-request sul repository principale del corso, aumentando la loro partecipazione al corso.
Il contenuto del corso è progettato per supportare nuovi tipi di trasferimento della conoscenza e favorire l'apprendimento indipendente. L'approccio generale è quello di fornire un accumulo incrementale di conoscenze e competenze nel corso del corso, al fine di fornire agli studenti un (sotto)insieme di competenze che possono ulteriormente applicare nei due progetti. Abbiamo puntato su modelli di apprendimento basati su progetti, poiché questi sono ben accolti dagli studenti. L'approccio può essere descritto come una forma di apprendimento attivo in cui gli studenti sviluppano autonomamente le conoscenze piuttosto che farle presentare dagli insegnanti. Gli apprendimenti basati su progetti che ne derivano aumentano ulteriormente il coinvolgimento degli studenti.
Il feedback è un aspetto fondamentale nel processo di apprendimento; gli studenti lo apprezzano molto. Prendiamo questo aspetto seriamente e abbiamo deciso, per esempio, di limitare il numero di studenti del corso a circa 25, in modo da avere tempo sufficiente per dare a tutti gli studenti un feedback personalizzato.
Gli strumenti collaborativi online come Moodle, GitHub e lo spazio di chat del corso offrono grandi opportunità di interagire con gli studenti in modo completamente online ma molto personalizzato.
Come avete garantito un feedback (continuo) sui progressi di apprendimento degli studenti?
Garantire un feedback continuo sui progressi di apprendimento degli studenti è un aspetto impegnativo da implementare in un contesto pratico. Un feedback efficace aiuta a (i) garantire i progressi degli studenti e (ii) mantenere lo slancio e la motivazione. Implementiamo un feedback continuo sia per i compiti iniziali che durante il lavoro di progetto. Questo approccio garantisce che gli studenti siano valutati e ricevano un feedback durante tutto il corso. Gli studenti apprezzano molto il feedback continuo, come risulta dai sondaggi, e c'erano margini di miglioramento, soprattutto dopo la prima edizione del corso. L'aspetto positivo è l'aumento dei progressi e della soddisfazione degli studenti, mentre l'aspetto negativo è l'elevato carico di lavoro che comporta per gli insegnanti. Potremmo perfezionare ulteriormente questo aspetto nelle prossime versioni del corso, passando potenzialmente a un feedback più on-demand, trasferendo l'attore principale dagli insegnanti agli studenti. Gli studenti potrebbero, ad esempio, attivare un feedback da una procedura automatizzata quando ne hanno bisogno, il che potrebbe comportare un minor carico di lavoro per gli insegnanti.
Quali elementi del vostro progetto consigliereste ad altri?
La motivazione che guida la progettazione del nostro corso si basa sulla nostra idea di trasmettere ai (futuri) studenti di master o di dottorato le competenze necessarie per svolgere ricerche di scienza computazionale con noi o con altri ricercatori nel nostro campo. Queste competenze non comprendono solo la numerica, ma anche altre competenze computazionali, come il controllo di versione e il testing, oltre a competenze come la gestione di progetti e la scrittura. Pertanto, insegnare ciò che i futuri studenti di MSc e PhD devono sapere è uno degli aspetti chiave che raccomandiamo ad altri insegnanti.
Inoltre, l'approccio di apprendimento basato sulla ricerca che perseguiamo coinvolge gli studenti nello svolgimento del processo di ricerca, una forma di apprendimento attivo. In questo modo, gli studenti sviluppano autonomamente le conoscenze piuttosto che farle presentare dagli insegnanti, risultando in un approccio efficace che possiamo ulteriormente raccomandare.
Consentire agli studenti di appropriarsi del proprio lavoro è un'altra componente molto preziosa. Spingerli a sviluppare i propri codici da zero aiuta a demistificare gli aspetti chiave e li fa sentire responsabili e orgogliosi del contenuto che hanno creato.
Infine, gli strumenti digitali che possono essere utilizzati su base opt-in forniscono un'interessante piattaforma di supporto. La chat in classe che stiamo gestendo su Matrix/Element è un esempio di successo. La dinamica di Q&A che si sviluppa dopo le prime settimane di corso fornisce un ambiente accogliente e sicuro per gli studenti e gli insegnanti per lo scambio di informazioni e contenuti del corso, e consente un'interazione diretta se necessario. Soprattutto per il lavoro basato sul codice, la possibilità di formattare il codice e di scambiare esempi minimi di lavoro in modo semplice ma efficace è molto preziosa. Lo consigliamo vivamente ad altri corsi con esigenze simili.
Team di progetto
Cattedra di glaciologia
Hönggerbergring 26
8093 Zurigo
Svizzera
V. Ingegneria idraulica, idrologia e glaciologia.
Hönggerbergring 26
8093 Zurigo
Svizzera
Cattedra di glaciologia
Hönggerbergring 26
8093 Zurigo
Svizzera
CSCS
Via Trevano 131
6900 Lugano
Svizzera