Техножрица 👩‍💻👩‍🏫👩‍🔧
14.8K subscribers
1.56K photos
74 videos
28 files
815 links
Люблю высокие технологии и кушать.

Добро пожаловать, если в сферу твоих интересов тоже входят математика, DL, NLP, программирование на Python, или тебе просто любопытно, о чем на досуге размышляют люди, занимающиеся разработкой и исследованиями в ML.
Download Telegram
Последнюю пару месяцев перед уходом из 🤓 я работала над статьей про новый оптимизатор на основе Muon - коллеги разрабатывали сам оптимизатор, а я анализировала, как он (а также оригинальный Muon и AdamW) влияют на геометрию весов и эмбеддингов. В какой-то момент я дошла до анализа числа обусловленности, которое равно отношению самого большого сингулярного числа матрицы W к самому маленькому (κ(W) = σ_max / σ_min) и показывает, насколько численно стабильными будут операции с этой матрицей. К моему удивлению оказалось, что вычислить эту штуку - задача нетривиальная, особенно на великих тензорных процессорах Ascend. Так что сейчас, пока коллеги доделывают статью, я поделюсь с вами парой откровений из области численных методов, которые совершила в процессе вычисления данного числа (откровениям лет по 50, просто я прогуливала численные методы в универе и поэтому узнала их только сейчас).

Первая проблема, с которой я столкнулась, заключалась в том, что torch.linalg.svdvals не реализован на NPU, и при попытке вызвать эту функцию Асценды делают fallback на CPU, где китайские рабочие считают сингулярные значения вручную за миску невкусного риса (иначе не могу объяснить такую низкую скорость). В попытке с ней бороться, я использовала стандартный трюк: посмотреть, какая сторона матрицы W меньше, и, в зависимости от этого, быстренько умножить на NPU либо Wᵀ на W, либо W на Wᵀ (выбор надо делать в такую сторону, чтобы полученная квадратная матрица вышла как можно меньшего размера). После этого можно посчитать собственные значения полученной маленькой квадратной матрицы на CPU (благодаря маленькому размеру, считаться это будет быстрее, чем SVD оригинальной матрицы) и взять из этих значений корешки - это и будут сингулярные числа исходной W.

Но тут встает вторая проблема: WᵀW возводит число обусловленности в квадрат: κ(WᵀW) = κ(W)², и из-за последующей необходимости извлекать корень численный пол (граница, ниже которой всё слипается в неразличимый вычислительный мусор) на мелких сингулярных значениях поднимается с eps·σ_max до √eps·σ_max. Разница для fp32 - примерно три порядка точности. Все сингулярные значения, которые ниже этого порога, при подсчёте через квадратную матрицу превращаются в шум. Про то, почему так получается (а также почему вообще собственные числа WᵀW - это сингулярные числа W в квадрате) хорошо написано в начале этого поста: https://www.ethanepperly.com/index.php/2021/03/18/the-better-way-to-convert-an-svd-into-a-symmetric-eigenvalue-problem/ .

Но даже если избавиться от подсчета через квадратную матрицу и вернуться к torch.linalg.svdvals, встанет новый вопрос. Насколько я смогла постичь логику умных дядь из LAPACK Users' Guide ( https://www.netlib.org/lapack/lug/node97.html ), сингулярные значения меньшие, чем tol = σ_max · max(m, n) · eps (где eps - ограничение fp32/fp16/bf16), неотличимы от нуля - их с тем же успехом могла породить ошибка округления самой матрицы. То есть, если σ_min ниже tol, то κ для такой матрицы вообще не определено.

Но делать было нечего - пришлось вернуться к torch.linalg.svdvals на CPU, подождать всего лишь сто лет... и соснуть бибу, потому что хоть формально маленькие сигмы и превышали tol, по факту все равно были к этому tol довольно близки, и от этого много весовых матриц оказывались почти вырожденными. В результате, мы признали число обусловленности недостаточно информативным для своего ресерча и решили в статью не вставлять. Но это был еще не конец истории...

#наука #о_себе
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62451311❤‍🔥55😍31😱1😈1
Итак, с трудом дождавшись конца подсчета torch.linalg.svdvals на CPU для матриц весов и слегка разочаровавшись, я увлеклась новой идеей - посчитать SVD для эмбеддингов, чтобы узнать, сколько главных компонент PCA объясняют 95% дисперсии (грубая оценка линейной внутренней размерности). К счастью, для такого подсчета точность вычисления маленьких сигм была уже не важна, так что можно было вернуться к той версии кода, которая считала сингулярные числа через собственные на CPU. Но даже так, это было 1000 текстов на каждый чекпоинт на каждый оптимизатор на каждый слой, так что ожидаемое время подсчёта уверенно превысило мое оставшееся время работы в хуавее. Нужно было что-то, что считает то же самое на NPU.

На моё счастье, как раз в это время Антропик на пару дней явили миру Fable - манифестацию Омниссии в форме языковой модели, которую, как вы знаете, быстро спрятали обратно, ибо мир (за исключением США) пока что не был готов к такой мощи. И тем не менее, в мимолетный миг этого нежданного благословения, я успела воздать чудесной модели молитву о подсчете собственных чисел на NPU. В ответ Машинный Дух даровал мне код, реализующий дивный метод от великого математика Якоби и выполняющий священные тензорные операции прямо на NPU на чистом PyTorch. Я с благоговением вставила ниспосланный код в пайплайн, запустила, открыла ред булл, сделала глоток, посмотрела на прогресс-бар...

...он не двигался. Допила банку. Прогресс-бар все еще не двигался. Открыла вторую банку. Прогресс все также оставался на нуле. И только под конец второй банки ред булла код досчитался...

...для одного
чекпойнта
и
одного
текста.

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

А все почему? А потому что метод вращений Якоби - итеративный алгоритм, который в буквальном смысле вертит матрицу на Хуавее. Он по очереди обнуляет внедиагональные элементы матрицы до тех пор, пока на диагонали не останутся собственные значения. Для симметричной матрицы 500×500 это ~125 000 элементов за проход, проходов нужно 10-12, и всё это крутится в питоновском цикле for. С этим новым знанием я вас и оставлю.

#наука #о_себе
75😁49181515🔥7👍4👏2🆒2😱11
(скриншот от коллеги)
70😁42162🔥2😈2
Не понимаю, что все пытаются доказать с помощью этой нейросети на козах из игры. Раз система из этих коз полна по Тьюрингу, то и так было заранее понятно, что на ней можно реализовать вообще любую вычислимую функцию. В том числе, в теории, на этих козах можно с любой заранее заданной точностью реализовать полную симуляцию физики и химии реального человеческого мозга. Для этого не хватает только двух вещей: достаточно больших вычислительных мощностей и достаточно точного скана мозга какого-нибудь конкретного человека.

А поскольку я в вопросах мышления, сознания и квалиа склоняюсь в сторону функционализма (философской позиции, согласно которой, для ментальных свойств важна функциональная организация, а не субстрат), для меня выглядит разумным предположение, что достаточно хорошая симуляция человеческого мозга на козах будет сознательной в той же степени, что и исходный мозг на живых нейронах. При этом сознательностью будет обладать именно функциональная система, а не сами козы в age of empires.

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

Подробнее с первоисточником козосрача можно ознакомиться здесь: https://adewynter.github.io/notes/aoe2-circuits
67💯5314👍87😁65🌭4
О Р У

( replication of https://t.iss.one/boris_again/3960 )
40😁316🤮3🤣21🎉1
На этом моменте у меня закончилась фантазия
34🤣1364💩3😁1
Карьерное обновление: сегодня начинаю работу в 💳 в роли так называемого Senior NLP Researcher в управлении экспериментальных систем машинного обучения 😌

Пока что просто сижу на стуле и жду, когда выдадут ноутбук, держу в курсе 😌

#о_себе
Please open Telegram to view this post
VIEW IN TELEGRAM
4🤝203🔥12162👍29😢24🤮23🏆18💩1510😭4🖕2
😁815914💯6🔥4🤮2💩2