Anatoly Levenchuk (ailev) wrote,
Anatoly Levenchuk
ailev

Мои мечталки и Julia.

Вот мои мечталки, связанные с Julia (http://julialang.org/, русскоязычный чат https://t.me/JuliaLanguage):

1. SysMoLan Studio -- моделер и платформа системного языка моделирования, https://ailev.livejournal.com/1446524.html. В тексте по ссылке дана более-менее подробная постановка задачи и объяснено, почему именно на Julia.

2. Сертифицированный Julia Jetson AGX software stack. NVIDIA выпускает AGX компьютеры с GPU для встроенных применений -- https://www.nvidia.com/en-us/deep-learning-ai/products/agx-systems/. Все они устроены похожим образом, хотя есть и отличия (серии Jetson для роботов, DRIVE для беспилотных автомобилей, Clara для медицинских изображений -- но в основе там стандартные CUDA-чипы).

Начинают в NVIDIA обычно с автомобильного "железа" и софта (денег там побольше), а затем сдвигают эти железо и софт в робототехнику -- например, AGX Xavier уже есть и как DRIVE, и как Jetson. А вот AGX Pegasus пока только как DRIVE, а Jetson ждём-с, ведь пример со сначала автомобильным, а потом робототехническим Xavier перед глазами. Программируются эти компьютеры AGX на дикой смеси из C++ на нижних уровнях (та же CUDA) до Python на верхних уровнях. И много кода, требующего высокой эффективности (робототехника! мало компьютертной мощности, но реальное время!) и поэтому хороших алгоритмов. Вот это и нужно получить на Julia, решая проблему двух языков. Из интересных и трудных возникающих там задач -- это сертификация по нормам безопасного компьютинга (ASIL-D) этого софтверного стека. Само по себе это огромная задача, иметь систему надёжного программирования.

Про Julia Jetson AGX software stack -- это совсем-совсем мечталка. "Если софт уже есть, то кто его будет переписывать, и зачем?" -- это ведь основной вопрос. Julia даёт интересный ответ на этот вопрос: AGX системы по сути являются махонькими такими суперкомпьтерами. А единственный пока язык высокого уровня, который используется для программирования суперкомпьютеров -- это Julia. Если мы хотим компактный (высокоуровневый), легко расширяемый (отладка до самого железа, а не до границы библиотек), быстро выполняющийся (проблема двух языков) код, поощряющий исследования в части новой алгоритмики разных уровней софтверного стека, то Julia даёт такую возможность. Новой алгоритмики -- это потому что проблемы уже написанного стека становятся явно видимы, и их нужно как-то решать.

А если добавить вопросы сертификации в безопасности компьютинга, то результаты могут быть полезны и для развития самой Julia (хотя это уже совсем мечталка). Так что вопрос "зачем переписывать" имеет какой-то ответ, остаются неотвечаемые проблемы в "кто".

Конечно, это задача совсем не та, что в http://www.juliarobotics.org/ и , она будет помасштабней.

3. Учебно-промышленный Julia AI-стек. В нулевой постановке вопроса -- это просто повторение проекта http://www.fast.ai/, только не на Питоне, а на Julia. Курс глубокого обучения на базе оригинальной библиотеки, которую потом можно использовать в production. В расширенной постановке вопроса -- это обучение программированию (входной билет в глубокое обучение), матану, линейной алгебре, байесовской статистике и всем остальным пререквизитам для этого глубокого обучения (см., например, последовательность курсов в "образовательных ступеньках к деланию роботов", https://ailev.livejournal.com/1434868.html). В ещё более крутой постановке вопроса -- это шаг от просто поддержки deep learning к differentiable programming и прочим радостям альтернативной алгоритмики в искусственном интеллекте. Почему это нужно делать на Julia? Ну, Torch перешёл от Lua к Python -- почему? Следующая остановка на этом пути -- как раз Julia. Но основная фишка этого проекта не в "промышленном фреймворке/библиотеке", а в учебности, сопряжённой с промышленным инструментарием. Про эту учебность в части минимальной связки курсов на Julia я даже написал чуть подробней в https://ailev.livejournal.com/1433113.html.

Почему мне так хочется, чтобы это все эти три моих мечталки были на Julia? Неужели я не знаю, что любое упоминание Julia вызывает сразу дискуссию со стороны любителей других языков программирования? Неужели я незнаком с критикой языка? Например, "как вы можете работать с языком, в котором первый элемент массива -- первый, а не нулевой!". Ну да, индексация как в математике, как в инженерии, а не как в программировании -- формулы с индексами из математических и инженерных статей перекладываются в код на Julia один в один, без какой-либо перекодировки индексации! Это всё прикладное программирование, а не системное программирование: работаем с инженерными таблицами и тензорами, а не адресами в памяти. Julia определяется как язык для technical computing, инженерных вычислений. Вот ровно на эту тему и все три проекта из списка моих мечталок. Опять же, кастомные массивы с произвольной индексацией-какую-пожелаешь в Julia есть -- https://github.com/JuliaArrays/OffsetArrays.jl и поддержка для этого -- https://docs.julialang.org/en/latest/devdocs/offset-arrays/. И так по каждому пункту возражений: есть ответы и на аргумент "после NumPy и Pandas математика в Питоне стала быстрой, новых языков не нужно", и на аргумент "Cython всем поможет", и на множество других аргументов. Моё мнение по будущему и развитию Julia я написал в "на выпуск Julia 1.0.0", https://ailev.livejournal.com/1440499.html.

Но есть ещё и мой личный аргумент: Julia мне нравится ещё и по чисто эстетическим соображениям. Я его обнаружил в сентябре 2014 года, и так и написал: "Язык Julia (http://julialang.org/) приобрёл в версии 0.3 полноценный REPL. Почему-то изо всех свеженьких языков программирования мне симпатичен именно он, а не язык Вольфрама и стремительно матереющий Go. Кто-нибудь может мне эту симпатичность объяснить?" (https://ailev.livejournal.com/1139366.html). За эти четыре года в этом отношении для меня мало что изменилось.

Почему я решил выписать тут эти свои мечталки?

Самый верный способ избавиться от лишних для человека мечталок -- это выложить их на бумагу. Мозг после этого уверен, что "эти мечты не забудутся!", и спокойно прекращает об этих мечталках думать. Методики типа GTD рекомендуют после этого регулярно просматривать списки этих мечталок, и брать некоторые из них к исполнению, а остальные честно вычёркивать из списка, как "просто мечты", "хотелки, которые заведомо не будут реализованы". Я пишу тут свой список хотелок по Julia, но не факт, что после этого просто их вычеркну и забуду.

Мечта в этих хотелках -- это то, что я сам хотел бы пописать код на Julia. Ибо меня это почему-то привлекает, мой мозг мне говорит, что в этом много удовольствия (врёт, конечно, но этому вранью почему-то хочется верить -- это ведь и есть "мечта"?). Но я понимаю, что не буду сам писать промышленный и тем более исследовательский код на Julia, ибо для этого нужно бросить чуть более чем все остальные деятельности, чтоб потратить пару лет для выхода на нужный уровень профессионализма -- и по факту стать разработчиком или даже разработчиком-исследователем. Хочу ли я этого? Нет, я уже был программистом, но перестал активно писать код где-то в 1987 году. Но я вплоть до последнего времени регулярно руководил разработкой того или иного софта, и от этого не зарекаюсь и сейчас. Так что эти проекты для меня "бесплодные мечталки" лишь наполовину. Если мне подвернётся возможность/ресурсы эти проекты реализовать -- я мимо этих возможностей не пройду, а активно ввяжусь, хотя и не в роли программиста. А по первому проекту я уже делаю активные телодвижения.

В принципе, весь этот пост -- ответ на первые два коммента к моему посту "Об Julia language" ещё из февраля 2015 года (https://ailev.livejournal.com/1164251.html):
kuzh -- вот блин, языков распрекрасных всё больше, а программы всё хуже!
ailev -- Так более выразительный язык помогает не только хорошую мысль выразить лаконично, но и плохую мысль выразить крайне точно и эффективно для её реализации на практике!

Вот и хотелось бы на распрекрасном языке выразить какие-то хорошие мысли.
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 7 comments