Дратути Антон – Telegram
Дратути Антон
4.11K subscribers
171 photos
30 videos
215 links
Мемы и личные размышления про управление, код, ml и здравый смысл.

Сейчас руковожу командой OCR in VLM в Яндексе.

Автор: @toshiknoscript
Download Telegram
Немного анонсов с работы ☺️

Сначала подумал, чтобы написать пост про каждое из событий отдельно, но потом решил, что в этом нет особого смысла, лучше позже расскажу про интересности с constexpr. В целом, это лично моя инициатива, потому что я всегда горю тем, что делаю, и очень заинтересован в развитии сервисов, команд и компаний 🙃. Так что не судите строго.

Я решил поучаствовать в рабочей группе трека ML в рамках Yandex Cup. Вместе с большой командой готовим для вас соревнование. Приходи участвовать, будет весело (иногда сложно и больно 👨‍🦳). Призы в целом тоже кайфовые. Ну и мне тоже будет приятно!

Я в СПб ищу себе стажера, с которым будем решать нескучные задачи OCR, в первую очередь связанные оптимизациями нейронных сетей (как по объему, так и по скорости исполнения) 🔼. Если тебе уже знакомы слова Python, C++, Pytorch, Tensorflow, Git и на практике успел пошаманить с нейронками — приходи, пообщаемся!

Ну а если ты уже имеешь рабочий опыт в CV или NLP, можешь рассказать моей бабушке, что такое трансформеры 😃 и любишь решать нестандартные и очень хардкорные задачи, приходи пообщаться по поводу позиции в штат!

И если тебе не сложно, поделись с другом, мало ли он что-то захочет из этого списка 😁!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6🐳4🤔2
constexpr родимый

Чтобы ты понимал, почему C++ — это сложно, просто вспомни про ключевое слово constexpr 👨‍🦳. Про него все знают, его все уважают, но мало кто использует. Почему? Не знаю. А он есть. С C++11 🙃.

Недавно читал статью про то, как влияет constexpr на размер бинаря. Автор проводит несколько тестов где:
— Сравнивает одну и ту же функцию без и с ключевым словом constexpr;
— Делает сначала тесты с одной единицей трансляции, а потом с несколькими; причем на нескольких два вида сборки: сборка сразу всех файлов в один бинарник и сначала сборка файлов по библиотекам, а потом линковка вместе.

Результаты чарующие 😧: практически нигде нет профита между функциями без constexpr и с ним, кроме одного случая — где сборка сначала происходит в библиотеки, а потом происходит линковка. Там профит почти на 30%...😳

Выглядит интригующе и я захотел проверить... И не смог. Потому что автор не приложил исходников, а по его описанию я не смог повторить тесты. У меня не было никаких различий 🤔. И этому есть одна лишь причина:

constexpr functions and constexpr constructors are implicitly inline.

Чтобы функция в хедере была аналогичной, я вместо constexpr писал inline. Но как ты можешь увидеть из сноски выше — в плане разрешения имен это одно и то же (напомню, что inline это ключевое слово, которое позволяет сделать исключение из ODR и сделать одно определение на все единицы трансляции). Потому заявленное свойство constexpr — это свойство inline 🥲. И как автору в сборке с "профитом" удалось сделать это самое улучшение — я не понял. Если кто знает, помогите 🥺!

Но всё же одна плюшка (кроме основной — возможное вычисление в compile-time) мне понравилась: можно зафорсировать вычисления констант, а это позволяет избегать штуки, по типу деления на 0 ☺️.
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍1🤔1
Смешное про С++

В рамках подготовки к семинарам по C++ для студентов ШАД я в обязательном порядке повторяю материалы из большого количества источников 😊 :
— мои личные заметки;
— лекции лектора, чтобы понимать, о чем говорить на семинаре;
— различные ролики на youtube от известных спецов.

И вот я досматриваю очередной ролик, смотрю в комментарии, а там просто очень классная переделка всем известной песенки 😂:

Аа, в C++ указатели на память вот такой ширины,
Аа, в C++ шаблоны классов вот такой вышины,
Аа, прострелянные ноги,
Аа, нам с UB не по дороге,
Аа, и no more попугай,
Аа, и expired попугай.


Про попугая здесь отсылка к известному скетчу, упоминаемому в рамках лекции в разговоре про провисшие ссылки (возвращаем или/и используем ссылку на уничтоженный объект) 🤓.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10🐳4😁1🤔1
Про цели, время, работу, славу

В октябре выдалось много работы 🙃. Собеседования ребят на проект в ШАДе, семинары в ШАДе, личный менторинг, завершение старых и старт новых проектов на работе. Кажется, немного, но хватает, чтобы иногда не спать сутки.

Я слышал недавно фразу: "если вы целыми днями работаете, то у вас нет времени менять этот мир." Звучит с одной стороны разумно, а с другой стороны — удел ли каждого менять мир? Явлется ли это моей целью? Или твоей? Решать каждому. Но звучит очень громко — поменять мир 🤔.

Что нужно сделать, чтобы изменить мир? Возможно, придумать новую технологию, идею, изобретение — кажется, зачастую, это воля случайности в процессе упорного труда 🤪.

🔼 Например, Рентген открыл одноименное излучение, просто случайно заметив. Но мало ли он проводил в лаборатории времени?

🔼 Ну или более хайповая нынче тема с LLM (aka ChatGPT), где ребята из OpenAI решили попробовать, а что если обучить модель с большим количеством параметров на большом количестве данных. В итоге нашли удивительные свойства этого семейства моделей.

Мои наблюдения последних лет показывают следующее: вне зависимости от целей (есть они или нет), ты можешь делать невероятные вещи, но зачастую цена этому большой труд. А слава, успех — это воля случайности среди часов, проведенных за своим делом. Вопрос только каким делом ты занимешься 🤔.

Ставить как цель получить какую-то славу или успех лучше не стоит. Это очень абстрактно. Ставить цель ради цели также бесполезно, вы будете думать больше о ней, чем о реальных делах 😔. Отвяжитесь от себя, если не можете поставить цель — это нормально. Мне кажется в этом мире, дико перегруженном методиками продуктивности, стоит просто не забывать кайфовать от работы, себя и жизни ☺️.

А если вы любите своё дело, всё придет — и слава, и мир поменяете 🔼. Ну а если нет, то возможно оно вам и не нужно было 😐? Как минимум у вас уже есть своё любимое дело ☺️.
Please open Telegram to view this post
VIEW IN TELEGRAM
12👍6🥰2🤝2🤗1
Проект с нуля

На днях с коллегой общался на тему: как стартовать проект с нуля 🤔. Мне был интересен сам фреймворк принятия решений на основе накопленного опыта. Здесь опишу кратко свои мысли после всей нашей беседы.

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

Во-вторых, твоя позиция в проекте может быть разная 👨‍💻. В каком-то случае, ты сам себе программист, дизайнер и проджект, а в каком-то ты стараешься сделать так, чтобы верстка на фронте не поехала. Разница лишь в том, как много контекста нужно держать для решения задач. 🤪

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

Я уверен, что можно писать бесконечно этот список, но я был удивлен, что в целом принимать решения во всем этом многообразии можно примерно одинаково 🙃:

1. Ты понимаешь что нужно делать, чтобы запустить проект прямо сейчас? 🤔
2. Если да 💃, то поздравляю, ставь таски, часть делегируй, часть делай.
3. Если нет 🤔, обратись к одному из своих инструментов декомпозиции задач и по каждая задача становится мини проектом. Вернись в п.1 и повтори алгоритм.

Ну и всё. Для меня всегда казалось, что в таком плане чего-то не хватает. Но после общения с несколькими более опытными (по моему мнению) товарищами я понял, что он вполне годный 🔼. Его можно усложнить, конечно, но оно тебе надо?

А пока ничего сложного! Хотя... "инструменты декомпозиции задач" странный термин 🤓. Но в какой-то мере он может определять ваш опыт. Потому что важно не только про них знать, но и уметь их использовать.

Про эти инструменты я, пожалуй, напишу уже в одном из следующих постов!😁
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🐳3🤔1
This media is not supported in your browser
VIEW IN TELEGRAM
Runway. Motion Brush in Gen-2

Офигеть 😮. Просто не надо слов. Смотрите демку. Если будет так (это видосик из анонса) — это будет невероятная фантастика.

Ребята обещают запилить кисточку в своем редакторе, которая приводит в движение выделенную область на картинке. Да 🙃, это делали и до этого, но если в таком качестве — то вроде никто.

Да, я понимаю, что артифакты есть и они будут. Но если у вас динамичный продакшн и вам нужно на секунду показать какую-то динамику — то это просто шикарнейший инструмент 🔼.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🐳21
Хотел сгенерировать мем про Vtables в С++ с помощью DALL·E 3. В целом, если не обращать внимание на слова, то получилось жизненно.
😁61
MusicGen

Не особо слежу за развитием AI в области генерации музыки, но тут мне попался под руки релиз от одной экстремистской организации 🙃.

Подход позволяет создавать стерео-музыку из текста 😮. Условно задаешь ей такое:
A grand orchestral arrangement with thunderous percussion, epic brass fanfares, and soaring strings, creating a cinematic atmosphere fit for a heroic battle.

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

На секундочку замечу, что это все же стерео 🔼. Еще года 3 назад я с коллегами обсуждал, что вот бы сетки научились делать качественное музло в моно канале, а тут такое!🤨 Понятно, что это не Моцарт, но все же.

А еще на вход можно подавать аудиозапись, и тогда сетка извлечет стиль исполнения из неё и использует эту информацию для генерации аудиотрека 🤪. Я воспользовался этой возможностью, и попробовал для промпта выше сгенерировать что-то на мотивчик интерстеллара (вот такой пример брал). Получилось неплохо (слушать тут) 🤨!

Также попробовал еще другой запрос для интерстеллара:
a rap bit with piano, violin, heavy drums, slight kick and aery pads, 96 bpm, perfect for a commercial
Ну и этот вариант мне понравился еще больше (слушать здесь) 💃!

Из ограничений: демка генерирует только 15 секунд, но если хочешь больше, то нужно уже хостить самому или попробовать запустить в коллабе. Также она не работает с вокалом 🤔, работает далеко не с первой попытки 🤔.

Под капотом лежит трансформер 🤓, который работает с текстовыми и аудио токенами. Разбор статьи делать не хочется, поэтому если интересно, можешь прочитать здесь ☺️.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1
Методичка: Поиск Работы в ML/DS

@boris_again Написал классный гайд по поиску работы 😮. Я бы не сказал, что это только для ML/DS. Скорее в целом, для технических специалистов 🔼. Дальше по тексту из поста:

Все кратко и по делу. Чтения минут на 30. Внутри рассматриваю поиск работы с самых азов и до деталей с примерами из жизни.

https://btseytlin.github.io/intro.html

В общем, однозначный лайк!☺️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43
Счастливое преображение в мемах от DALL·E 3

Попросил DALL·E 3 сгенерировать мем о том, как тяжело обучать нейронные сети в лабе компьютерного зрения 🙃. Получилась картинка слева (не спрашивайте, зачем).

А потом корректирую запрос и пишу, а давай какое-нибудь более реалистичное окружение, типа офиса Google или Apple. И вот результат на правой картинке 🤔.

Вопрос: почему они стали счастливыми? 😐 И почему в халатах? 👨‍⚕️
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣4
Про ту самую новость из OpenAI

Отец знакомого работает в OpenAI. Сегодня срочно вызвали на совещание. Вернулся поздно и ничего не объяснил. Сказал лишь собирать вещи и бежать в магазин за продуктами на две недели. Сейчас качаем веса всех моделей, что есть в интернете. Не знаю, что происходит, но мне кажется началось...
😁333
Распознавание жестов

Однажды у моей в команды была замечательная задача — нужно было сделать распознавание жестов 😃. Требования были простые: RPi 4B, CPU only инференс, максимальная задержка на кадр — около 30 мс, сами снимики были чб. На тот момент самым популярным готовым решением был mediapipe — просто берешь распознавание скелета руки, накидываешь сверху постпроцессинг ключевых точек, простой классификатор — и решение готово. Ну или почти готово...👨‍🦳

Пайплайн детектирования ключевых точек ладони в фреймворке устроен следующим образом:
1. Сначала отрабатывает детектор ладони (который не совсем тривиальный);
2. Затем происходит поиск ключевых точек на кропнутом изображении ладони.

Обычно ладонь имела ориентацию вверх, т.е. ладонь как-то поворачивали. Для этого использовали ключевые точки, которые находились вместе с детектором второй головой 😵‍💫. Поэтому обучение такого детектора — не совсем классическая задача детекции.

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

Проблема вторая: код исполнялся примерно за 70-100мс на запрос. Это было очень много 🤨. Ну как бейзлайн решили использовать post-training квантезацию. Сначала были проблемы с качеством, но путем подборки хорошего калибровочного датасета всё решилось. Но вот со скоростью стали проблемки. 100мс+ на запрос, что больше даже без квантезации. Как так 🤔?

А все просто. Где-то внутри кишочков XNNPACK после долгого лютого дебага обнаружился баг, который некорректно обрабатывал свертки. История в github показала, что на тот момент ребята из команды этого фреймворка только её решили и еще даже не положили в релиз 👨‍🦳. Мы попробовали и о чудо: каждый запрос до 30мс, а я замечу что тут была еще наша классификационная голова 😅.

Это вот я вам рассказываю так легко сейчас, а тогда было сложно. Ни нормальной документации, ни порядочных примеров. Но мы справились. В целом, задача вышла достаточно инженерной, в тот момент я прям кайфанул от результатов. Сейчас наверное тоже бы ☺️.

Я еще хотел рассказать про сам mediapipe и как он хорош, но пост уже и так большой. Как нибудь в следующий раз.🙃
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍3🔥2🐳1
Delivering Safe C++

Недавно вышел ролик от CppCon, где Страуструп пытается рассказать про обеспечение Safety в С++.

Вот некоторые заметки, которые я вынес 🙃:

* Security — это не безопасность языка, не безопасность памяти, это не про safety. Security — это свойство системы, которая включает в себя железо, помещение, людей, ПО и т.д.
* Идеальной безопасности добиться сложно — как минимум нам нужно взаимодействовать с ОС, а там половина написана на Си, и проверять в нашем приложении функциональность ядра мы не собираемся, а потому мы верим, что там всё должно быть хорошо;
* Люди часто не хотят использовать безопасные высокоуровневые абстракции под предлогом, что это уменьшает производительность, но при этом не делают никаких бенчмарков;
* Советы по безопасности:
* Инициализируйте переменные;
* Используйте более высокоуровневые абстракции для диапазонов: std::vector, std::span, range-for, range algorithms и т.д.
* Проверка на null-pointer всегда, когда с ними связываетесь;
* Используйте умные указатели для избежания утечек памяти, желательно как можно более дешевые, т.е. std::unique_ptr;
* Страуструп считает, что большинство сторонников писать на других языках думают, что альтернатива безопаснее, но в основном это с точки зрения управления памятью.

Ну и естественно это была подводка к предложению о создании "Profiles" — некоторой сущности, которая будет предоставлять разного рода гарантии. По сути показан некоторый концепт, но как это реализовать — не ясно 😐.

Еще нескольких фан фактов 😂:
* Бьярне просто как будто рассказал лекцию студентам;
* Спикер очень тактично избегал назвать язык, где подобные концепты уже зашиты — Rust;
* Скорее всего доклад навеян новостью о том, что АНБ США рекомендовало не использовать C++ для разработки;
* Концепцию RAII Бьярне придумал практически с самого начала C++, но в виде какой-то теоремы формулировка пришла почти через 10 лет;
* Еще в 80-х года Страуструп обсуждал идею std::span, когда решали проблему передачи указателя и количество элементов, лежащих в памяти по указателю (aka int max(const int[], size_t)), но реализация в итоге появилась в C++20;

В целом, от доклада сложилось ощущение, что когда Страуструп обсуждал идею доклада, то диалог там был примерно как в этом видео. И это очень грустно, конечно 🥹. При всем уважении к создателю, C++ и правда невообразимо сложный язык. Концепты Бьярне может быть и правильная идея, но очередной костыль, который сложно даже переварить, и какая-то очередная попытка догнать современные тренды.
Please open Telegram to view this post
VIEW IN TELEGRAM
Опачки. Инфа здесь.
😁19🥰2🤡2🤔1👀1
This media is not supported in your browser
VIEW IN TELEGRAM
Клепаю мемы в перерывах между постами
😁13😢3😭3👍2🤝1
Кирилл

У меня долгое время не получалось систематизировать статьи и как-то отслеживать прогресс по их прочтению👨‍🦳. А потому я часто забивал на статьи и в основном подчерпывал информацию из телеграм каналов. Но однажды всё поменялось.

Мой коллега по отделу в Яндексе — Кирилл (@kkhrylchenko) рассказал на одном из внутренних докладов о том, как можно грамотно организовывать процесс чтение статей через Zotero. Когда он показывал свою коллекцию прочитанных статей, я сразу подумал: "Хочу также!"🙃

И вот недавно Кирилл завел классный канал по рекомендательным системам — @inforetriever. Я, честно говоря, не слежу за трендами в этой области, но теперь благодаря Кириллу поглядываю за интересными движениями 🔼. И честно говоря, мне нравится как в канале описывается краткое summary большого количества статей, сразу понятно, что можно отложить себе, а что не совсем интересно 🤔.

А еще Кирилл переодически выступает на конференциях, есть много записей в youtube. Например, относительно недавно на датафесте был рассказ про персональное ранжирование трансформерами.😊
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥83👍1🐳1
Yatool 😧

Совсем неожиданно узнал, что ребята из соседнего отдела Яндекса зарелизили инструмент для (цитата):
cross-platform distribution, building, testing, and debugging focused on monorepositories

Ну или кратко говоря, это билд система 👨‍🦳. В Яндексе она используется уже достаточно давно и успешно справляется с гигантской монорепой.

Пробуйте, приходите к ребятам в issue. Поздравляю их с релизом в open-source 🥰!

Ссылочка: https://github.com/yandex/yatool
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13
Лекция в ИТМО 🤓

Давненько я не появлялся в стенах родного Университета. Пора это исправлять!🙃

Ребята из Y&&Y попросили меня рассказать про то, какими компетенциями должен обладать специалист в области машинного обучения, как попасть на стажировку или получить место в штате 😊.

Если кто-то из моих подписчиков учится в ИТМО — приходите! Постараюсь поменьше душнить и побольше рассказать о заявленном топике! 😃

https://news.1rj.ru/str/digitalgenerationITMO/91
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91