Deep Learning mit dem iPad (und der Cloud)

Viele Entwickler versuchen ihre Arbeitsprozess ihres Mac Book Pros auf iPads umzustellen (siehe Quellen). Die Gründe dafür sind:

  • Mac Book Pros sind nicht immer so portable wie man es gern hätte (Gewicht)
  • Die Akkulaufzeit der Mac Book Pros ist im Vergleich zum iPad gefühlt nur halb so gut
  • Selbst ein iPad Pro kostet nahezu die Hälfte eines Mac Book Pros  (1000 EUR vs. 2000 EUR)
  • iPads gibt es mit eingebautem LTE für noch freieres Arbeiten jenseits des Firmen-WLANs
  • Das iPad wird auch im Dauerbetrieb nicht heiß und benötigt daher keinen Lüfter
  • Seit iOS 11 und der Möglichkeit des Multitasking können mehr als eine Anwendung gleichzeitig genutzt werden

Daneben arbeiten immer mehr Entwickler und Data Scientists in virtualisierten Umgebungen auf Servern in der Cloud oder innerhalb von Docker Containern. Diese Arbeitsweise ähnelt dabei stark der Terminalbenutzung aus den 70er Jahren des letzten Jahrhunderts. Das iPad dient als Fenster zu den Anwendungen, die auf einem Server VM oder einem Docker Image beherbergt sind. Der große Unterschied liegt jedoch in der Verfügbarkeit mächtiger Werkzeuge auf iOS-Seite und der Verfügbarkeit vorkonfektionierter Maschinen mit alle nötigen Entwicklungstools.

Deep Learning auf dem Server

Amazon Web Service, Google Cloud und auch Microsoft Azure bieten die Möglichkeit einfache, vorkonfektionierte Images zu starten. Im Folgenden möchte ich mich auf die Nutzung der Amazon Cloud beschränken. Für andere Anbieter oder gar einfach Hoster gilt ein ähnliches Vorgehen. Amazon bietet mit dem AWS Deep Learning AMI (DLAMI) eine Sammlung der beliebtesten Werkzeuge für diesen Bereich. Enthalten sind neben Microsofts CNTK, Apaches MXNext, Facebooks Caffe2, Keras, PyTorch, Theano und TensorFlow und die Möglichkeit zu Nutzung von Jupyter Notebooks. Das gut daran ist nicht nur, dass man sich die Installation der entsprechenden Softwarepakete spart und Amazon versucht diese auf einem aktuellen Stand zu halten. DKAMI beinhaltet darüber hinaus auch alle nötigen Treiber und Pakete für die Nutzung von NVIDIAs GPUs innerhalb entsprechender Instanzen. Preise für die Nutzung einer DLAMI Instanz in der Region EU (Ireland) finden sich hier.

DLAMI starten

Um mit dem Amazon Web Service zu arbeiten setzt es entweder einen Webzugang zur Amazon Console oder der Nutzung der AWS-CLI voraus. Die iOS-App AWS Console ermöglicht das Management der Mietinfrastruktur über eine native Anwendung. Mir lässt sich in wenigen Schritten das nötige AMI provisionieren.

Der Instanztyp lässt sich dabei ganz nach belieben und zu bewältigender Aufgabe lösen. Preislich lässt sich mit einer einfachen t2.medium Instanz für $36/Monat oder $0,05 Stunde starten für 4 GB RAM und 2 vCores. Größere Instanztypen wie zum Beispiel ein p3.16xlarge kommt mit 488 GB RAM, 25 Gbit Ethernet, 64 vCores und 8 NVIDIA GPUs für rund $26/h oder $19.000/Monat. Die SecurityGroup der Instanz sollte für SSH (Port 22), Jupyter Notebook (Port 8888) und für das von Mosh verwendete UDP (Port 60000 – 61000) freigeschaltet werden.

Mobile arbeiten benötigt eine flexible Shell

Mobiles arbeiten heisst für mich, dass ich das iPad inkl. BlueTooth Tastatur im Büro zuklappe mich in die nächste S-Bahn setzte und dort ggf. weiterarbeiten kann ohne das die SSH-Verbindung beim Übergang vom Firmen-WLAN in ein 3G/4G-Netz einfach abbricht. Das funktioniert mit normalem TCP-basiertem SSH leider nicht. Abhilfe schafft die Mobile Shell oder kurz Mosh des MITs. Diese basiert auf UDP und kommt mit sich ändernden IP-Adressen wunderbar klar. Darüber hinaus puffert MOSH Eingaben auch, so dass man in der Regel von langsamen Verbindungen nichts zu spüren bekommt. Mit Blink gibt es auch eine iOS-Implementierung die zwar nicht billig ist (21 EUR) aber jeden Cent wert, wenn man Zeit bei der Neuinitialisierung bei Verbindungsabbrüchen sparen kann. Für die Installation innerhalb des DLAMIs reicht ein einfaches

$ sudo apt-get install mosh

Um Mosh innerhalb der Blink Shell zu nutzen sollte sowohl ein neuer SSH-Key als auch ein Host eingerichtet werden.

Über den <host> lässt sich dann direkt die Verbindung in der Blink Shell auf den Host aufbauen

Nach dem Start lässt sich zum Beispiel TensorFlow wie folgt nutzten. Als erstes aktiviert man die entsprechende Version mit

$ source activate tensorflow_p36

und erzeugt dann eine einfache Testanwendung mit Hilfe von vim, zum Beispiel mit folgendem Inhalt:

import tensorflow as tf
hello = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(hello))

Danach kann die TensorFlow-Anwendung mit

$ python3 tensorflow-hello.py

ausgeführt werden.

Editor und Git

Das Thema Code-Editor lässt sich auf vielfachem Weg lösen. Generell gibt es aus Sicht des iPad-Nutzers folgende Szenarien:

  1. Ein lokaler Editor ermöglicht die Code-Änderung z.B. innerhalb eines (Remote-) Git-Repositories
  2. Man nutzt eine Cloud-IDE wie Cloud9 von AWS
  3. Man nutzt ein sauber konfigurierten VIM innerhalb seines AMIs

Als lokaler Editior hat sich der Buffer Editor für iOS bewährt. Dieser unterstützt auf iOS eine Reihe von Diensten wue GitHub, GitLan, iCloud, DropBox, Googel Drive, FTP, SSH und SFTP für den Datenaustausch. Darüber hinaus unterstützt er eine Reihe von VIM-Kommandos und bringt eine große Anzahl unterstützter Programmiersprachen mit. Die von mir benötigten sind Bash, Java, Python und SQL. Benötigt man mehr Freiheitsgrade bei der Konfiguration des eigenen Editors, bietet sich Möglichkeit 3.) an. Auf dem DLAMI lässt sich VI/VIM installieren und entsprechend konfigurieren. Hierbei lassen sich dann auch alle erdenklichen Erweiterungen nutzen. Ich habe dazu folgende .vimrc auf dem DLAMI geschoben.

Jupyter Notebook Server

Auch ein Jupyter Notebook lässt sich im DLAMI betreiben. Wichtig ist nur, dass man diesen richtig absichert, da sonst jeder aus dem Internet Zugriff auf die Notebooks hätte. Am besten erzeugt man sich erstmal ein geeignetes SSL-Zertifikat und ein Passwort für den Schutz des Notebooks. Mit

$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout "cert.key" -out "cert.pem" -batch

erzeugt man das Zertifikat und mit Hilfe von ipython erzeugt man einen Passworthash:

$ ipython
iPythonPrompt> from IPython.lib import passwd 
iPythonPrompt> passwd()

Beide Teile trägt man unter .jupyter in die Konfigurationsdatei ein und startet den jupyter server mit

$ jupyter notebook

Weitere Tools

Es gibt noch eine Reihe weiterer Tools, welche sich für die Arbeit mit dem iPad und der Cloud eignen. Statt Blink lässt sich auch mit Panics (https://panic.com) Prompt 2 (https://panic.com/prompt/) arbeiten, besonders wenn man keine Mosh benötigt. Freunde dieses Tools können auch gleich mit Coda aus gleichem Hause arbeiten. Eine weitere, leistungsfähige Terminal-Anwendung stellt Terminus dar. Nachteil im Gegensatz zu Blink ist, dass Terminus nur als Abo erhältlich ist. Möchte man seine GitHub-Repros auf iOS intuitiver verwaltet, bietet sich iOctocat an. Für die lokale Python Entwicklung empfiehlt sich Pythonista auf dem iPad. Und wer einen schönen Jupyter Notebook Client unter iOS haben möchte, kann zu Juno greifen. Schliesslich lohnt auch noch ein Blick auf Editorial, wohl einem der leistungsstärksten (Markdown) Editoren unter iOS.

Quellen

https://stories.appbot.co/hey-apple-i-tried-the-ipad-pro-as-a-dev-machine-its-almost-awesome-830e424bbed3
https://stories.appbot.co/hey-apple-i-tried-the-ipad-pro-as-a-dev-machine-its-almost-awesome-830e424bbed3
https://jann.is/ipad-pro-for-programming/
https://www.martenbjork.com/blog/2017/6/21/web-development-on-the-ipad-pro
http://decoding.io/using-ipad-pro-as-a-web-developer/
https://blog.ouseful.info/2014/12/12/seven-ways-of-running-ipython-notebooks/
http://keeganhin.es/blog/ds.html

Schreibe einen Kommentar


(required)