JupyterHub oder wie man Hunderte von Python-Benutzern verwaltet. Yandex Vortrag

    Mit der Jupyter-Plattform können unerfahrene Entwickler, Datenanalysten und Studenten schnell mit der Programmierung in Python beginnen. Angenommen, Ihr Team wächst - jetzt gehören nicht nur Programmierer, sondern auch Manager, Analysten und Forscher dazu. Früher oder später wird das Fehlen einer gemeinsamen Arbeitsumgebung und die Komplexität der Einstellungen die Arbeit verlangsamen. JupyterHub, ein Mehrbenutzerserver mit der Möglichkeit, Jupyter mit einer Taste zu starten, hilft bei der Lösung dieses Problems. Es ist ideal für diejenigen, die Python unterrichten, sowie für Analysten. Der Benutzer benötigt nur einen Browser: keine Probleme bei der Installation von Software auf einem Laptop, Kompatibilität, Pakete. Jupyter-Betreuer entwickeln JupyterHub zusammen mit JupyterLab und nteract aktiv weiter.

    Mein Name ist Andrey Petrin, ich bin der Leiter der Wachstumsanalysegruppe bei Yandex. In einem Bericht beim Moscow Python Meetup erinnerte ich mich an die Vorteile von Jupyter und sprach über die Architektur und Prinzipien von JupyterHub sowie über die Erfahrungen mit der Verwendung dieser Systeme in Yandex. Am Ende lernen Sie, wie Sie JupyterHub auf jedem Computer auslösen.


    - Zunächst einmal, wer sind die Analysten bei Yandex? Es gibt eine Analogie, dass dies ein so mehrarmiger Shiva ist, der viele verschiedene Dinge gleichzeitig tun kann und viele Rollen kombiniert.

    Hallo allerseits! Mein Name ist Andrey Petrin, ich bin der Leiter der Wachstumsanalysegruppe bei Yandex. Ich erzähle Ihnen von der JupyterHub-Bibliothek, die einst unser Leben in der Yandex-Analytik erheblich vereinfacht hat. Wir haben buchstäblich die Produktivitätssteigerung einer großen Anzahl von Teams gespürt.




    Zum Beispiel sind Analysten bei Yandex kleine Manager. Analysten kennen immer den Zeitpunkt, den Zeitplan des Prozesses und was zu welchem ​​Zeitpunkt getan werden muss.

    Dies sind kleine Entwickler, die mit verschiedenen Arten der Datenverarbeitung vertraut sind. Zum Beispiel sind auf einer Folie in den Händen von Shiva die Python-Bibliotheken, die mir in den Sinn kommen, keine vollständige Liste, sondern das, was täglich verwendet wird. Natürlich wird unsere Entwicklung nicht nur in Python durchgeführt, sondern ich werde hauptsächlich über Python sprechen.

    Analysten sind ein bisschen Mathematik, wir müssen Entscheidungen sorgfältig treffen, die realen Daten betrachten, nicht die Sicht des Managements, sondern nach einer Art Wahrheit suchen und dies verstehen.

    Bei dieser gesamten Aufgabe hilft uns das Jupyter-Ökosystem einiges.



    Es ist eine solche Plattform für interaktive Programmier- und Berichtshefte. Eine wichtige Essenz von Jupyter-Notizbüchern ist ein solches Notizbuch, in dem es eine große Anzahl verschiedener Widgets gibt, interaktive Elemente, die geändert werden können. Die Hauptessenz sind die Mikroelemente des Codes, den Sie programmieren. Sie können in Ihrem Browser auf einem Laptop gedruckt werden, den Sie ständig verwenden. Dies können entweder Bilder oder interaktive HTML-abgeleitete Elemente sein. Sie können einfach Elemente drucken, drucken und anzeigen - eine Vielzahl von Dingen.

    Das Jupyter-System wurde lange entwickelt und unterstützt verschiedene Programmiersprachen verschiedener Versionen, Python 2 und 3, Go, verschiedene Dinge. Ermöglicht es Ihnen, unsere täglichen Aufgaben kühl zu lösen.

    Was machen wir in der Analytik und wie hilft uns Jupyter dabei sehr?



    Die erste Aufgabe ist die Klassifizierung von Websites. Es stellt sich heraus, dass für den großen Yandex, der sich mit dem gesamten Internet auskennt, das Betrachten bestimmter Websites ziemlich zeitaufwändig ist. Wir haben so viele Websites, von denen jede ihre eigenen Besonderheiten haben kann, dass wir sie zu einigen Themen zusammenfassen müssen - Gruppen von Websites, die nicht sehr groß sind und sich im Allgemeinen ähnlich verhalten.

    Für diese Aufgabe erstellen wir ein Adjazenzdiagramm aller Internet-Hosts, ein Diagramm der Ähnlichkeit zweier Sites untereinander. Mithilfe des manuellen Markups von Hosts erhalten wir eine Primärdatenbank über die Websites im Internet und extrapolieren dann das manuelle Markup auf das gesamte Internet. Buchstäblich in jeder der Aufgaben verwenden wir Jupyter. Unter dem Gesichtspunkt der Erstellung eines Adjazenzdiagramms können damit ständig Operationen auf MapReduce ausgeführt, solche Diagramme erstellt und solche Datenanalysen durchgeführt werden.

    Wir haben das manuelle Markup in Jupyter mithilfe von Eingabe-Widgets automatisiert. Für jeden Gastgeber haben wir das angebliche Thema, das höchstwahrscheinlich richtig ist. Wir raten fast immer zum Thema, aber für die manuelle Kennzeichnung wird immer noch eine Person benötigt.

    Und es werden alle möglichen interessanten Bilder erhalten.



    Hier werden beispielsweise sportbezogene Websites und verwandte Suchanfragen angezeigt, die in sportbezogenen Themen vorhanden sind.



    Fachenzyklopädien. Es gibt weniger Websites und im Allgemeinen eindeutige Anforderungen, aber grundlegendere Anforderungen.



    Thema Hausaufgaben - fertige Hausaufgaben. Interessant genug, denn darin befinden sich zwei unabhängige Cluster von Standorten, die einander ähnlich sind, aber nicht wie die anderen. Dies ist ein gutes Beispiel für ein Thema, das ich in zwei Teile teilen möchte. Eine Hälfte der Websites löst eindeutig ein Problem innerhalb der Hausaufgaben, die andere die andere.



    Es war sehr interessant, einen Gebotsoptimierer zu erstellen, eine völlig andere Aufgabe. Yandex kauft eine Reihe von mobilen Anwendungen, auch für Geld, und wir wissen bereits, wie man die Lebensdauer eines Benutzers vorhersagt, wie viel wir durch die Installation einer Anwendung für jeden Benutzer erhalten können. Es stellt sich jedoch heraus, dass dieses Wissen leider nur schwer auf einen Vermarkter übertragen werden kann. der Auftragnehmer, der am Kauf des Verkehrs beteiligt ist. Dies ist normalerweise auf die Tatsache zurückzuführen, dass es immer eine Art Budget gibt, es gibt eine ziemlich große Anzahl von Einschränkungen. Es ist notwendig, eine solche mehrdimensionale Optimierungsaufgabe durchzuführen, die aus analytischer Sicht interessant ist, aber Sie müssen ein Gerät für den Manager erstellen.



    Jupyter hilft hier sehr. Dies ist die Schnittstelle, die wir bei Jupyter entwickelt haben, damit sich ein Benutzermanager ohne Python-Kenntnisse anmelden und das Ergebnis unserer Prognose abrufen kann. Sie können dort wählen, ob wir Android oder iOS wählen, in welchen Ländern, welche Anwendung. Es gibt recht komplexe Manager und Stifte, die geändert werden können, z. B. einige Fortschrittsbalken, die Größe des Budgets und eine Art Risikotoleranz. Diese Aufgaben wurden mit Hilfe von Jupyter gelöst, und wir freuen uns sehr, dass der Analytiker als mehrarmiger Shiva diese Probleme allein lösen kann.

    Vor ungefähr fünf Jahren kamen wir zu dem Schluss, dass es einige Einschränkungen und Plattformprobleme gibt, mit denen ich mich befassen möchte. Das erste Problem ist, dass wir viele verschiedene Analysten haben, von denen jeder immer unterschiedliche Versionen, Betriebssysteme usw. verwendet. Oft wird der Code, der für eine Person funktioniert, nicht für eine andere Person ausgeführt.

    Ein noch größeres Problem sind Paketversionen. Ich denke, Sie müssen nicht sagen, wie schwierig es ist, eine konsistente Umgebung aufrechtzuerhalten, damit alles von Anfang an beginnen kann.

    Im Allgemeinen haben wir verstanden, dass, wenn Sie einem neuen Analysten, der gerade dem Team beigetreten ist, eine vorkonfigurierte Umgebung zur Verfügung stellen, in der alles eingerichtet wird, alle Pakete in der aktuellen Version installiert und an einem einzigen Ort verwaltet werden, dies für die analytische Arbeit genauso gut ist wie und für die Entwicklung. Im Allgemeinen ist ein Gedanke für den Entwickler kohärent, aber er ist nicht immer auf den Analysten anwendbar, gerade weil solche ständigen Änderungen in der Analyse stattfinden.

    Hier kam uns die JupyterHub-Bibliothek zu Hilfe.



    Dies ist eine sehr einfache Anwendung, die aus vier Komponenten besteht, die einfach getrennt werden.

    Der erste Teil des Antrags ist für die Autorisierung verantwortlich. Wir müssen das Passwort überprüfen und uns anmelden, wenn wir diese Person gehen lassen können.

    Der zweite ist der Start von Jupyter-Servern. Von jedem Benutzer wird der gleiche Jupyter-Server gestartet, von dem aus Sie Jupyter-Laptops ausführen können. Dasselbe passiert auf Ihrem Computer nur in der Cloud, wenn es sich um eine Cloud-Bereitstellung handelt oder wenn verschiedene Prozesse auf demselben Computer erzeugt werden.

    Proxying. Es gibt einen einzigen Zugriffspunkt auf den gesamten Server, und JupyterHub bestimmt, welchen Benutzer Sie zu welchem ​​Port benötigen. Alles ist für den Benutzer vollständig transparent. Natürlich eine gewisse Kontrolle über die Datenbank und das gesamte System.



    Wenn Sie oberflächlich beschreiben, wie JupyterHub aussieht, kommt der Benutzerbrowser in das JupyterHub-System und wenn der Benutzer noch keinen Server ausgeführt hat oder nicht autorisiert ist. JupyterHub betritt das Spiel und beginnt einige Fragen zu stellen, Server zu erstellen und die Umgebung vorzubereiten.

    Wenn der Benutzer bereits angemeldet ist, wird er direkt an seinen eigenen Server weitergeleitet, und der Jupyter-Laptop kommuniziert tatsächlich nur direkt mit der Person und fragt den Server manchmal nach dem Zugriff, ob diesem Benutzer Zugriff auf diesen Laptop usw. gewährt wird.



    Die Benutzeroberfläche ist recht einfach und bequem. Standardmäßig verwendet die Bereitstellung den Benutzernamen und das Kennwort des Computers, auf dem sie bereitgestellt wird. Wenn Sie einen Server haben, auf dem sich mehrere Benutzer befinden, ist der Login und das Passwort der Login und das Passwort für das System, und der Benutzer sieht sein / home-Ausgangsverzeichnis als sein Ausgangsverzeichnis. Sehr praktisch, Sie müssen nicht an Benutzer denken.





    Der Rest der Schnittstellen als Ganzes ist Ihnen recht vertraut. Dies sind die Standard-Jupyter-Laptops, die Sie alle gesehen haben. Sie können aktive Laptops sehen.



    Sie haben dieses Ding wahrscheinlich nicht gesehen. Dies ist das JupyterHub-Steuerungsfenster. Sie können Ihren Server ausschalten, starten oder beispielsweise ein Token erhalten, um in Ihrem Namen mit JupyterHub zu kommunizieren, um beispielsweise einige Microservices in JupyterHub zu starten.



    Schließlich ist es für den Administrator möglich, jeden Benutzer zu verwalten, einzelne Jupyter-Server zu starten, sie zu stoppen, Benutzer hinzuzufügen, zu löschen, alle Server auszuschalten, den Hub auszuschalten und einzuschalten. All dies erfolgt im Browser ohne Einstellungen und ganz bequem.

    Im Allgemeinen entwickelt sich das System sehr stark.



    Auf dem Bild war der Kurs an der UC Berkley, der diesen Dezember endete, der größte datenwissenschaftliche Kurs der Welt. Meiner Meinung nach nahmen 1.200 Studenten teil, die nicht programmieren konnten, und kamen, um Programmieren zu studieren. Dies geschah auf der JupyterHub-Plattform. Die Schüler mussten kein Python auf ihrem Computer installieren. Sie konnten einfach in einem Browser zu diesem Server wechseln.

    Natürlich trat in den weiteren Phasen der Schulung die Notwendigkeit auf, Pakete zu installieren, aber dies löst das Problem des ersten Eintrags kühl. Wenn Sie Python unterrichten und eine Person damit völlig unbekannt ist, stellen Sie häufig fest, dass einige Routinen, die mit der Installation von Paketen, der Wartung eines Systems und dergleichen verbunden sind, etwas überflüssig sind. Sie möchten eine Person inspirieren, darüber sprechen, was für eine Welt dies ist, ohne auf die Details einzugehen, die eine Person in Zukunft beherrschen kann.

    Installation:

    python3 -m pip install jupyterhub
    sudo apt-get install npm nodejs-legacy 
    npm install -g configurable-http-proxy 

    Es wird nur Python 3 unterstützt. In JupyterHub können Sie Zellen im zweiten Python ausführen, JupyterHub selbst funktioniert jedoch nur im dritten Python. Die einzige Abhängigkeit ist dieser konfigurierbare http-Proxy, den Python verwendet, um ihn zu vereinfachen.

    Konfiguration:

    jupyterhub --generate-config

    Als erstes möchten Sie eine Konfiguration generieren. Alles wird von selbst funktionieren, auch ohne Einstellungen. Standardmäßig wird ein lokaler Server mit einer Art Port 8000 ausgelöst. Der Zugriff auf Ihre Benutzer erfolgt über Login und Passwort. Es funktioniert nur vor Gericht. Es funktioniert buchstäblich sofort, aber generiere-config erstellt eine JupyterHub-Konfigurationsdatei für Sie, in der Sie buchstäblich in Form einer Dokumentation absolut alle Einstellungen lesen können. Dies ist sehr praktisch, Sie können auch ohne in die Dokumentation zu gehen verstehen, welche Zeilen Sie einschließen müssen, alles ist auskommentiert, Sie können verwalten, alle Standardeinstellungen sind sichtbar.



    Ich möchte eine Pause und eine Reservierung machen. Wenn Sie es bereitstellen, stellen Sie es standardmäßig auf Ihrem Server bereit. Wenn Sie keine Anstrengungen unternehmen, nämlich kein HTTPS verwenden, wird der Server über HTTP und Ihre Benutzerkennwörter und Anmeldungen hochgefahren wird eintreten, wird offen leuchten, wenn mit JupyterHub kommuniziert wird. Dies ist eine sehr gefährliche Geschichte, eine unglaubliche Anzahl von Problemen kann hier angegangen werden. Ignorieren Sie daher das Problem mit HTTPS nicht. Wenn Sie kein eigenes HTTPS-Zertifikat haben, können Sie eines erstellen, oder es gibt einen wunderbaren letsencrypt.org-Dienst, mit dem Sie kostenlos Zertifikate erhalten und das Sie problemlos und ohne Geld auf Ihrer Domain ausführen können. Es ist bequem genug, ignorieren Sie es nicht.

    Standardmäßig wird der Hub als Root ausgeführt. Offensichtlich erzeugt er seine eigenen Laptops unter einem bestimmten Benutzer. Dies kann geändert werden, ist es aber standardmäßig. Und alle Benutzer sind lokal, das Home-Verzeichnis scrollt für jeden bestimmten Benutzer. Ich werde Ihnen im Detail sagen, was noch getan werden kann.

    Das Coole an JupyterHub ist, dass es so ein Konstruktor ist. Buchstäblich in jedes Element des Diagramms, das ich gezeigt habe, können Sie Ihre eigenen Elemente einfügen, einbetten, was die Arbeit vereinfacht. Angenommen, Sie möchten nicht, dass Ihre Benutzer die Systemanmeldung und das Kennwort eingeben. Dies ist nicht sehr sicher oder unpraktisch. Sie möchten ein anderes Anmeldesystem erstellen. Dies kann mit oauth und beispielsweise github erfolgen.



    Anstatt den Benutzer zu zwingen, den Benutzernamen und das Kennwort einzugeben, aktivieren Sie einfach die Autorisierung mithilfe von zwei Codezeilen mit einem Hub. Der Benutzer meldet sich automatisch mit einem Hub an und wird lokal durch den Github-Benutzernamen gescrollt.



    Andere Methoden zur Benutzerautorisierung werden standardmäßig unterstützt. Wenn es LDAP gibt - ist es möglich. Jeder OAuth kann vorhanden sein, es gibt einen REMOTE_USER-Authentifikator, mit dem Remoteserver den Zugriff auf Ihren lokalen Server überprüfen können. Alles was dein Herz begehrt.



    Angenommen, Sie haben verschiedene Arten von Aufgaben. Beispielsweise verwendet man eine GPU, und dafür benötigen Sie einen Technologie-Stack, einen bestimmten Satz von Paketen, und Sie möchten ihn mit einem anderen Anwendungsfall von der CPU trennen. Dazu können Sie Ihren eigenen Spawner schreiben. Dies ist das System, das benutzerdefinierte Jupyter-Laptops erstellt. Die Tinktur mit Docker wird hier gezeigt. Sie können eine Docker-Datei sammeln, die für jeden Benutzer bereitgestellt wird, und der Benutzer ist nicht lokal, sondern in seinem internen Container.

    Es gibt eine Reihe weiterer praktischer JupyterHub-Funktionen und -Dienste.



    Angenommen, Sie arbeiten auf einem Computer mit begrenztem Arbeitsspeicher und möchten Ihre Ressourcen speichern und diesen Benutzer trennen, da er sie nicht verwendet. Der Arbeitsspeicher nimmt einige Zeit in Anspruch, nachdem der Benutzer nicht im System war. Sie haben beispielsweise eine Cloud-Bereitstellung und können bei virtuellen Maschinen Geld sparen, indem Sie nicht verwendete nachts deaktivieren und sie nur dann aktivieren, wenn Sie sie benötigen.

    Es gibt einen vorgefertigten Dienst cull_idle_servers, mit dem Sie alle Benutzerserver nach Inaktivität ausschalten können. Alle Daten werden gespeichert, Ressourcen werden einfach nicht verwendet, Sie können ein wenig sparen.



    Ich sagte, dass Sie buchstäblich für jedes Stück dieses Schemas etwas Eigenes einschließen können. Sie können dem Proxy ein Addon hinzufügen, um auf irgendeine Weise einen Benutzerproxy zu erstellen. Sie können Ihren eigenen Autorisierer schreiben und über Dienste direkt mit der Datenbank kommunizieren. Sie können Ihre eigenen Spawner erstellen.

    Ich möchte ein solches Projekt empfehlen, ein System über Kubernetes, das alles, was ich Ihnen gesagt habe, ermöglicht, einfach direkt in einer unterstützenden Kubernet-Cloud bereitzustellen, buchstäblich ohne spezifische Einstellungen. Dies ist sehr praktisch, wenn Sie sich nicht um Ihren eigenen Server, Entwickler und Support kümmern möchten. Alles wird sofort funktionieren, eine sehr schöne detaillierte Anleitung.



    Sie benötigen einen JupyterHub, falls mehrere Personen Jupyter verwenden. Und es ist nicht notwendig, dass sie Jupyter für dasselbe verwenden. Dies ist ein praktisches System, mit dem sich diese Personen zusammenschließen und weitere Probleme vermeiden können. Und wenn sie darüber hinaus dieselbe Aufgabe erledigen - höchstwahrscheinlich benötigen sie einen mehr oder weniger konsistenten Satz von Paketen.

    Das gleiche gilt, wenn Sie Beschwerden erhalten, dass ich ein wunderbares Modell habe. Ein Analyst Vasechkin versucht, es zu reproduzieren, und es funktioniert nicht. Zu einer Zeit hatten wir ein ständiges Problem. Und natürlich hilft ein konsistenter Serverstatus sehr.

    Es ist sehr cool, dies zum Erlernen von Python zu verwenden. Es gibt einen nbgrader-Service, mit dem Sie zusätzlich zu JupyterHub bequeme Batterien herstellen können, indem Sie den Schülern Hausaufgaben schicken. Sie füllen die Lösungen selbst aus, senden sie zurück. Es gibt einen automatischen Test, der Jupyter-Zellen überprüft und es Ihnen ermöglicht, sofort Noten festzulegen. Sehr praktisches System, empfehle ich.

    Stellen Sie sich vor, Sie wären zu einem Seminar gekommen, in dem Sie etwas in Python zeigen möchten. Gleichzeitig möchten Sie nicht die ersten drei Stunden damit verbringen, dass alle nach Ihren Wünschen arbeiten. Sie möchten sofort etwas Interessantes anfangen.

    Sie können ein solches System auf Ihrem Server hochfahren, Benutzern Ihre Internetadresse zur Verfügung stellen, unter der Sie sich anmelden können, und es verwenden, ohne Zeit mit unnötigen Routinen zu verschwenden. Das ist alles, danke.

    Jetzt auch beliebt: