местный датасасер ☮️
1.91K subscribers
1.01K photos
61 videos
7 files
659 links
Пишу всякое о технологиях и моих проектах, @egorvoron
Download Telegram
Forwarded from Loskir's
От скуки переписал метод получения заданий во внутреннем API @RoundDFBot по принципу Long Poll.

Вот тут можно почитать чуть подробнее, что это такое.

Раньше у меня был реализован банальный short poll: раз в 3 секунды воркер спрашивал у сервера, есть ли подходящее задание для него. Ответ приходил мгновенно: задание либо есть, либо нет.

Теперь это работает чуть-чуть по-другому: если задания нет, сервер подвешивает соединение и продолжает попытки найти задание. Если удалось найти, то тут же возвращает его. Если за 30 секунд найти не удалось, то отвечает ошибкой.

Чем это лучше?

Во-первых, это позволяет воркеру быстрее получать заявки. Но в моём случае это совсем неважно, три секунды ничего не решают.

Во-вторых, это позволяет снизить нагрузку на базу данных. В моей реализации в каждый момент времени только один воркер стучится в базу за заданием, а остальные послушно ждут в очереди. Но на самом деле это тоже неважно, потому что нагрузка тут незначительная.

Самое интересное: в-третьих, теперь я могу более детально настраивать очередность получения заявок.
Могу по простому принципу: очередь (первый пришел — первый ушёл), стек (последний пришел — первый ушёл) или как-нибудь ещё.
А могу сложнее: днём отдавать моему компьютеру больше заданий (потому что это дешевле по сравнению с другими воркерами), а ночью наоборот меньше (чтобы не шумел и не мешал мне спать)😉
психолог: доктор Дре и Снуп не занимались матаном и не записывали альбом с интегралами
доктор Дре и Снуп:
Forwarded from Loskir's
О войне с GIL'ом

Самая первая версия воркера работала в один поток: сначала видео читалось в память, потом кадры обрабатывались на нейронке, потом готовые кадры склеивались в видео. Но это было неоптимально: во время первой и третьей фазы видеокарта простаивала, а ведь она являлась главным ресурсом.

Поэтому на следующий день после релиза мы улучшили архитектуру: выделили каждую фазу в отдельный поток и запустили их параллельно. Теперь, пока одна заявка обрабатывалась на нейронке, следующая могла проходить препроцесс. Таким образом удалось уменьшить время простоя видеокарты, но появилась другая проблема: во время работы потока с препроцессом производительность нейронки заметно падала (потери составляли примерно 50%). Когда препроцесс заканчивал свою работу, всё возвращалось в норму.

Это происходило из-за GIL'а (Global Interpreter Lock). Проще говоря, интерпретатор питона исполняет код только в одном потоке, а остальные ждут. Раз в некоторое время интерпретатор может переключиться на другой поток. В этот момент предыдущий ставится на паузу, и так далее. Поэтому питон не может оптимально выполнять два "тяжелых" действия в разных потоках. Они начинают конкурировать за процессорное время и терять в производительности. Если хотите узнать об этом подробнее, зацените эту статью на хабре. Она довольно старая: за это время вышли новые версии питона, в которых, возможно, добавили некоторые оптимизации, но общие концепты всё ещё актуальны.

Раньше я пытался выносить нейронки в отдельные процессы с помощью multiprocessing'а, но это не увенчалось успехом. В общем, мы забили на эту проблему. Чтобы компенсировать потери, мы запускали на одном сервере два скрипта рядом друг с другом. Когда один проседал, второй работал чуть мощнее, и в сумме нагружали видеокарту почти полностью.

Но в последние несколько дней я ещё раз активно поэкспериментировал с мультипроцессингом, и это, кажется, дало свои плоды. На этот раз я вынес в подпроцессы препроцессинг и постпроцессинг, а нейронку оставил в главном. И просадки исчезли! Теперь мы можем запускать по одному скрипту на сервере.

Я попробовал ещё несколько оптимизаций (например, сделать два потока с нейронкой), но это не дало положительных результатов. Поэтому пока что остановимся на такой архитектуре.
Forwarded from Not Boring Tech
💫 Deep Mind на днях объявили, что создали не столь зрелищный продукт, как раньше (например потрясающие алгоритмы для игры в шахматы и го годами ранее показывали), а куда более важный для всего человечества — в прямом смысле научный прорыв (а может даже больше).

И вот о чём отчитались: ИИ наконец удалось решить научную проблему, над которой учёные бились полвека — система впервые позволила спрогнозировать объёмное строение белка с точносью до атома. Исследователи уже назвали работу «ошеломляющим прорывом», который произошёл «на десятилетия раньше, чем предсказывали многие в этой области».

🧬 Наличие такого алгоритма теперь позволяет кратно ускорить разработку многих новых лекарств, лучше исследовать распространение и влияние болезней в организме человека, а учёным намного лучше изучить фундаментальные процессы жизни. А средняя оценка точности составляет 87 из 100 GDT, когда последние 15 лет показатель болтался между 30 и 45 GDT, тем более сам процесс длился годы, когда сейчас — несколько дней. Но всё же хочу отметить, что заявление от DeepMind ещё будут проверять, точность пока не 100 из 100, а решение используется для более «простой задачи прогнозирования белка», чем все возможные осложнённые. Но ребят можно похвалить и поздравить человечество с новым крутейшим открытием, которое во много чем сможет помочь нам самим в скором будущем.

🔗 https://deepmind.com/blog/article/alphafold-a-solution-to-a-50-year-old-grand-challenge-in-biology

#AI | Not Boring Tech
Бесконечно можно смотреть на три вещи: как горит огонь, как течет вода и как нейронки становятся все лучше и лучше. Новая модель от исследователей из Вашингтонского университета и Фейсбука умеет анимировать статичные фотографии с огонем, водой, дымом и паром.
Официальный сайт
Статья на архиве
Код is coming soon
лучший мерч
Forwarded from Оди
Нейроссия — нейронка, обученная рисовать Россию

Пока что только панельные многоэтажки и котики, но это пока.

Проект Ильи Беликова. Обновления в инсте и ВК.

#awd_techno #awd_art #awd_neuro
Finally, 2020 Wrapped