🏎 Pytorch Cuda Graphs ⚡️
К новостям обновлений Pytorch.
Обычно вычисления в пайторч происходят следующим образом: у нас есть какой-то код на питоне, который контролирует порядок операций, аля перемножения матриц, сверток и прочего. Каждая такая операция представляет из себя один или несколько cuda kernels, это такая маленькая функция которая может выполняться параллельно на множестве ядер видеокарты.
Проблема здесь заключается в том, что в угоду того, чтобы вам было удобно дебагать и получать результаты работы вашей модели, процесс вычислений контроллируется именно на CPU, а значит после каждого выполнения kernel'а управление программой возвращается процессору, в то время пока GPU простаивает, в связи с чем мы теряем в производительности.
На одной маленькой видеокарте это может быть совсем незаметно, но когда мы говорим о больших кластерах, то эти задержи преобретают колосальные масштабы. Ведь при обучении на множестве гпу нам необходима синхронизация между гпу/машинами, а такого рода задержки усугубляют весь процесс, ведь вся система движется с максимальной скоростью самого слабого звена (в нашем случае процессора, на который может влиять множество факторов, от текущей загрузки, до температуры и конфигураций троттлинга)
Cuda Graphs решает эту проблему - давайте вместо того, чтобы передавать управление cpu каждый раз, возвращая результат работы, мы построим конвеер прямо на видеокарте, на котором все будет считаться быстро, без задержек, а уже результат передавать обратно после расчета всего графа.
Звучит круто, и так оно и есть! Ребята смогли ускорить обучение Mask RCNN в 1.75 раза.
Но, конечно мы жертвуем гибкостью, никаких вам динамических шейпов или условий по среди модели, все четко и статично.
Подробнее и с примерами кода читать тут:
https://pytorch.org/blog/accelerating-pytorch-with-cuda-graphs/
К новостям обновлений Pytorch.
Обычно вычисления в пайторч происходят следующим образом: у нас есть какой-то код на питоне, который контролирует порядок операций, аля перемножения матриц, сверток и прочего. Каждая такая операция представляет из себя один или несколько cuda kernels, это такая маленькая функция которая может выполняться параллельно на множестве ядер видеокарты.
Проблема здесь заключается в том, что в угоду того, чтобы вам было удобно дебагать и получать результаты работы вашей модели, процесс вычислений контроллируется именно на CPU, а значит после каждого выполнения kernel'а управление программой возвращается процессору, в то время пока GPU простаивает, в связи с чем мы теряем в производительности.
На одной маленькой видеокарте это может быть совсем незаметно, но когда мы говорим о больших кластерах, то эти задержи преобретают колосальные масштабы. Ведь при обучении на множестве гпу нам необходима синхронизация между гпу/машинами, а такого рода задержки усугубляют весь процесс, ведь вся система движется с максимальной скоростью самого слабого звена (в нашем случае процессора, на который может влиять множество факторов, от текущей загрузки, до температуры и конфигураций троттлинга)
Cuda Graphs решает эту проблему - давайте вместо того, чтобы передавать управление cpu каждый раз, возвращая результат работы, мы построим конвеер прямо на видеокарте, на котором все будет считаться быстро, без задержек, а уже результат передавать обратно после расчета всего графа.
Звучит круто, и так оно и есть! Ребята смогли ускорить обучение Mask RCNN в 1.75 раза.
Но, конечно мы жертвуем гибкостью, никаких вам динамических шейпов или условий по среди модели, все четко и статично.
Подробнее и с примерами кода читать тут:
https://pytorch.org/blog/accelerating-pytorch-with-cuda-graphs/
This media is not supported in your browser
VIEW IN TELEGRAM
✈️ Telegram Contest 🌆
Летом проходил контест от телеграма и мы решили принять в нем участие.
Сделали красивое приложение, ну вы только посмотрите на демку!
Были уверены в своей победе, но!
ПРОЕ...проиграли
А подвох здесь прост. Результатов мы ждали 5 месяцев, за это время сервер успел упасть, а я даже и не заметил.
Как иронично, что упал он 11 сентября.
Летом проходил контест от телеграма и мы решили принять в нем участие.
Сделали красивое приложение, ну вы только посмотрите на демку!
Были уверены в своей победе, но!
ПРОЕ...проиграли
А подвох здесь прост. Результатов мы ждали 5 месяцев, за это время сервер успел упасть, а я даже и не заметил.
Как иронично, что упал он 11 сентября.
Но каждое провал это повод научиться новому!
Расскажите какими инструментами аларма и мониторинга вы пользуетесь, чтобы не попасть в такие ситуации?
Или может знаете модное сервер-лесс решение?
Расскажите какими инструментами аларма и мониторинга вы пользуетесь, чтобы не попасть в такие ситуации?
Или может знаете модное сервер-лесс решение?
🚀 Flight to the moon 🌚
Случайно нашёл на ютюбе прекрасную лекцию про то, как работал компьютер автопилота Апполон 11, который прилунился на луну.
Лектор очень интересно рассказывает как вообще стало возможно осуществить почти полностью автоматический полет на луну, обладая мощностями середина 20 века, современные калькуляторы обладают куда большими мощностями (даже не калькуляторы, а чайники и стиральные машины)
Поражает гениальность людей, которые сделали это. Плюс это полезный материал, чтобы понимать как делать failure tolerance софт (отсылка к посту выше), ведь обидно, когда у вас упал сервачок для контеста, а еще обиднее, когда это не контест, а полет на луну
Ну и в целом интересно расширять кругозор!
P.S. Очень жаль, что наша наука и НИИ не так открыты, ведь интересно послушать как летал Буран на полном автопилоте!
https://youtu.be/B1J2RMorJXM
Случайно нашёл на ютюбе прекрасную лекцию про то, как работал компьютер автопилота Апполон 11, который прилунился на луну.
Лектор очень интересно рассказывает как вообще стало возможно осуществить почти полностью автоматический полет на луну, обладая мощностями середина 20 века, современные калькуляторы обладают куда большими мощностями (даже не калькуляторы, а чайники и стиральные машины)
Поражает гениальность людей, которые сделали это. Плюс это полезный материал, чтобы понимать как делать failure tolerance софт (отсылка к посту выше), ведь обидно, когда у вас упал сервачок для контеста, а еще обиднее, когда это не контест, а полет на луну
Ну и в целом интересно расширять кругозор!
P.S. Очень жаль, что наша наука и НИИ не так открыты, ведь интересно послушать как летал Буран на полном автопилоте!
https://youtu.be/B1J2RMorJXM
YouTube
Light Years Ahead | The 1969 Apollo Guidance Computer
Half a century ago, on 20 July 1969, Neil Armstrong was in the final stages of the lunar descent, just a few thousand feet above the surface, when suddenly his on-board computer indicated a critical alarm. For three nail-biting seconds it looked as if the…
👍1
🆘 Нужна помощь 🙌
Есть идея очень забавного проекта!
Но для него нужна помощь с разметкой.
Нужно разметить 50 треков оксимирона. Я уже поднял тулу для разметки, все находится в браузере, ничего скачивать дополнительно не придется.
Даже если вы разметите только один трек, это будет огромный вклад.
Всех, кто поможет упомяну и дам ранний доступ до контента, который выйдет совсем скоро!
Если хотите помочь 👉@alxmamaev👈
Есть идея очень забавного проекта!
Но для него нужна помощь с разметкой.
Нужно разметить 50 треков оксимирона. Я уже поднял тулу для разметки, все находится в браузере, ничего скачивать дополнительно не придется.
Даже если вы разметите только один трек, это будет огромный вклад.
Всех, кто поможет упомяну и дам ранний доступ до контента, который выйдет совсем скоро!
Если хотите помочь 👉@alxmamaev👈
В общем, спасибо всем, кто помог. Я решил привлечь артиллерию по тяжелее, и оказалось, что на you do полно людей, которые профессионально занимаются транскрибацией (не задумывался как-то). И разметить всего окси оказалось не так дорого.
🚊Self-Driving Train🧠
На прошлой неделе сгонял в Москву чтобы посмотреть как работает поезд на автопилоте от РЖД!
Я в целом ничего не ожидал от поездки, но это оказалось очень интересно!
Тестовый поезд существует в одном экземляре и представляет из себя ласточку которая ездит по МЦК несколько раз в неделю.
Вот несколько интересных моментов которые я узнал из первых уст:
* Все ласточки по умолчанию оснащены системой автоматического ведения с завода. Это такая система, которая имеет загруженную информацию по рельфу, в режиме реального времени получает данные о том, где находятся поезда и сама выставляет оптимальные параметры разгона и останова, чтобы поезд ехал с установленным ограничением скорости, не подъезжал слишком близко к другому поезду и не опаздывал. В целом это очень близко к тому, что устанавливается для автоматического вдения в самолетах.
* Казалось бы автопилот готов, что еще нужно? Но на деле этого мало, поезд помимо того, что должен ездить по расписанию должен улавливать опасные ситуации на путях, в случае чего притормаживать, сигналить и экстренно останавливаться. В базовой комплектации этого нет, но это есть на новой тестовой ласточке.
* На ней установлено множество оптических камер, лидары и тепловизоры, чтобы детектировать людей.
* На данный момент система может детектировать людей на путях (во время нашей поездки мы встречали их несколько раз), переход человека за ограничительную линию на платформе, и соответсвенно в зависимости от критичности ситуации сигналить или тормозить.
* Из железа -- на борту стоит два компа в каждом из которых по nvidia 3070 ti. Говорят, что есть проблемы с поставками железа, поэтому они пока не могут оснастить еще один поезд, который к ним скоро приедет.
Кроме того один замечательный момент, я спросил: а на сколько реально постаивить такую систему на сапсан? Оказалось очень сложно, и дело даже не в скоростях, а банально бюрократии, ласточки в отличие от сапсанов собираются российскрй крмпанией, и в случае чего можно быстро договориться на счет внедрения какого-то АПИ или подключении системы детекции к системе управления поездом, наши ребята готовы достаточно оперативно и быстро сделать в кратчайшие сроки. В то же время сименс, который поставляет поезда Сапсан на такие уступки идти не готов и запрашивает огромные деньги, в случае внесения каких-либо коррективов в заранее согласованный план поездов, т.к. у них все четко посчитано и сформированы команды и дополнительные правки не предусмотрены, и возможны только за большую переплату.
У меня по этому поезду есть еще много инфы, которой я не написал здесь, очень хочется смонтировать ролик, жаль пока времени не нашлось.
П.СЫ. Думаю сделать его на английском дабы несколько практиковать разговорную речь, но как бы не запороть такой интересный материал русским "лет ми спик фром май харт"
На прошлой неделе сгонял в Москву чтобы посмотреть как работает поезд на автопилоте от РЖД!
Я в целом ничего не ожидал от поездки, но это оказалось очень интересно!
Тестовый поезд существует в одном экземляре и представляет из себя ласточку которая ездит по МЦК несколько раз в неделю.
Вот несколько интересных моментов которые я узнал из первых уст:
* Все ласточки по умолчанию оснащены системой автоматического ведения с завода. Это такая система, которая имеет загруженную информацию по рельфу, в режиме реального времени получает данные о том, где находятся поезда и сама выставляет оптимальные параметры разгона и останова, чтобы поезд ехал с установленным ограничением скорости, не подъезжал слишком близко к другому поезду и не опаздывал. В целом это очень близко к тому, что устанавливается для автоматического вдения в самолетах.
* Казалось бы автопилот готов, что еще нужно? Но на деле этого мало, поезд помимо того, что должен ездить по расписанию должен улавливать опасные ситуации на путях, в случае чего притормаживать, сигналить и экстренно останавливаться. В базовой комплектации этого нет, но это есть на новой тестовой ласточке.
* На ней установлено множество оптических камер, лидары и тепловизоры, чтобы детектировать людей.
* На данный момент система может детектировать людей на путях (во время нашей поездки мы встречали их несколько раз), переход человека за ограничительную линию на платформе, и соответсвенно в зависимости от критичности ситуации сигналить или тормозить.
* Из железа -- на борту стоит два компа в каждом из которых по nvidia 3070 ti. Говорят, что есть проблемы с поставками железа, поэтому они пока не могут оснастить еще один поезд, который к ним скоро приедет.
Кроме того один замечательный момент, я спросил: а на сколько реально постаивить такую систему на сапсан? Оказалось очень сложно, и дело даже не в скоростях, а банально бюрократии, ласточки в отличие от сапсанов собираются российскрй крмпанией, и в случае чего можно быстро договориться на счет внедрения какого-то АПИ или подключении системы детекции к системе управления поездом, наши ребята готовы достаточно оперативно и быстро сделать в кратчайшие сроки. В то же время сименс, который поставляет поезда Сапсан на такие уступки идти не готов и запрашивает огромные деньги, в случае внесения каких-либо коррективов в заранее согласованный план поездов, т.к. у них все четко посчитано и сформированы команды и дополнительные правки не предусмотрены, и возможны только за большую переплату.
У меня по этому поезду есть еще много инфы, которой я не написал здесь, очень хочется смонтировать ролик, жаль пока времени не нашлось.
П.СЫ. Думаю сделать его на английском дабы несколько практиковать разговорную речь, но как бы не запороть такой интересный материал русским "лет ми спик фром май харт"
Media is too big
VIEW IN TELEGRAM
На видео слышно как поезд сигналит человеку который слишком близко подошел.
Еще видео о том как расположены камеры в кабине.
This media is not supported in your browser
VIEW IN TELEGRAM
Ну и я еще немнножко по хулиганил
🐊 Varuna ✋
Нашел эту библиотечку достаточно давно, но как-то забыл про нее написать.
Если вы слышали как тренируют, или приходилось тренировать большие модели, вы знаете, что их порой достаточно сложно поместить на одну видеокарту, и обычный пайплайн data parallelism здесь не подходит.
Для этого использую методы pipeline parallelism, когда вы разделяете вашу модель на части, когда одна часть учится на одной машине/карте, другие - на других. Реализовать это с наскока не так то и просто, т.к. эффективная реализация этих алгоритмов не тривиально.
Обычно для таких задач используют библиотечку от Microsoft - DeepSpeed, она достаточно проста, но имеет некоторые особенности с настройкой конфигов, что может несколько смущать в некоторых ситуациях, плюс к этому она содержит в себе множество других опций, которые могут быть не нужны в вашем случае.
Microsoft выпустила еще одну библиотеку под названием varuna, которая возволяет сделать простое разделение модельки прямо в python коде.
ReadMe крайне простой, так что ознакочимиться не составит проблем.
Например, эта библиотека была бы полезна при обучении мультитаск модели в последнем соревновании Сбера.
https://github.com/microsoft/varuna
Нашел эту библиотечку достаточно давно, но как-то забыл про нее написать.
Если вы слышали как тренируют, или приходилось тренировать большие модели, вы знаете, что их порой достаточно сложно поместить на одну видеокарту, и обычный пайплайн data parallelism здесь не подходит.
Для этого использую методы pipeline parallelism, когда вы разделяете вашу модель на части, когда одна часть учится на одной машине/карте, другие - на других. Реализовать это с наскока не так то и просто, т.к. эффективная реализация этих алгоритмов не тривиально.
Обычно для таких задач используют библиотечку от Microsoft - DeepSpeed, она достаточно проста, но имеет некоторые особенности с настройкой конфигов, что может несколько смущать в некоторых ситуациях, плюс к этому она содержит в себе множество других опций, которые могут быть не нужны в вашем случае.
Microsoft выпустила еще одну библиотеку под названием varuna, которая возволяет сделать простое разделение модельки прямо в python коде.
ReadMe крайне простой, так что ознакочимиться не составит проблем.
Например, эта библиотека была бы полезна при обучении мультитаск модели в последнем соревновании Сбера.
https://github.com/microsoft/varuna
GitHub
GitHub - microsoft/varuna
Contribute to microsoft/varuna development by creating an account on GitHub.
Итого 14 минут данных, сведение, битло и оксиморон готов.
Конечно, до цели «сделать как оригинал далеко», но что уж вышло! Эксперимент на то и эксперимент
Конечно, до цели «сделать как оригинал далеко», но что уж вышло! Эксперимент на то и эксперимент
🧑💻 Open Source 🤲
Я не придирчив к коду людей. По большей части потому, что я не уверен, что я сам пишу его хорошо.
Часто я забиваю на какие-то косяки, т.к. Этот код не приследует цели жить долго, а просто должен отработать свою задачу.
Но порой случаются странные вещи, которых я не понимаю.
Пытаюсь запустить один пейпер от фейсбука.
Код в целом из коробки не работает, в нем есть ошибки, такое можно простить каким-то ноунейм китайским лабам, но это FAIR.
Если код заставить работать, то он будет делать это медленно, т.к. не сделаны элементарные вещи по оптимизации (кеширование штук, которые долго считаются), если их написать то ускорение x50.
Ну и конечно неймниг, что на счет того, чтобы считать mel спектрограмму внутри датасета и назвать ее mel_loss, о дааа давай еще 🤤
В общем, опенсорс это не просто выложить свои исходники в сеть, но и проверить, что они работают и что за них не будет стыдно. Хороших опен сорсов!
Я не придирчив к коду людей. По большей части потому, что я не уверен, что я сам пишу его хорошо.
Часто я забиваю на какие-то косяки, т.к. Этот код не приследует цели жить долго, а просто должен отработать свою задачу.
Но порой случаются странные вещи, которых я не понимаю.
Пытаюсь запустить один пейпер от фейсбука.
Код в целом из коробки не работает, в нем есть ошибки, такое можно простить каким-то ноунейм китайским лабам, но это FAIR.
Если код заставить работать, то он будет делать это медленно, т.к. не сделаны элементарные вещи по оптимизации (кеширование штук, которые долго считаются), если их написать то ускорение x50.
Ну и конечно неймниг, что на счет того, чтобы считать mel спектрограмму внутри датасета и назвать ее mel_loss, о дааа давай еще 🤤
В общем, опенсорс это не просто выложить свои исходники в сеть, но и проверить, что они работают и что за них не будет стыдно. Хороших опен сорсов!