Matlab под Unix
Jun. 29th, 2018 04:14 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
На работе надумали обзавестись серьёзным 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 только для скорости, а если Офиса нет — то они и своими средствами обходятся, но как-то даже и пробовать расхотелось. Спасибо за творчески проведённый день, но мы пока что останемся на той же платформе.
Как говорят на 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 только для скорости, а если Офиса нет — то они и своими средствами обходятся, но как-то даже и пробовать расхотелось. Спасибо за творчески проведённый день, но мы пока что останемся на той же платформе.
no subject
Date: 2018-06-29 02:35 pm (UTC)no subject
Date: 2018-06-29 02:36 pm (UTC)no subject
Date: 2018-06-29 03:04 pm (UTC)no subject
Date: 2018-06-29 03:15 pm (UTC)no subject
Date: 2018-06-29 03:16 pm (UTC)no subject
Date: 2018-06-29 03:17 pm (UTC)социализмматлаб с человеческим лицом‚ его даже гугель знает, о как! (но там вроде пока не 100% совместимости, так что без гарантии)no subject
Date: 2018-06-29 03:18 pm (UTC)no subject
Date: 2018-06-29 03:19 pm (UTC)no subject
Date: 2018-06-29 05:01 pm (UTC)no subject
Date: 2018-06-29 07:21 pm (UTC)А о каком UNIX у вас таки речь? Если мне склероз не изменяет, с некоторых пор матлаб под UNIX-подобные таки есть только под Линукс и только под 64-битный.
Следующий вопрос: "компилятор" матлаб - я так понимаю это не матлаб кодер, а просто сборка под работу поверх MCR, да?
По поводу / vs. \ многим матлабовским функциям на них начхать, они работают и с тем и с тем вариантом без проблем, поэтому всё переписывать и адаптировать не понадобится.
Насчёт утилит, вызываемых через system - надо будет чинить. Excel... Не знаю.
-- Лёха
no subject
Date: 2018-06-29 07:53 pm (UTC)no subject
Date: 2018-06-29 07:58 pm (UTC)Работать-то всё работает. Я же говорю, мы свет в конце туннеля увидели за один день. Проблема исключительно в нашей архитектуре - это у нас нет графики на линуксе (так-то матлаб вполне отрисовывает себя и под юниксом), это у нас нет доступа к юниксу для разработчиков (а следовательно нужно предусматривать биномы с админами, которые будут компилировать, не зная, как всё это работает, и разработчиками, которые будут писать практически вслепую). А поскольку вариант юникса рассматривался как альтернативный уже существующему и работающему - то мы и задали себе вопрос, какого чёрта вообще всё это продолжать? Свою систему и сеть мы переделывать не будем, потенциальный выигрыш минимален => забили.
no subject
Date: 2018-06-29 08:09 pm (UTC)линуемом - спасибо автокорректLinux из под виндовса запускать или сам погуглить сможешь?Virtualbox например. Как самый базовый вариант.
Обращайтесь если есть вопросы. Можно хоть хадуп забацать. Было бы про что.
no subject
Date: 2018-06-29 08:48 pm (UTC)Кхе. Про компиляцию ты так и не сказал, что же вы таки компилируете... Но так как вариантов в общем-то всего два %) начну с простого - компиляция под MCR. В этом случае для проверки по быстрому работоспособности своего набора софта, написанного на матлабе, достаточно поднять матлаб на целевой платформе и погонять тесты этого софта (у вас же ведь есть тесты?) прямо из консольной версии матлаба. Вариант второй - адаптировать под кодер и компилировать, как в старые добрые добрые времена, матлаб-код, трансформированный в Си. Есть и такой, да.
Но если у вас кругом и исключительно вин, то ну его нафик, конечно, огороды городить. Ибо в любом случае при переходе на другую ОС/платформу (или при параллельном использовании) будут вылезать разные непотребства. Матлаб матлабом, но под капотом у него всё-одно софт, который оптимизирован под конкретное железо.
Да, про оценку качества софта специалистами из матлаба, ну и в желание впарить вам дополнительный продукт, который решает всё (как водится с конским ценником), я не удивлён. Попробую угадать - это MPS, ака матлаб продакшн сервер? Мы это тоже проходили. На вопрос как у него со стабильностью работы и как часто его надо будет перегружать определённого ответа получить не удалось :) Вопрос был не праздный, ибо у нас тогда только-только выкатили 2016 матлаб и в памяти всё ещё были свежи проблемы стабильности версии 2014.
Кстати, ты не давно писал про баги, связанные с матлабом: у нас на годовалых на то время лаптопах, 2016 жёстко тормозил после старта из-за бага, лечившегося отрисовкой и ручным (из скрипта не помогало!) закрытием пустой картинки, причём матворкс переводил стрелки на баг в видеодрайвере интель. Как тебе?
Лёха Б.
no subject
Date: 2018-06-30 02:20 pm (UTC)no subject
Date: 2018-07-01 09:34 am (UTC)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, поэтому у меня две версии на компе) - не починим, так хоть поржём с коллегами :-)
no subject
Date: 2018-07-31 07:36 pm (UTC)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 выдала это как "официальное решение", плюс заверение, что это мол баг в видео драйвере Интель, а мы мол можем только развести руками.
А старт Матлаба у нас всегда долгий, ибо он по сети подтягивает дополнительные кастом-тулбоксы.
no subject
Date: 2018-08-15 07:10 am (UTC)