Prüfungen mit JupyterHub

Prüfungen mit JupyterHub

Im letzten Artikel Jupyter Notebook und JupyterLab wurde vorgestellt, wie Forschende das Programm Jupyter Notebooks nutzen können, um eigene Ergebnisse für andere nachvollziehbar festzuhalten. Wir am Institut für Maritime Logistik haben uns gemeinsam mit dem Fraunhofer-Center für Maritime Logistik und Dienstleistungen (CML) im Rahmen vom Projekt MaLiTuP (Maschinelles Lernen in Theorie und Praxis, gefördert vom BMBF) damit beschäftigt, wie man dieses Werkzeug schon den Studierenden näherbringen kann. Dieser Artikel stellt nun die Nutzung von Jupyter Notebook und JupyterHub in der Lehre vor.

Wieso sind Jupyter Notebooks gewählt worden?

Im Bereich der Logistik fallen verschiedenste Arten von Daten an, darunter zeitbehaftete Daten, raumzeitliche Daten sowie Bilder. Zeitbehaftete Daten sind beispielsweise die Ankunftsraten von Lkw an einen logistischen Knoten, während die Bewegungsdaten eines Schiffs oder eines Lkw dann raumzeitliche Daten darstellen. Bilddaten sind u. a. Aufnahmen von Dashcams zur automatischen Identifikation von Straßenschildern. Diese Daten wollen wir in der Lehrveranstaltung gemeinsam mit den Studierenden untersuchen. Aufgrund dieser Vielfalt eignen sich jedoch viele Programme mit klassischen grafischen Oberflächen nicht. Bei Jupyter Notebooks hingegen stellt dies kein Problem dar, weil es eine große Auswahl von bewährten Bibliotheken gibt, wie z. B. pandas für zeitbehaftete Daten, folium für das Darstellen von raumzeitlichen Daten oder scikit-learn für das maschinelle Lernen.

Alles hat seinen Preis: Die Studierenden mussten zunächst lernen, wie man Datenauswertungen in Form eines Skripts formuliert. Um die Einstiegshürde niedrig zu halten, wurden ihnen Teile des Jupyter Notebooks bereits gestellt. Der Schwerpunkt lag darauf, konzeptuell passend Lücken auszufüllen und Code-Teile umzustellen.

Vorlesungsbegleitend haben wir Übungen angeboten. Dafür ist auf den Pool-Rechnern Anaconda für Python 3.6 installiert worden. Da die Studierenden auch gerne zu Hause arbeiten, war Anaconda auch sehr schnell auf eigenen Laptops installiert. Dies hat je nach Laptop-Modell manchmal länger gedauert. Insgesamt haben die Studierenden schnell gelernt, wie man mit den Jupyter Notebooks Daten einliest, visualisiert und wie man aus diesen Daten einen wissenschaftlichen und wirtschaftlichen Mehrwert generieren kann. Die Vorlesung dagegen diente als Raum, um im Voraus Begriffe und Konzepte zu vermitteln und manche Erkenntnisse aus der Forschung zu diskutieren.

Warum nun JupyterHub einsetzen?

Eine der großen Herausforderungen von Lehrenden ist es, den Studierenden ein “rundes” Modul anzubieten. Dazu gehört, dass zu den erwünschten Lernergebnissen die passenden Lehr- und Lernmethoden ausgewählt werden. Erfahrungsgemäß werden hauptsächlich Inhalte, die abgeprüft werden, auch von den Studierenden gelernt. Daher sollte die Prüfung auch zu den gewünschten Lernergebnissen und den Lehr- und Lernmethoden passen. Hierbei spricht man auch von Constructive Alignment.

Uns war wichtig, dass die Lernerfolge mit Jupyter Notebook einen Teil der Modulnote ausmachen, um das Engangement in der Übung zu honorieren. Deswegen haben wir uns schon früh entschlossen, eine teilweise computergestützte Prüfung durchzuführen. Dies bedeutet, dass ein Teil der Klausur klassisch auf dem Papier und ein weiterer Teil am Laptop erledigt wird. Die Abgabe der Ergebnisse erfolgte somit zum Teil digital.

Erste Gespräche mit dem Rechenzentrum haben gezeigt, dass es schwierig ist, auf jeden einzelnen Prüfungs-Laptop eine Anaconda-Version zu installieren. Aufgrund der technischen Struktur bot es sich an, dass jeder Laptop sich mit einer zentralen Instanz verbindet. Dort sollte dann ein Jupyter Notebook laufen. Für so einen Zweck ist der JupyterHub geeignet. Dieser lässt jeden Nutzer, der einen validen Login-Namen und ein dazu passendes Passwort über die Webseite eingibt, im Browser ein Jupyter Notebook öffnen. Über das Jupyter Notebook kann der Nutzer dann selbstgeschriebenen Code auf dem Server ausführen lassen. Die Jupyter Notebooks lassen sich auf dem Server dauerhaft abspeichern und zu einem späteren Punkt weiterbearbeiten. In unserem Fall enthält das Jupyter Notebook die Klausuraufgaben. Teil der Abgabe am Ende ist dann das bearbeitete Jupyter Notebook. Weil das Jupyter Notebook als Datei auf dem Server vorliegt, kann es beispielsweise vom Systemadministrator dann zentral gesichert werden. Im Anschluss müssen die Ergebnisse entsprechend archiviert werden.

Und ist das sicher?

Manch IT-affinen Personen mag beim eben genannten Absatz bereits der Sicherheitsaspekt ins Auge gesprungen sein. Wenn Studierende sich alle auf einer zentralen Instanz einloggen, können sie dann dort Informationen austauschen und so bei einer Klausur täuschen? Wie sieht es mit Spicken aus? Gibt es vielleicht mit den Laptops vielleicht ganz neue Möglichkeiten, wie man sich als Studierender während der Prüfung einen Vorteil sicher kann, der so nicht vom Prüfenden vorgesehen war? Hier sollte man sich früh mit abgesicherten Browsern, Firewall-Einstellungen, Containerisierung u. ä. auseinandersetzen. Ebenso kann man sich verschiedene Szenarien überlegen, wie ein Studierender betrügen könnte. In den meisten Fällen lässt sich durch eine aufmerksame Klausuraufsicht auch hier bereits viel abfangen. Es ist schließlich (bis auf die Laptops) eine ganz normale Klausur in Präsenz und einer begrenzten Bearbeitungszeit.

Für die Prüfung haben wir uns in diesen Fall dazu entschieden, die Studierenden über docker-Container voneinander zu isolieren. Dadurch wird das Kommunizieren zwischen den Studierenden erschwert und die Gefahr minimiert, dass sich Studierende gegenseitig stören können. Zur Nutzerverwaltung fiel die Wahl auf CouchDB, weil es leichtgewichtig ist und bereits eine Web-Oberfläche namens Fauxton mitbringt. Über diese Oberfläche können Benutzeraccounts erstellt und modifiziert werden. Es gibt hier einige Alternativen für Fortgeschrittene.

Auf der virtuellen Maschine laufen über docker administriert mehrere Container, die untereinander vernetzt sind. Der JupyterHub-Container stellt die Login-Maske bereit. Beim Login wird das Passwort des Nutzers über CouchDB überprüft. Für jeden Nutzer wird nach dem Login ein eigener docker-Container mit einem Jupyter Notebook und vorinstallierten Python-Bibliotheken gestartet. Sobald der Nutzer eingeloggt ist, befindet er sich auf der Oberfläche der Software Jupyter Notebook und das Verhalten ist identisch.

Wenn man im laufenden Betrieb schaut, wie viele docker-Container parallel arbeiten, sieht man die CouchDB, den JupyterHub-Container und für jeden der Studierenden jeweils einen weiteren Container, in dem das eigene Jupyter Notebook ausgeführt wird. Mit ein wenig Übung in docker (hierfür gibt es regelmäßig docker-Workshops an der TUHH) und Kommandozeilen-Kenntnissen in Linux kann man nun den JupyterHub zur Laufzeit überwachen.

Verlauf der Prüfung

Im August haben wir die Planung der computergestützten Prüfung anvisiert, die dann im Februar anstand. Diesen zeitlichen Rahmen haben wir auch gut ausgeschöpft, denn neben der Konfiguration vom JupyterHub haben wir uns ausführlich mit den rechtlichen Aspekten einer computergestützten Prüfung ebenso wie mit operativen Fragestellungen beschäftigt. Wird während der Prüfung der Server genügend Ressourcen haben? Was passiert, wenn der Server abstürzt? Wie sieht der Plan aus, wenn die Laptops ausfallen? Kurz vor der Prüfung gab es prompt ein automatisches Update einer Bibliothek, die daraufhin die Jupyter Notebooks abstürzen ließ. Dies ließ sich zum Glück schnell dadurch beheben, indem auf eine frühere Version des docker-Image zurückgegriffen wurde. Als dann die Prüfung durchgeführt wurde, beobachteten wir die Auslastung und das Verhalten des Systems sehr genau. Es lief dann technisch gesehen alles wie gewünscht. Das Zusammenspiel von JupyterHub, CouchDB und den selbstgeschriebenen Python-Skripten hat sich als funktionstüchtig bewiesen.

Die Benutzerverwaltung über Fauxton bzw. selbstgeschriebenen Python-Skripten ist bislang eher eine Behelfslösung. Es wäre schöner, wenn es eine fertige Anwendung gäbe, die die Prüfungs-Accounts des Rechenzentrums einlesen und dann verwalten könnte. Dies sollte natürlich mit einem geringen Wartungs- und Administrationsaufwand einher gehen, um computergestützte Prüfungen realisierbar zu halten.

Ebenso war das Verhalten des abgesicherten Browsers nicht so, wie es sich der eine oder die andere Studierende gewünscht hat: Es ließen sich keine zwei Browser-Fenster nebeneinander anordnen. Dies ist nämlich dann hilfreich, wenn man das Benutzerhandbuch für ein Modul nebenbei geöffnet haben möchte.

Für die Studierenden war es eine ungewohnte Situation, in der Prüfung mit dem Laptop zu arbeiten. Die Anspannung war groß und manches, was in der Übung noch einfach von der Hand ging, war nun während der Prüfung etwas herausfordernder. Im nächsten Jahr wird nun geplant, noch besser auf diesen Aspekt einzugehen, um eine passgenaue Prüfung anbieten zu können. Von Jupyter Notebook als ein wertvolles Werkzeug für spätere Projekte in ihrem Studium waren die Studierenden auf jeden Fall überzeugt.

Hands On! Einen eigenen JupyterHub starten!

Eine funktionierende Konfiguration eines JupyterHubs zum Ausprobieren ist auf dem TUHH-Gitlab verfügbar. Für den Einsatz in der Prüfung müssen noch einige Sicherheitseinstellungen vorgenommen sowie ein Konzept für die Archivierung der Testergebnisse erstellt werden. Gerne stehe ich dafür als erster Ansprechpartner zur Verfügung. Zum Kennenlernen und Weiter-Basteln genügt die mit ausgelieferte Konfiguration.

Für den ersten Einsatz benötigt man einen Linux-Rechner mit Python 3 und docker. Als erstes muss die Datei „.env” angelegt werden. Dafür kann man sich die Datei „.env.sample” kopieren und auf jeden Fall das Passwort anpassen. Über das Skript „start.sh” wird dann der JupyterHub gestartet. Sobald dies ausgeführt worden ist, ist unter die Login-Maske für die Jupyter Notebooks verfügbar. Als Test-Account ist der Nutzer „test” mit dem Passwort „test” bereits angelegt. Die visuelle Benutzerverwaltung ist über http://<>:5984/_utils/ erreichbar (wobei der Platzhalter durch die IP-Adresse oder Vergleichbares ausgetauscht werden muss). Die Login-Credentials aus der „.env“-Datei werden nun hier für den Login verwendet. Durch das Löschen und Anlegen von sogenannten Dokumenten in der Datenbank „users” können Accounts entfernt oder hinzugefügt werden. Hierbei kann man sich am Beispiel-Benutzer “test” mit dem Passwort “test” orientieren.

Danksagung

Vielen Dank ans Zentrum für Lernen und Lehre (ZLL), an das Rechenzentrum (RZ) und an das Institut für Technische Bildung und Hochschuldidaktik (ITBH) für die konsequente Unterstützung ebenso wie für die Kekse!

Dieser Beitrag wurde verfasst von Marvin Kastner.

Weitere Beiträge

Hinterlasse einen Kommentar

Ihre Emailadresse wird nicht veröffentlicht.