Telegram Group & Telegram Channel
Досталась мне на работе система, за которую до недавних пор отвечал умный, но неопытный PhD. Задача по сути сводится к text classification, внутри некий трансформер и все по классике: много кастомного, вычурный оптимайзер, дубликаты в данных и так далее. И, конечно, все надо улучшать - от точности до скорости.

В комплекте с системой полагался въедливый коллега, который с радостью согласился пойти разгребать авгиевы конюшни датасетов. А я взялся за инженерную часть. Кое-какая инфраструктура уже была: тесты, CI, обучение в докере - до этого мы с другим коллегой занимались переносом этого хозяйства из jupyter ноутбуков во что-то воспроизводимое. Так что надо можно было более или менее смело лезть в сам training pipeline.

Обучение занимало ~10-11 часов на одной A100, что в целом приемлемо, но, судя по низкой нагрузке и CPU, и GPU, можно было сделать лучше. Перенес часть препроцессинга из __getitem__ в __init__, избавился от pandas, выкинул лишние данные из памяти, что-то закэшировал, увеличил количество воркеров для датасетов, увеличил батчи - и GPU стала загружаться на ~95-98%, а обучение стало втрое быстрее. С такими скоростями уже можно быстро итерироваться.

Основная модель весила больше гигабайта. Я посмотрел на граф и обнаружил, что больше половины весов - это жирная мультиязычная embedding матрица инпута. Пошел в Athena и добыл неразмеченный датасет вида SELECT * FROM DATA WHERE THINGS ARE NOT LIKE FULL GARBAGE LIMIT OVERDOHOOYA, прогнал его через токенайзер, подтвердил гипотезу, что реально используется <50% токенов. Значит, можно переучить токенайзер и заменить эмбеддинг слой на значительно меньший, предварительно скопировав предобученные веса полезных токенов. Это уменьшает размер модели примерно до 60% от оригинального (правда, без заметного эффекта на скорости инференса). Потребление памяти важно для рантайма, ведь можно держать в памяти одного инстанса больше моделей, там как раз был боттлнек.

Кстати, раз у нас есть большой неразмеченный датасет, это звучит как повод устроить pretraining. Адаптировал masked language pretraining пайплайн с huggingface 🤗, и оставил новую, уже уменьшенную модель учиться на недельку. И, наконец, заменил дефолтные веса в основном пайплайне на результат претрейна на этом неразмеченном датасете. Это не только улучшило точность (на разных тестовых датасетах от 10% до 20%) и вторичные метрики вроде калибровки, но и ускорило сходимость, т.е. можно безболезненно уменьшить количество эпох еще на треть.

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



group-telegram.com/partially_unsupervised/180
Create:
Last Update:

Досталась мне на работе система, за которую до недавних пор отвечал умный, но неопытный PhD. Задача по сути сводится к text classification, внутри некий трансформер и все по классике: много кастомного, вычурный оптимайзер, дубликаты в данных и так далее. И, конечно, все надо улучшать - от точности до скорости.

В комплекте с системой полагался въедливый коллега, который с радостью согласился пойти разгребать авгиевы конюшни датасетов. А я взялся за инженерную часть. Кое-какая инфраструктура уже была: тесты, CI, обучение в докере - до этого мы с другим коллегой занимались переносом этого хозяйства из jupyter ноутбуков во что-то воспроизводимое. Так что надо можно было более или менее смело лезть в сам training pipeline.

Обучение занимало ~10-11 часов на одной A100, что в целом приемлемо, но, судя по низкой нагрузке и CPU, и GPU, можно было сделать лучше. Перенес часть препроцессинга из __getitem__ в __init__, избавился от pandas, выкинул лишние данные из памяти, что-то закэшировал, увеличил количество воркеров для датасетов, увеличил батчи - и GPU стала загружаться на ~95-98%, а обучение стало втрое быстрее. С такими скоростями уже можно быстро итерироваться.

Основная модель весила больше гигабайта. Я посмотрел на граф и обнаружил, что больше половины весов - это жирная мультиязычная embedding матрица инпута. Пошел в Athena и добыл неразмеченный датасет вида SELECT * FROM DATA WHERE THINGS ARE NOT LIKE FULL GARBAGE LIMIT OVERDOHOOYA, прогнал его через токенайзер, подтвердил гипотезу, что реально используется <50% токенов. Значит, можно переучить токенайзер и заменить эмбеддинг слой на значительно меньший, предварительно скопировав предобученные веса полезных токенов. Это уменьшает размер модели примерно до 60% от оригинального (правда, без заметного эффекта на скорости инференса). Потребление памяти важно для рантайма, ведь можно держать в памяти одного инстанса больше моделей, там как раз был боттлнек.

Кстати, раз у нас есть большой неразмеченный датасет, это звучит как повод устроить pretraining. Адаптировал masked language pretraining пайплайн с huggingface 🤗, и оставил новую, уже уменьшенную модель учиться на недельку. И, наконец, заменил дефолтные веса в основном пайплайне на результат претрейна на этом неразмеченном датасете. Это не только улучшило точность (на разных тестовых датасетах от 10% до 20%) и вторичные метрики вроде калибровки, но и ускорило сходимость, т.е. можно безболезненно уменьшить количество эпох еще на треть.

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

BY partially unsupervised


Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260

Share with your friend now:
group-telegram.com/partially_unsupervised/180

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

NEWS "He has to start being more proactive and to find a real solution to this situation, not stay in standby without interfering. It's a very irresponsible position from the owner of Telegram," she said. Now safely in France with his spouse and three of his children, Kliuchnikov scrolls through Telegram to learn about the devastation happening in his home country. That hurt tech stocks. For the past few weeks, the 10-year yield has traded between 1.72% and 2%, as traders moved into the bond for safety when Russia headlines were ugly—and out of it when headlines improved. Now, the yield is touching its pandemic-era high. If the yield breaks above that level, that could signal that it’s on a sustainable path higher. Higher long-dated bond yields make future profits less valuable—and many tech companies are valued on the basis of profits forecast for many years in the future. On Feb. 27, however, he admitted from his Russian-language account that "Telegram channels are increasingly becoming a source of unverified information related to Ukrainian events."
from vn


Telegram partially unsupervised
FROM American