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 только для скорости, а если Офиса нет — то они и своими средствами обходятся, но как-то даже и пробовать расхотелось. Спасибо за творчески проведённый день, но мы пока что останемся на той же платформе.
Как говорят на 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
no subject
no subject
no subject
no subject
no subject
социализмматлаб с человеческим лицом‚ его даже гугель знает, о как! (но там вроде пока не 100% совместимости, так что без гарантии)no subject
no subject
no subject
no subject
(Anonymous) 2018-06-29 07:21 pm (UTC)(link)А о каком UNIX у вас таки речь? Если мне склероз не изменяет, с некоторых пор матлаб под UNIX-подобные таки есть только под Линукс и только под 64-битный.
Следующий вопрос: "компилятор" матлаб - я так понимаю это не матлаб кодер, а просто сборка под работу поверх MCR, да?
По поводу / vs. \ многим матлабовским функциям на них начхать, они работают и с тем и с тем вариантом без проблем, поэтому всё переписывать и адаптировать не понадобится.
Насчёт утилит, вызываемых через system - надо будет чинить. Excel... Не знаю.
-- Лёха
no subject
no subject
Работать-то всё работает. Я же говорю, мы свет в конце туннеля увидели за один день. Проблема исключительно в нашей архитектуре - это у нас нет графики на линуксе (так-то матлаб вполне отрисовывает себя и под юниксом), это у нас нет доступа к юниксу для разработчиков (а следовательно нужно предусматривать биномы с админами, которые будут компилировать, не зная, как всё это работает, и разработчиками, которые будут писать практически вслепую). А поскольку вариант юникса рассматривался как альтернативный уже существующему и работающему - то мы и задали себе вопрос, какого чёрта вообще всё это продолжать? Свою систему и сеть мы переделывать не будем, потенциальный выигрыш минимален => забили.
no subject
линуемом - спасибо автокорректLinux из под виндовса запускать или сам погуглить сможешь?Virtualbox например. Как самый базовый вариант.
Обращайтесь если есть вопросы. Можно хоть хадуп забацать. Было бы про что.
no subject
(Anonymous) 2018-06-29 08:48 pm (UTC)(link)Кхе. Про компиляцию ты так и не сказал, что же вы таки компилируете... Но так как вариантов в общем-то всего два %) начну с простого - компиляция под MCR. В этом случае для проверки по быстрому работоспособности своего набора софта, написанного на матлабе, достаточно поднять матлаб на целевой платформе и погонять тесты этого софта (у вас же ведь есть тесты?) прямо из консольной версии матлаба. Вариант второй - адаптировать под кодер и компилировать, как в старые добрые добрые времена, матлаб-код, трансформированный в Си. Есть и такой, да.
Но если у вас кругом и исключительно вин, то ну его нафик, конечно, огороды городить. Ибо в любом случае при переходе на другую ОС/платформу (или при параллельном использовании) будут вылезать разные непотребства. Матлаб матлабом, но под капотом у него всё-одно софт, который оптимизирован под конкретное железо.
Да, про оценку качества софта специалистами из матлаба, ну и в желание впарить вам дополнительный продукт, который решает всё (как водится с конским ценником), я не удивлён. Попробую угадать - это MPS, ака матлаб продакшн сервер? Мы это тоже проходили. На вопрос как у него со стабильностью работы и как часто его надо будет перегружать определённого ответа получить не удалось :) Вопрос был не праздный, ибо у нас тогда только-только выкатили 2016 матлаб и в памяти всё ещё были свежи проблемы стабильности версии 2014.
Кстати, ты не давно писал про баги, связанные с матлабом: у нас на годовалых на то время лаптопах, 2016 жёстко тормозил после старта из-за бага, лечившегося отрисовкой и ручным (из скрипта не помогало!) закрытием пустой картинки, причём матворкс переводил стрелки на баг в видеодрайвере интель. Как тебе?
Лёха Б.
no subject
no subject
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
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