green_fr: (Default)
green_fr ([personal profile] green_fr) wrote2018-06-29 04:14 pm
Entry tags:

Matlab под Unix

На работе надумали обзавестись серьёзным production для проекта, написанного на MatLab.

Как говорят на anekdot.ru, преамбула. Мы когда-то давно говорили с MathWorks по несколько иному поводу — у нас были сомнения в производительности системы, они предложили аудит нашего кода, мы с удовольствием согласились. Ребята втроём копали код несколько дней, сгенерировали кучу слайдов для презентации, которая сводилась к двум пунктам:
1. Ваш код написан идеально, не к чему придраться!
2. Мы можем вам продать сервер за какие-то шестизначные суммы в год, летать будет всё.

Первый пункт лично мне понравился, но оставались какие-то сомнения в его искренности. Через некоторое время у меня дошли руки просмотреть profile проекта, перечитать код модуля, который жрал 90% общего времени (в качестве отмазки себя и своих коллег скажу, что он таки был написан IT-консультантом, настоящим профессионалом своего дела, за какие-то космические деньги в час), выкинул оттуда все лишние строчки (только то, что считается по два раза, и то, что считается впустую — никакой алгоритмической оптимизации), и код стал работать вчетверо быстрее.

После чего сомнения появились и во второй строчке презентации MathWorks (дети! никогда не обманывайте! особенно там, где вас можно легко поймать...) — так ли нам нужен их сервер, если мы можем скопилировать проект и распихать его по уже имеющимся серверам в виде простых exe-шников?


Перехожу ко вчерашней истории. Погоняли мы проект на Windows-машине, хоть на физической, хоть на виртуальной. По этому поводу удивительное дело — у нас IT-дирекция перешла недавно на какую-то более свежую версию виртуализации, и вместо x4 к времени рассчётов, как было раньше, виртуализация даёт всего +10%. Очень хорошо, но мы решили проверить и виртуальные Unix-машины. И тут начался эпос.

1. Компилятор MatLab компилирует только под ту платформу, где он сам находится. При том, что для скомпилированного кода ставится «Matlab runtime environment» на гигабайт, то есть я ожидал компиляции по типу java — в некоторый псевдо-код, единый для всех платформ. Но нет. Я несколько раз переспрашивал, прежде чем поверил. В счастью, «платформа» — это одна из трёх групп: Windows, Mac, Unix.

2. У нас нет клиентских Unix-машин. В смысле простого доступа к ним (я не могу ни «подключиться к экрану», ни зайти по telnet — это отдельная сетка, мне туда входа нет. Договорились, что я подъеду в Orléans, где сидят наши администраторы. По этому поводу — карикатурная ситуация с бородатыми админами в майках и с пивом осталась, только мальчики успели подрасти и поседеть/полысеть, но атмосфера всё та же.

3. У нас нет никакого графического интерфейса на Unix. По этому поводу MathWorks выдал прекрасный термин (наверное, распространённый, я просто давно не общался на эти темы): headless installation. Да, MatLab можно поставить без GUI, только с командной строкой.

4. Стандартный вариант установки: скачиваем «маленький» инсталлятор (120 MB), вводим все идентификаторы, и он скачивает всё необходимое для установки именно того, что ты купил. Очевидно, что этот инсталлятор графический, для нас не подходит. Ок, говорят MathWorks (в какой-то момент они меня начали по голосу узнавать, я им звонил раз 10 вчера), вы можете скачать два iso-образа со всеми продуктами, в момент инсталляции поставится то, что вам нужно. По этому поводу я не премину потоптаться по компетентности наших коллег из MathWorks. Говорят дословно: скачайте iso-образы и разархивируйте их в одну папку. Что значит, «разарзивируйте», в некотором ошалении спрашиваю я? Да, говорят, это то же самое, что zip, он просто называется iso :-)

5. Скачали образы, 11 GB. Сидящий рядом со мной администратор Unix’а начинает нервничать, потому что у него на машине свободного места не так много, и он не собирался сегодня пересматривать всю свою файловую систему. Начали ставить, места предсказуемо не хватает. Попытался стереть откровенно ненужные файлы (всё, что начинается с Simulink — это другой продукт MathWorks, мы его не покупали), но установщику зачем-то нужны все эти файлы. Я вспомнил молодость, жонглирование файлами на дискетах без жёского диска — красиво, но нет, тоже не получилось. С матюками админ полез добавлять ещё одну файловую систему.

6. Ещё одно погружение в детство — для установки нужно отредактировать файл параметров. Очевидно запускаем vi — и руки мои всё ещё помнят, как в нём работать! В этот момент я, по-моему, сильно вырос в глазах всех администраторов. До этого я был для них очередным «представителем клиента», человеком, который должен путать слова «монитор» и «компьютер».

7. Аутентификация MatLab’а проходит через так называемый license server. У нас было много вопросов по этому поводу: моя лицензия привязана к моему Windows-account, как объяснить серверу, что я из-под Unix — это тот же самый я? Попытались вообразить разные варианты аутентификации, потом всё-таки позвонили MathWorks — спокойно, говорят. Мы проверяем только имя пользователя. Чисто как строку. Хозяйке на заметку: для того, чтобы использовать зарегистрированный на кого-то другого MatLab, достаточно создать локальную учётную запись с тем же именем.

8. С горем пополам поставили, скомпилировали, запустили — не работает. Но это уже понятно: у нас весь код с анти-слэшами, а для Unix’а слэши нужны прямые. MatLab даже предлагает мега-функцию filesep, которая возвращает «\» или «/» в зависимости от платформы. На этом мы с админами расстались, договорившись, что я сегодня перепишу всё через эту функцию.

9. Приехав сегодня на работу, я увидел, что мы используем ещё и system для запуска команд DOS (тоже всё работа с файлами) — понятно, что можно написать везде if и продублировать на Unix, но как мы всё это будем тестрировать без доступа к машинам? Плюс, у нас есть работа с Excel — опять же, MathWorks божится, что все его функции используют MS Office API только для скорости, а если Офиса нет — то они и своими средствами обходятся, но как-то даже и пробовать расхотелось. Спасибо за творчески проведённый день, но мы пока что останемся на той же платформе.

[identity profile] birdwatcher.livejournal.com 2018-06-29 02:35 pm (UTC)(link)
Больно читать.

[identity profile] wladuszka.livejournal.com 2018-06-29 02:36 pm (UTC)(link)
Иногда кажется, что Юникс специально создан тайной ложей сисадминов, чтобы максимально простые вещи делать максимально сложным и трудозатратным способом. Сложным — чтобы админы могли чарджить заоблачные рейты. Трудозатратным — чтоб можно было получать свой заоблачный рейт за как можно большее количество часов :)

[identity profile] xxxxx.livejournal.com 2018-06-29 03:04 pm (UTC)(link)
матлаб поставленый с гуями можно запросто запустить без гуёв если есть желание (какая-то команда в rc-файле или опция командной строки, не помню, RTFM). Больше того, сюрпрайз-сюрпрайз, если на него куплено Х лицензий для одновременного запуска на этой машине, то это число вычисляется только по запущенным гуям, а если кто без головы запустит, то единичка не вычитается, прикинь -- чистый коммунизм и халява. А раз ты такой крутой матлаб-хакер, по погляди может оно на октаве запустится, это в принципе тоже "плакать и продолжать жрать кактус", но кактус не такой колючий и чуток послаще

[identity profile] green-fr.livejournal.com 2018-06-29 03:15 pm (UTC)(link)
У нас, слава богу, количество не считается, у нас другая версия лицензирования. Но идея полезная, спасибо :-) А что такое "октав"?

[identity profile] green-fr.livejournal.com 2018-06-29 03:16 pm (UTC)(link)
Ну, я вообще-то Unix очень люблю. Просто конкретно этот продукт, похоже, под него даже не задумывали. Написали версию "для галочки" - у них аналогично есть Matlab for Android, там список доступных функция на одной странице помещается. Чисто выпендриться.

[identity profile] xxxxx.livejournal.com 2018-06-29 03:17 pm (UTC)(link)
октав это социализм матлаб с человеческим лицом‚ его даже гугель знает, о как! (но там вроде пока не 100% совместимости, так что без гарантии)

[identity profile] green-fr.livejournal.com 2018-06-29 03:18 pm (UTC)(link)
О, нет, даже если там есть функция "конвертировать всё" - это для нас не вариант :-)

[identity profile] xxxxx.livejournal.com 2018-06-29 03:19 pm (UTC)(link)
в каком смысле "конвертировать" ? это тот же язык

[identity profile] wladuszka.livejournal.com 2018-06-29 05:01 pm (UTC)(link)
В размере твоего почасового рейта я и не сомневался ;)))

(Anonymous) 2018-06-29 07:21 pm (UTC)(link)
Хм. А у нас оно вполне себе крутится (для алгоритмов, не критичных по скорости/пожираемым ресурсам, в приложениях, которые не должны работать 24/7). Разработчики алгоритмов сидят на вин, потом эти же самые алгоритмы встраиваются в конечный продукт на линуксе.

А о каком UNIX у вас таки речь? Если мне склероз не изменяет, с некоторых пор матлаб под UNIX-подобные таки есть только под Линукс и только под 64-битный.

Следующий вопрос: "компилятор" матлаб - я так понимаю это не матлаб кодер, а просто сборка под работу поверх MCR, да?

По поводу / vs. \ многим матлабовским функциям на них начхать, они работают и с тем и с тем вариантом без проблем, поэтому всё переписывать и адаптировать не понадобится.

Насчёт утилит, вызываемых через system - надо будет чинить. Excel... Не знаю.

-- Лёха

[identity profile] green-fr.livejournal.com 2018-06-29 07:53 pm (UTC)(link)
Я продаюсь только целиком!

[identity profile] green-fr.livejournal.com 2018-06-29 07:58 pm (UTC)(link)
А ты какой именно Лёха? :-)
Работать-то всё работает. Я же говорю, мы свет в конце туннеля увидели за один день. Проблема исключительно в нашей архитектуре - это у нас нет графики на линуксе (так-то матлаб вполне отрисовывает себя и под юниксом), это у нас нет доступа к юниксу для разработчиков (а следовательно нужно предусматривать биномы с админами, которые будут компилировать, не зная, как всё это работает, и разработчиками, которые будут писать практически вслепую). А поскольку вариант юникса рассматривался как альтернативный уже существующему и работающему - то мы и задали себе вопрос, какого чёрта вообще всё это продолжать? Свою систему и сеть мы переделывать не будем, потенциальный выигрыш минимален => забили.

[identity profile] igann.livejournal.com 2018-06-29 08:09 pm (UTC)(link)
Показать как виртуальные машины с линуемом - спасибо автокоррект Linux из под виндовса запускать или сам погуглить сможешь?

Virtualbox например. Как самый базовый вариант.

Обращайтесь если есть вопросы. Можно хоть хадуп забацать. Было бы про что.
Edited 2018-06-29 20:13 (UTC)

(Anonymous) 2018-06-29 08:48 pm (UTC)(link)
Голландской :D

Кхе. Про компиляцию ты так и не сказал, что же вы таки компилируете... Но так как вариантов в общем-то всего два %) начну с простого - компиляция под MCR. В этом случае для проверки по быстрому работоспособности своего набора софта, написанного на матлабе, достаточно поднять матлаб на целевой платформе и погонять тесты этого софта (у вас же ведь есть тесты?) прямо из консольной версии матлаба. Вариант второй - адаптировать под кодер и компилировать, как в старые добрые добрые времена, матлаб-код, трансформированный в Си. Есть и такой, да.

Но если у вас кругом и исключительно вин, то ну его нафик, конечно, огороды городить. Ибо в любом случае при переходе на другую ОС/платформу (или при параллельном использовании) будут вылезать разные непотребства. Матлаб матлабом, но под капотом у него всё-одно софт, который оптимизирован под конкретное железо.

Да, про оценку качества софта специалистами из матлаба, ну и в желание впарить вам дополнительный продукт, который решает всё (как водится с конским ценником), я не удивлён. Попробую угадать - это MPS, ака матлаб продакшн сервер? Мы это тоже проходили. На вопрос как у него со стабильностью работы и как часто его надо будет перегружать определённого ответа получить не удалось :) Вопрос был не праздный, ибо у нас тогда только-только выкатили 2016 матлаб и в памяти всё ещё были свежи проблемы стабильности версии 2014.

Кстати, ты не давно писал про баги, связанные с матлабом: у нас на годовалых на то время лаптопах, 2016 жёстко тормозил после старта из-за бага, лечившегося отрисовкой и ручным (из скрипта не помогало!) закрытием пустой картинки, причём матворкс переводил стрелки на баг в видеодрайвере интель. Как тебе?

Лёха Б.

[identity profile] wildest-honey.livejournal.com 2018-06-30 02:20 pm (UTC)(link)
Это какой надо Леха:)

[identity profile] green-fr.livejournal.com 2018-07-01 09:34 am (UTC)(link)
1. Заведи себе пустой ЖЖ, чтобы хотя бы а) комменты ответов на почту приходили, б) я не нажимал каждый раз "это не спамер, это осмысленный человек" ;-)
2. Про тесты - это да, ты хорошо пошутил. У меня уже который год в todo висит "разобраться / сделать тесты", но целесообразность этого крайне сложно объяснить всем остальным. Мы всё-таки не IT, у меня там у одного есть хоть какие-то понимания в этой области. Я тебе рассказывал, с каким трудом я пробивал source control? Но я не сдаюсь.
3. Компилим да, под MCR. Вариант под C есть, но у нас никто не знает, что с ним дальше делать, и никто не собирается узнавать. По той же причине - IT это нафиг не нужно, потому что это "не их проект", а нам - кишка тонка, потому что не наши компетенции. Весь проект в итоге - это постоянное лавирование меж двух дирекций. Собственно, не поедь я в Орлеан (а это возможно только потому, что я работал в обеих дирекциях, и едва не единственный могу разговаривать и с теми, и с теми, не сваливаясь в "вы все тут идиоты" - помнишь бесконечные анекдоты про программистов и бухгалтеров?), на проект забили бы ещё раньше. Что там - он и не родился бы. Проблемы не столько технические, сколько организационные - просто технические проблемы убивают проект, потому что из-за них организация должна стать совсем сложной: мы не можем припахать админа на постоянной основе, потому что это не наша дирекция. А без него - не можем тестировать, потому что он не даст нам машину, потому что другая дирекция. Ну и так далее.
4. Собственно, главная проблема - это именно отсутствие доступа у нас (разработчиков) к целевой платформе. То есть да, можно пофантазировать о виртуальной машине на нашей машине, но я предпочитаю оставаться реалистом.
5. Да, MPS. Мы (я) тогда тоже успели поругаться с ними примерно на ту же тему :-) Я взял тесовую версию Parallel Computing Toolbox, всё летает, только время от времени виснет. Явно ждёт какой-то timeout (типа 2-3 минуты), отвисает - и летит дальше. Я пытался пробить какой-то ответ, но мне говорили (вот дословно!): ничего не знаем, проблемы только у вас, у всех остальных всё работает. Учитывая, что тот же MPS завязан именно на PCT, лично я же активно голосовал против него - нет никакой видимости стабильности работы.
6. А про долгий startup R2016b - расскажи подробности? Потому что у нас на 6 машин была одна, где всё стартовало "мгновенно", а остальные 5 показывали минуту (без преувеличения) splash screen. Жутко раздражает (у нас production до сих пор на R2016b, поэтому у меня две версии на компе) - не починим, так хоть поржём с коллегами :-)

[identity profile] ln-kwah.livejournal.com 2018-07-31 07:36 pm (UTC)(link)
1. Сделано (отпуск, хе-хе) :D Сначала сделал [livejournal.com profile] green_nl, но Женька настояла на немедленном переименовании, ибо я никак не зелёный. Теперь думаю, что делать с этим аккаунтом.

2. Если мне склероз не изменяет, начиная с 2013 сколько-то там к матлабу таки прикрутили unit test framework, так что... С VCS (aka Version Control System) он тоже может прямо из своего пользовательского интерфейса, но сделано как обычно через одно место, так что лучше всё таки пользоваться более умными и родными клиентами.

3. MCR - самый простой способ. Другой вариант - использовать Matlab Coder. Он работает так же, как оно происходило до эпохи MCR, - m-код транслируется в Си-код, который потом компилируется сторонним компилятором, например тем же gcc. Для этого правда, нужно писать матлаб код в принципе сразу в Си-стиле, иначе он либо не оттранслируется корректно, либо будет криво работать. Плюс, Matlab Coder поддерживает не все матлаб конструкции и типы данных. До 2018а, он, например, не поддерживал разреженные массивы (или как там оно правильно, в общем sparse arrays).

Когда общались с Mathworks вполне себе наблюдали проблему большой организации и сложного продукта, ибо сложилось стойкое ощущение, что разработчики Matlab Coder вообще никак не работают с теми, кто пилит эмбеддинг через MCR, а также с теми кто разрабатывает и "улучшает" от версии к версии язык.

4. Хм, доступ к целевой платформе и не нужен. Процесс можно обкатать на своей платформе под родные компиляторы (конфигурация, сборка, настройка и т.п.), а потом уже думать, насколько оно вам надо в дальнейшем.

5. Да-да, стандартная отмазка. У нас и у других всё работает. А начинаешь копать - всё они (Mathworks) знают и о стабильности работы, и о перегрузке серверов. Но ещё один "нужный" продукт втюхать - это же святое.

6. Ой, как в анекдоте получается :)

Не 2016, а 2014b и не долгий стартап, а 100% нагрузка на процессор после запуска Матлаба. Он на 100% грузил одно ядро. Лечилось выдачей команды figure и последующим закрытием окна картинки. Причём только руками, из скрипта, подключенного к startup, не помогало. Поддержка Mathworks выдала это как "официальное решение", плюс заверение, что это мол баг в видео драйвере Интель, а мы мол можем только развести руками.

А старт Матлаба у нас всегда долгий, ибо он по сети подтягивает дополнительные кастом-тулбоксы.

[identity profile] green-fr.livejournal.com 2018-08-15 07:10 am (UTC)(link)
Да, ЖЖ перенимает все лучшие фичи ФБ, начал прятать спам без предупреждения...