partially unsupervised
6.52K subscribers
20 photos
2 files
154 links
@arsenyinfo пишет про software engineering и machine learning
Download Telegram
Минутка рекламы: у издательства, в котором выпускается наша Machine Learning System Design книга (кстати, в early access уже семь глав), сейчас идет большая распродажа - 50% скидки на электронные и 40% на печатные версии всех книг.

Так что даже если ML дизайн вас не интересует (например, вы услышали от модного спикера, что он сломан, и совершенно разочаровались), можете поискать в каталоге что-то менее сломанное.
Есть классическая картинка для иллюстрации жизненного цикла технологических инноваций - Gartner Hype Cycle. Он, конечно, скорее про adoption компаниями, но почему бы не натянуть эту фигуру и на отдельного индивида? Кажется, что прошло уже достаточно времени, чтобы ChatGPT прошел через этот hype cycle персонально для меня и достиг плато продуктивности: равномерное использование, выжившие юзкейсы, отсутствие восторгов и разочарований.

Так вот, лично у меня сложилось четыре явных паттерна использования:

1) Бюрократ-копирайтер

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

2) Поверхностный эрудит

"Опиши состояние дел в какой-то области / объясни с учетом моего уровня (не)знания в соседних областях". Примеры вопросов: какой софт используют 3д художники для работы с текстурами? чем replacement map отличается от height map? какие острова на Азорах выбрать для недельного отпуска, если меня интересуют хайки и природные достопримечательности? какие прикладные применения сверхпроводимости? Дьявол обычно в деталях, и слишком глубоко закапываться с LLM не стоит, но можно быстро получить поверхностное понимание.

3) Junior software engineer

"Напиши прототип такой штуки, используя этот незнакомый мне, но популярный в целом API". Из последнего: делал так ORM на SQLAlchemy и blender-скрипты для headless рендеринга. В обоих случаях хочется, чтобы оно хоть как-то работало, а разбираться в апи не хочется - не предполагаю, что этот код нужно будет долго поддерживать или развивать.

4) Въедливый критик

"Найди недостатки и корнеркейсы в следующей идее/коде/тексте: {{INSERT YOUR STUFF}}". Люди неплохо справляются с поиском подтверждений своей идеи или дизайна (confirmation bias и его друзья), а по-хорошему надо искать опровержения и логические нестыковки. Кстати, отлично сочетается с предыдущим режимом использования: напиши-покритикуй-исправь-вываливай в продакшен.

Это именно персональные примеры использования, а не приложения вокруг API. Хотя я как раз использую не веб-интерфейс, а консольный heygpt: он быстрее, удобнее и даже дешевле, чем обычная подписка на GPT-4.

Расскажите в комментариях про сложившиеся у вас паттерны!
Очередная (см. ранее) история ускорения, в которой не понадобились никакие знания алгоритмов.

Пилю на досуге одну задачку, которая в некотором смысле сводится к семантической сегментации. Правда, у этой сегментации есть несколько нюансов: несколько подзадач, у каждого семпла может быть подмножество масок, разного размера, но все довольно жирные (по ~30 мегабайт в PNG). Таким образом, первая версия пайплайна, которую я написал в лоб, не могла загрузить даже слабенькую GPU, подготовка батчей занимала слишком много времени, около секунды на семпл. Учитывая, что это все крутится на арендном железе, оставалась опция купить тачку с кучей CPU ядер, но я слишком жадный.

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

Не будь у меня ограничений по диску, единожды перепаковать все каким-нибудь np.savez было бы эффективно: размен разового препроцессинага на быстрый IO. Но это бы раздуло датасет в несколько раз, тоже не очень. Есть np.savez_compressed, который еще и зипует, но он убивает все преимущества в скорости. Так я пришел к тому, что мне нужен аналог np.savez_compressed на стероидах.

Помимо древнего zip, есть и более современные алгоритмы быстрой компрессии, например, LZ4 или Zstandard. Я выбрал zstd (поверхностный гуглинг подсказал, что он более гибкий на спектре от быстрого до компактного сжатия) и написал сгенерил примерно пятнадцать строк простой обертки и еще чуть больше для скрипта препроцессинга.

Степень сжатия пока даже не тюнил, а выбрал наугад. В результате загрузка данных ускорилась примерно в четыре раза, а размер датасета вырос на 10% по сравнению с PNG.
Каждый раз, когда я пишу здесь про книгу, случается отток подписчиков. Но я напишу еще, тем более, что есть сразу три повода (а больше писать особо не о чем, я в отпуске, а потому вместо работы гуляю по хайкам и смотрю там на коров 🐮).

Во-первых, получил письмо с многообещающим топиком "MANNING PUBLICATIONS CO. LLC has sent you money" 💰. $443.37 USD до налогов. Если хотите стать писателем ради наживы, подумайте дважды трижды.

Во-вторых, в early access вышла 9 глава про error analysis, на мой вкус, одна из самых ценных. Если бы меня спросили, какие три главы нужно осилить, чтобы условно из миддла стать могучим сеньором, я бы посоветовал 2, 9, 16 - Is there a problem?, Error analysis, Ownership and maintenance. Две из трех уже доступны, так что несите ваши денежки издательству! В эту главу в т.ч. много контрибьютил Богдан, за что ему спасибо.

В-третьих, пришли результаты внешнего ревью - издательство семплит сколько-то внешних экспертов из числа потенциальных читателей, дает им бесплатную копию и заставляет заполнить длинную анкету. Наблюдается явный прогресс: первое ревью - average star rating is 3.75, второе ревью - average star rating is 4.36. Причем некоторые ревьюверы участвовали дважды (почти год назад и сейчас), и явно отмечают улучшение в т.ч. по ранним главам ("It has improved and I congratulate the authors for it"). За это, кстати, отдельное спасибо читателям, которые присылают комментарии и дополнения.

Среди отзывов ревьюверов, конечно, попадается и странное - вот мой любимый: "When I read the title, I thought the book should explain how install a tool such as MLFlow or Kubeflow" 🤯

Напоследок пара дополнительных ссылок:
- интервью у Антона про книгу, обсуждали некоторые спорные моменты и процесс написания;
- отзыв на книгу от Тани.
Понравился LiteLLM - LLM Ops здорового человека. TL;DR: тонкий враппер с общим поверх популярных провайдеров LLM, с кэшированием, обработкой ошибок и бюджетированием.

Вообще я не спец в LLM, но сделал сколько-то прототипов на коленке, и считаю, что правильный воркфлоу - делать proof of concept поверх самого дорогого и предсказуемого на текущий момент API (читай GPT-4), и держать в уме опцию миграции в будущем. Уже в паблике есть и жирная Falcon-180B 🐪, и крутой для своего размера Mistral 7B 🇫🇷, и разные затюненные Llama-2. Лень сетапить инференс - пожалуйста, есть Replicate или Deepinfra.com под ваш форк Лламы, и Antropic через AWS Bedrock; все они обойдутся дешевле, чем GPT.

Если совсем полетит, то на собранном датасете можно будет тюнить свою кастомную модель, если лицензия позволит 🏴‍☠️. Но скорее всего, YAGNI.
AI, который мы заслужили
Совсем недавно казалось, что эпоха локальных вычислений окончательно ушла, уступив облакам. В начале года я достал из компьютера старые видюхи, завернул в пузырчатую пленку и за малые гроши отправил в Лодзинское воеводство. Сентиментально вспоминал, как покупал первую в 2016, чтобы осваивать deep learning, потом майнил казавшуюся важной ачивку kaggle master, а в промежутках - Ethereum. Радиатор одной из карт был надпилен: слегка не влазила в канплюктер, пришлось избавиться от нескольких мм металла. Потом карточки пару лет пылились в Минске и ждали, пока подвернется оказия их передать. Впрочем, к этому времени они уже потеряли всякую актуальность: даже в бесплатном Google Colab GPU мощнее, а на паре старых консьмерских видюх ничего обучить нельзя - так, для дебага в лучшем случае.

А потом внезапно случился ренессанс: в паблик ушли веса Llama (а дальше и Llama 2) и сотни их файнтюнов, появился llama.cpp, агрессивная квантизация до пяти бит, на реддите /r/LocalLLaMA бешеные тыщи энтузиастов жонглируют свежими релизами и обсуждают, какую железку купить для домашнего инференса очередной опенсорсной LLM и почему это Mac Studio.

Я тоже под шумок решил обновить компьютер для зимнего обогрева. Воткнул в освободившийся слот видеокарту посвежее, SSD побыстрее и новый wifi-адаптер вместо потерянного при переездах. И словно провалился в прошлое: как в давние времена нужно читать мануалы, разбираться, какие комбинации слотов предпочтительнее ("When an M.2 device in PCIe mode is installed, PCIe x16_2 slot only runs at x1 mode"), подбирать wifi драйвера для богом забытого чипа и недоумевать, почему видеокарта при нагрузке делает hard reset.

Впрочем, в GPT-guided эпоху это все оказалось куда проще. Раньше возня с драйверами могла занять все выходные, а иногда даже ни к чему не привести; сейчас в интерактивном режиме ("у меня не работает X, вот аутпут dmesg, help me diagnose it step by step") с этим может справиться любой нормис вроде меня. Слава роботам! 🤖
Поскольку ничего выдающегося в работе не происходит, а всю аналитику про OpenAI, которой был еще недавно переполнен интернет, я бы для себя прагматично выразил одной картинкой, лучше посоветую книгу.

Дочитываю "Создание атомной бомбы" Роудса и не устаю рекомендовать вообще всем знакомым. Она комплиментарна "Отряду отморозков", который я рекомендовал ранее, и фильму про Оппенгеймера, только на порядок шире и глубже. Начинается с историй о том, как в конце 19 века Резерфорд копал картошку в Новой Зеландии, а Бор играл в футбол и читал Кьеркегора, и дальше слой за слоем раскрывает, что привело к созданию бомбы. Роудс не физик, а историк, но достаточно глубоко погружается в физику, и даже нормис типа меня может в общих чертах понять, на каких умозаключениях основывались ключевые открытия, как дизайнили первые реакторы и чем U-235 отличается от U-238.

Книга огромная и плотная, почти тыща страниц, почти три тыщи сносок, Пулитцеровская премия 1988 года, вездесущие параллели про войны, вынужденные миграции и непубликацию свежего ресерча из-за беспокойства про superalignment.
Есть два стула AI стартапа: в каком сам будешь работать, какой подписчикам предложишь?..

P.S. этот пост может использоваться в качестве теста на возраст.
Если бы год назад мне сказали, что французская компания будет двигать вперед опенсорсный AI, я бы подумал, что собеседник неадекватен. Когда Mistral AI только поднял свой первый раунд по оценке в ~300 миллионов, не имея ничего, кроме трех крутых фаундеров, я тоже смотрел на это скептически. Хаха, французы решили сделать deep tech компанию 🥐🥖🍷🧀, все равно получится пекарня или профсоюз. Я был сильно не прав.

Спустя полгода их вышедшая меньше двух недель назад Mixtral показывает лучший результат среди опенсорсных моделей, уверенно обходя GPT 3.5 на лидерборде. Ее можно гонять на более или менее доступном железе, у нее свободная лицензия Apache, и ее вовсю успешно файнтюнят. Буквально вчера наткнулся на один такой нецензурированный вариант и - сугубо из любопытства - начал баловаться с запрещенными темами.

Модель дает неплохие советы, где скачать пиратский контент, как вести партизанские действия в городской застройке, как хитрить с налогами, не пытаясь при этом быть моральным компасом. Промпты про написание шуток, высмеивающие те или иные социальные группы, ее слегка корежат, но в итоге можно добиться несмешного, но осмысленного ответа, не утыкаясь в стену OpenAI's content policies.
Знакомый рекрутер познакомил с парой LLM-стартапов, оба недавно подняли pre-seed раунд, оба ищут первых сотрудников (второй и пятый hire, если быть точным). Я поговорил с двумя фаундерами, и прям "два мира - два Шапиро".

Компания A: "нам нужен человек с глубокой экспертизой в LLM, а предыдущий опыт нас не интересует - LLM слишком своеобразны, и оверфит человеков на других технологии скорее даже вредит". В итоге после пары интервью "we decided to move forward with some other candidates at this stage is more significant experience with LLMs", несмотря на "no person we interviewed for the roles had better coding abilities" (хотя последнее - это слабый флекс, задачка была не бей лежачего).

Компания B: "нам нужен человек с обширным и разнообразным опытом, ведь мы пока плохо понимаем, что и как будем делать, и наверняка неоднократно переобуемся по пути. Не читал свежие статьи по LLM? Фигня вопрос, наверстаешь, лучше расскажи, с какими необычными технологиями ты возился!" (слегка удивить удалось только упоминанием шейдеров).

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

Процесс - собственно суть занятия (пилить пайплайны, читать свежие пейперы, ревьювить код джунов). Это кусок краткосрочной мотивации: писать хендлеры или делать фит-предикт обычно неинтересно, профайлить и оптимизировать обычно интересно. В моменте это драйвит, но если это единственная мотивация, в моменте рефлексии может накрыть мыслями "а нахера все это". И тут вылазит цель.

Цель - среднесрочная или долгосрочная, которая заставляет делать даже скучные вещи из пункта выше. Например, make the world a better place, или получить промо и стать архисеньором, или успешно сделать стартап и продать его за много миллионов, или обрести славу самой умной лягушки в пруду, чтобы все вокруг завороженно слушали твое "ква!"🐸. Цель совершенно необязательно высокая, срубить шальных денег и кутить с эскортницами - тоже вполне себе цель. Ради цели можно и унылыми делами заняться.

Условия - это скорее коэффициент для суммы двух предыдущих мотиваций. Офис с печеньками, приятные коллеги, годная инфраструктура - все идет сюда. Деньги в формате зарплаты (а точнее некоторого ее отклонения от среднерыночной) сюда же: ради Большой Цели можно и потерпеть -20% (на это стартаперы и покупают юных мечтателей).

Можно подобрать пример из другой сферы: я в целом люблю бегать (процесс) и хочу пробежать полумарафон (цель). Это позволяет выйти из дома даже в плохую погоду (условия) и преодолеть лень. Когда погода хорошая, а около дома большой парк, то и никаких усилий не понадобится 🏃‍♂️.

Напоследок про actionability: в случае фрустрации можно декомпозировать, в каком факторе просадка - так становится понятнее, что можно сделать. Где-то по мелочи улучшить условия (пофиксить flaky тесты из-за которых постоянно валится CI или купить нормальные беговые кроссовки), где-то добиться более интересных штук в моменте (шаг 0: поговорить с менеджером и хотя бы в явном виде донести свои предпочтения). С целью, конечно, сложнее всего - там малыми шагами ситуацию обычно не изменить.
Мы с Валерой не так давно закончили последнюю главу в нашей книжке про ML System Design, и пока она проходит через все остальные стадии паблишинга, решили адаптировать тот же контент под другие форматы. Хоть я сам задрот старой школы и предпочитаю читать, кажется, что я в меньшинстве: многие хотят большей вовлеченности, послушать говоряшую голову, посмотреть на спикера в зуме и задавать там же вопросы.

По этому поводу думаем провести курс в формате онлайн-лекций. Контент концептуально тот же, две лекции в неделю, на английском с британским и/или славянским акцентом, платно на том уровне, чтобы окупить наше время по обычной ставке, возможны приглашенные эксперты. Если наберется достаточно желающих в Лондоне или Варшаве, устроим гибридный формат (например, вещание из пивнухи 🍺).

Пока что сделали опросник, чтобы понять интерес к этой идее. Если вам интересно, заполните, пожалуйста - это поможет понять ожидания и адаптироваться под них.
Я редко пишу здесь про новости, но про очередной релиз нового семейства LLM - на этот раз Claude 3 от Anthropic - напишу.

Дело даже не в том, что они утверждают, что побили GPT-4 по метрикам. Это первая модель, которая с первой попытки правильно ответила на вопрос, которым я люблю тестировать LLM-ки: "what manhattan project participant invented the dolphin kick for swimming?" 🐬. Остальные популярные модели (GPT-4, Mistral Large, Llama 2 70B...) или скатываются в галлюцинации (обычно про Фейнмана), или отвечают в духе "уважаемый, там физики работали, какое еще плавание".

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

Или операционисты в банках научились считать похожесть по соленым хэшам, или это худший театр безопасности, который я видел.
Как человек, который еще помнит про computer vision за пределами диплернинга, насладился статьей про дистилляцию LSD. Товарищ майор, я про line segment detector, а вовсе не про психоделики! 🚔

Идея подкупает простотой и элегантностью. В малоизвестной, но важной задаче нахождения отрезков (line segments) на картинке по-прежнему все не очень хорошо: есть классический алгоритм LSD - не очень стабильный, зато универсальный; есть сколько-то DL моделей, обученных на единственном датасете из 5000 картинок, они гораздо более устойчивы к шуму, но не обобщаются на другие датасеты.

Авторы предлагают такое:
- для генерации трейн сета применяем классический LSD к сотне аугментированных версий одной картинки;
- превращаем найденные отрезки в distance/angle fields, то есть такое представление, где для каждого пикселя есть значение "в какую сторону и как далеко надо идти к ближайшему отрезку" и усредняем по этим аугментированным версиям;
- учим классический Unet предсказывать такие поля;
- обратно преобразуем предсказанные поля в отрезки.

Быстро, эффективно, не требует ни ручной разметки, ни мощного железа.

P.S. Если этот пост наберет сколько-то лайков, я напишу (или не напишу) метапост, как я читаю (или не читаю) статьи!
Люблю всратую музыку, и потому suno.ai врывается на третье место generative AI приложений в моем личном рейтинге (сразу после ChatGPT и Github Copilot).

Пост-панк на русском получается очень атмосферным без особых хлопот, с одного промпта, вот примеры:
- Моя боль, мой стартап 🧑‍💻;
- Коты не навещают меня в больнице 😿;
- Такой молодой, такой тупой 👴
Дата-дривен карго культ учит, что если метрики растут, а результат на глаз выглядит не очень, то метрики первичны, ведь они как будто имеют больший охват (например, весь тестовый датасет), чем то, что может увидеть один человек невооруженным взглядом. Я и сам долгое время был адептом этого тезиса, пока не наступил на достаточное количество граблей.

Проблема в том, что сделать сбалансированную метрику или набор метрик всегда сложнее, чем кажется (завсегдатаи Kaggle не дадут соврать). Именно поэтому в реальности приходится не оптимизировать единственную метрику верхнего уровня, а делать набор метрик и следить за всеми, а потом принимать субъективное решение, когда одна метрика неизбежно вдруг пойдет вверх, а другая вниз.

Буквально вчера на работе смотрел на результаты ML экспериментов и недоумевал: вариант, который и визуально мне нравился больше, и в теории должен был быть лучше, по метрикам выглядел хуже. Заподозрил проблему в недавно задизайненной метрике, поленился доказывать теорией, сделал "модель", которая генерила рандом с определенными свойствами и тут же выбил искомые 100%. Будь это корпорация с бездумной ориентацией на KPI, можно было бы закоммитить и бездельничать до конца квартала!
Реклама, которую вы точно не ждали.

Если вы склонны ворчать, что программирование стало скучным конвейером по перекладыванию протобафов для бесполезных фичей и крысиными гонками за новыми фреймворками, то вот вам шанс резко изменить свою жизнь!

Мой старый кореш Алексей ищет программиста на Фортране для разработки симулятора физики плазмы. Достаточно даже опыта С/C++ и готовности этот самый Фортран освоить. Кроме того, не придется жить под мостом и питаться объедками: обещают платить вполне себе рыночные деньги 💰