Interview mit den Entwicklern von Julia

„Julia ist bei einfachen Machine-Learning-Aufgaben mit Python vergleichbar, aber besser geeignet für komplexere.“
Keine Kommentare

Die Programmiersprache Julia wurde erstmals im Jahr 2012 veröffentlicht. Wir sprachen mit den vier Entwicklern der Sprache, Dr. Viral B. Shah, Dr. Jeff Bezanson, Stefan Karpinski und Prof. Alan Edelman, um herauszufinden, ob Julia ihren hohen Erwartungen gerecht werden konnte. Im Interview gingen sie zudem auf verschiedenste Anwendungsfälle ein, in denen Julia heute zum Einsatz kommt, sowie darauf, wie sich die Sprache im Vergleich zu Python schlägt und wohin die Reise geht.

Entwickler: Hallo und danke, dass ihr euch Zeit für dieses Interview genommen habt. Im Jahr 2012 habt ihr in einem ausführlichen Blogeintrag eure Gründe für die Entwicklung von Julia dargelegt. Hat die Programmiersprache es geschafft, eure Erwartungen zu erfüllen – oder sie sogar übertroffen?

Julia-Team: Wir sind überzeugt, dass Julia die Erwartungen des ursprünglichen Blogeintrags erfüllt hat. Heute erreicht Julia eine Performance, die für technische Berechnungen um Längen besser ist als andere dynamische Sprachen. Native Julia-Programme sind oft 10x-100x schneller als ähnliche Programme in R, Python, Matlab usw. Hier ist ein kürzlich auf Twitter diskutiertes Machine-Learning-Beispiel, in dem Julia 10x-100x schneller ist als Python.

Julia ist für alle Arten von technischen Berechnungen gut geeignet.

Gleichzeitig ist Julia universell einsetzbar und bietet Möglichkeiten zur Erstellung von Dashboards, Dokumentationen, REST-APIs, Webanwendungen, zur Integration mit Datenbanken und vieles mehr. Infolgedessen wird Julia nun zunehmend in verschiedenen Branchen auch kommerziell genutzt. Data Scientists und Ingenieure in verschiedenen Industriezweigen verwenden Julia nicht nur zur Entwicklung ihrer Modelle, sondern können ihre Programme mithilfe der Produkte von Julia Computing mit einem einzigen Klick in die Produktion überführen.

Natürlich bleibt noch viel zu tun. Während wir heute über ein florierendes Ökosystem von über 3.000 Julia-Paketen und die Möglichkeit verfügen, jede Bibliothek aufzurufen, die in Python, R, C, C++ oder Java geschrieben ist, haben wir uns in letzter Zeit darauf konzentriert, unser Multicore-, GPU- und verteiltes Rechnen zu verbessern.

Entwickler: Was war das Schwierigste daran, eine neue Programmiersprache zu entwickeln – und würdet ihr mit eurem heutigen Wissen anders an die Sache herangehen?

Julia-Team: Programmiersprachen sind eines der grundlegendsten Konstrukte der Informatik. Sie bilden im Wesentlichen die Schnittstelle zwischen dem Programmierer und dem Computer. Jede kleine Entscheidung, die man als Entwickler einer Programmiersprache trifft, wirkt sich täglich auf die Produktivität von Hunderttausenden von Programmierern und Forschern aus.

Rückblickend glauben wir zwar nicht, dass wir alles perfekt gemacht haben, aber wir glauben auch nicht, dass wir größere Fehltritte oder Rückschläge erlitten haben.

Einer der schwierigeren Aspekte ist das Durchhaltevermögen. Wir haben das Projekt 2009 begonnen und 2012 eine öffentliche Open-Source-Ankündigung gemacht. Schon in den frühen Tagen war klar, dass wir das schwierige „Zwei-Sprachen-Problem“ lösen konnten – Performance und Produktivität in derselben Sprache zu vereinen. Es war jedoch unklar, ob die Welt dies annehmen würde. Zwar ist es einfach, 2-3 Jahre lang an einem Hobby zu arbeiten, aber es ist schwer, solche Anstrengungen über einen langen Zeitraum aufrechtzuerhalten und eine ernsthafte Arbeit zu leisten, die das Hobby zu dem wirklich robusten, industrietauglichen System macht, das es heute ist.

Eine Programmiersprache braucht mindestens 10 Jahre, um eine kritische Masse zu erreichen – sowohl in technischer als auch in sozialer Hinsicht. Wir alle waren in den ersten Jahren mit vielen verschiedenen Dingen beschäftigt. Viral arbeitete für das Aadhaar-Projekt der indischen Regierung, Stefan war Data Scientist bei Etsy und Jeff arbeitete an seiner Doktorarbeit am MIT. Über die Jahre hinweg gelang es uns, unsere Entschlossenheit zu bewahren sowie nach und nach mehr Zeit auf Julia zu verwenden. Vor etwa 5 Jahren gründeten wir Julia Computing, um Julia in Unternehmen zu bringen und als eine Möglichkeit für uns, hauptberuflich an dem zu arbeiten, wofür wir uns leidenschaftlich interessieren.

Wir haben das unglaubliche Glück, seit 10 Jahren an Julia arbeiten zu können. Das ursprüngliche Gründungsteam ist nicht nur weiterhin vereint, sondern das Core Team, das an der Entwicklung von Julia arbeitet, ist erheblich gewachsen. Rückblickend glauben wir zwar nicht, dass wir alles perfekt gemacht haben, aber wir glauben auch nicht, dass wir größere Fehltritte oder Rückschläge erlitten haben.

Entwickler: Für welche Anwendungsfälle ist Julia eurer Meinung nach am besten geeignet?

Julia-Team: Julia ist für alle Arten von technischen Berechnungen gut geeignet. In Data-Science- und Engineering-Workflows ist die Leistung von entscheidender Bedeutung – sei es, um extrem große Datensätze auf den neuesten CPUs zu analysieren, komplexe KI-Modelle maßstabsgetreu auf GPUs auszuführen oder wissenschaftliche Simulationen auf Supercomputern zu erstellen. In all diesen Bereichen bietet Julia einen mindestens 10-fachen Vorteil gegenüber der Konkurrenz. Die Sprache befähigt ein kleines Team von Data Scientists und Engineers, das zu erreichen, wofür sonst ein viel größeres Team nötig gewesen wäre. Sie ermöglicht es, mit einem neuen Produkt als Erster auf dem Markt zu sein, und das zu geringeren Kosten.

Entwickler: Wie schlägt sich Julia im Vergleich zu Python, wenn es um den Bereich Machine Learning geht?

Julia-Team: Julia ist bei einfachen Machine-Learning-Aufgaben mit Python vergleichbar, aber besser geeignet für komplexere. In Situationen, in denen eine vorhandene Python-Bibliothek keine einsatzbereite Funktion bietet, muss man sie selbst schreiben. In Python ist das jedoch eine Herausforderung, weil man entweder mit einer schlechten Performance leben oder anfangen muss, Python-Erweiterungen in C oder Cython oder ähnlichem zu schreiben. Wenn man in Julia eine eigene Lösung entwickeln muss, ist sie oft nicht nur einfach zu implementieren, sondern kann sogar eine noch höhere Leistung als bei der Verwendung bereits vorhandener Bibliotheken erzielen. Wir stellen fest, dass viele Benutzer Julias Flux- und Knet-Packages aus diesem Grund mögen – man schreibt einfach normalen Code und kann ihn differenzieren, und oft ist dieser bereits schnell genug. Aus dem gleichen Grund mögen viele Benutzer auch Julias Turing.jl-Package für probabilistisches Programmieren.

Wir haben Wissenschaftler viele Dinge tun sehen, die in anderen Sprachen schwierig (oder unmöglich) wären.

In Systemen wie TensorFlow kann man normalerweise nicht die Fähigkeiten von Standard-Python-Packages nutzen. Julia-Frameworks für Machine Learning erlauben auch die Wiederverwendung vorhandener Julia-Packages für Dinge wie Datei-Eingabe/Ausgabe, statistische Verteilungen, verteiltes Rechnen, Bildverarbeitung usw. Beim Deployment geht es einfach darum, den Julia-Code wie jeden anderen zu kompilieren. Diese größeren Frameworks sind sehr aufmerksam, und die Julia-Tools haben die Erstellung von Next-Gen-Redesigns wie TensorFlow 2.0 beeinflusst.

Infolgedessen haben wir Wissenschaftler viele Dinge tun sehen, die in anderen Sprachen schwierig (oder unmöglich) wären. Zum Beispiel kann man komplexe Julia-Packages wie Ray Tracer in ML-Modelle umwandeln und Computer-Vision- oder Robotersteuerungssysteme bauen, die unglaublich schnell trainiert werden können. Diese Ideen sind sehr allgemein und wurden in so weit entfernten Bereichen wie Quantenalgorithmen und Quanten-ML, nordischer Energiehandel, Entwurf von Photonenchips, Energiefluss in elektrischen Schaltkreisen, medizinische Bildgebung, Exascale-Berechnungen, Modellierung von Infektionskrankheiten und sogar in der Verkehrsführung angewandt. Man kann Julias ML-Packages sogar wieder auf sich selbst anwenden und so bessere Trainingsalgorithmen erzielen. Es ist erstaunlich, wie weit die Leute dieses System treiben und Dinge tun, die wir uns selbst nie hätten vorstellen können.

Im Bereich des wissenschaftlichen Machine Learning stellt Julia einen vollständigen SciML Stack zur Verfügung, der weder in Python noch einem anderen Programmiersprachen-Ökosystem verfügbar ist.

Entwickler: Julia 1.4 ist im März 2020 erschienen. Was sind daran für euch die Highlights?

Julia-Team: Multithreading ist eine zentrale Funktion, die wir kürzlich mit Version 1.3 angekündigt hatten, und sie ist in 1.4 noch schneller und robuster geworden. In Julia 1.4 sind auch eine Menge anderer Performance-Verbesserungen enthalten. Eine der wichtigsten betrifft das Time-to-first-plot-Problem, bei dem Julia mehr als 30 Sekunden brauchte, um den ersten Plot nach dem Start zu generieren. Der erste Plot wird jetzt in 12 Sekunden erstellt. Die Reduzierung der Kompilierungslatenz hat für das Compiler-Team derzeit die höchste Priorität.

Der erste Plot wird jetzt in 12 Sekunden erstellt. Die Reduzierung der Kompilierungslatenz hat für das Compiler-Team derzeit die höchste Priorität.

Auch Julias neuer BinaryBuilder für binäre Artefakte wird in Julia 1.4 zum ersten Mal ausgiebig genutzt. Das bedeutet, dass, anstatt zu versuchen, binäre Dependencies auf jedem Client-Rechner zu erstellen – was manchmal funktioniert, aber leicht fehlschlagen und sehr frustrierend sein kann –, in 1.4 für binäre Dependencies, sofern sie es unterstützen, diese einfach entpackt und ohne jeden Build-Schritt verwendet werden können. Dies bietet eine viel zuverlässigere Erfahrung und bedeutet, dass komplexe Stacks wie GUI-Toolkits „ganz einfach“ out-of-the-box funktionieren, und zwar plattformübergreifend auf konsistente Weise. GPU-Fähigkeiten funktionieren auch out-of-the-box, wenn man Packages wie CuArrays.jl installiert. Es ist eine Art magische Erfahrung. Die zugrundeliegende Technologie für BinaryBuilder ist ziemlich unglaublich, aber die wirkliche Magie besteht darin, dass so viele Leute aus der Entwickler-Community zusammengekommen sind, um serverseitige, plattformübergreifende Build-Rezepte für verschiedene Bibliotheken zu erstellen. All diese Technologie bedeutet auch, dass das Anwendungsdeployment äußerst zuverlässig, reproduzierbar und portabel ist.

Entwickler: Was ist für die Zukunft von Julia geplant?

Julia-Team: Es gibt mehrere Baustellen für die Zukunft – Parallel Computing, erweiterte Compiler-Unterstützung für differenzierbare Programmierung, Unterstützung für weitere GPU-Beschleuniger neben NVIDIA (z. B. Intel und AMD), Verbesserungen bei der Code-Generierung und den Debugging-Workflows, bessere Fehlermeldungen sowie ein verbesserter Parser, verbesserte IDE-Integration, Package-Statistiken für Package-Autoren und vieles mehr.

Außerdem konzentrieren wir uns bei Julia Computing weiterhin auf Stabilität und Zuverlässigkeit und auf die Erstellung von Produkten zur Unterstützung von Unternehmen bei der Verwendung von Julia. Zu diesem Zweck arbeiten wir derzeit an JuliaTeam (um es einem Entwicklerteam zu erleichtern, Julia-Anwendungen zu erstellen) und JuliaRun (für eine effektive Skalierung und Bereitstellung von Julia-Anwendungen).

Entwickler: Vielen Dank für das Interview!

Dr. Viral B. Shah is Co-founder and CEO, Julia Computing. He is also a co-creator of the Julia programming language. He received the 2019 James H. Wilkinson Prize for Numerical Software for his work on Julia. Besides Julia, he also developed the open source Circuitscape software for conservation. He is a co-author of “Rebooting India”, a book that discusses what it takes to successfully execute complex technology projects in government, based on his experience with India’s Aadhaar-ID project. Viral holds a Ph.D. in computer science from the University of California, Santa Barbara. He received his undergraduate degree in computer engineering from the University of Mumbai.
 
Dr. Jeff Bezanson is Co-founder and CTO, Julia Computing. He co-founded the Julia project at MIT in 2009 and eventually received a Ph.D. related to the language in 2015. He is also a recipient of the 2019 James H. Wilkinson Prize for Numerical Software for his work on Julia. Jeff received his B.A. from Harvard in 2004.
 
Stefan Karpinski is Co-founder and CTO, Julia Computing, and also one of the creators of Julia. He received the 2019 James H. Wilkinson Prize for Numerical Software for his work on Julia. He also has a part-time appointment at New York University’s Center for Data Science as a Research Engineer. Prior to his work on Julia, he worked at Etsy and Akamai. Stefan received a B.A. in mathematics from Harvard in 2000.
 
Prof. Alan Edelman is one of the co-founders of Julia Computing and its Chief Scientist. He is a Professor of Applied Mathematics at the Massachusetts Institute of Technology and a Principal Investigator at the MIT Computer Science and AI Laboratory (CSAIL) where he leads a group in Applied Computing. A Sloan fellow, Edelman received an NSF Faculty Career award in 1995. He has received numerous awards, among them the Gordon Bell Prize and Householder Prize (1990), the Chauvenet Prize (1998),[8] the Edgerly Science Partnership Award (1999), the SIAM Activity Group on Linear Algebra Prize (2000), and the Lester R. Ford Award,[9] (2005, with Gilbert Strang), IEEE Charles Babbage award (2015), and the IEEE Sidney Fernbach award (2019). Alan is a Fellow of the SIAM, AMS, and IEEE societies.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu:
X
- Gib Deinen Standort ein -
- or -