Как стать автором
Обновить

Самая большая BERT-подобная модель на русском, которая поместится на ваш компьютер

Время на прочтение7 мин
Количество просмотров19K
Всего голосов 52: ↑52 и ↓0+52
Комментарии8

Комментарии 8

Наша модель хотя и имеет миллиарды параметров, но вполне способна вместиться в одну домашнюю GPU:

Так какой объем VRAM ей требуется? Хватит 12 Гб у 3060?

А для сравнения, сколько BERT требует VRAM? Я пробовал ruBERT от DeepPavlov в Colab. На TPU работает, на GPU не запустился, вроде как не хватило памяти. Использовал, правда, не hugging face, а keras-bert. К сожалению, последний перестал (видимо, версия tf в колабе поменялась) работать в колабе на TPU (судя по всему, какие-то неподдерживающиеся ТПУ операции), поэтому было бы интересно попробовать вашу модель.

какой объем VRAM ей требуется? Хватит 12 Гб у 3060?

На всякий случай специально замерил: в загруженном состоянии модель изначально занимает примерно 2300 MB видеопамяти, при полноценном дообучении на RuCoLA — примерно 10 гигабайт (разумеется, в смешанной точности, но без больших хаков наподобие offloading). Должно хватить в вашем сетапе :)

сколько BERT требует VRAM?

Тут нужно учитывать, что вариаций BERT бывает много: скажем, есть RuRoBERTa-large, которая при обучении в сетапе выше потребляет примерно 7500 MB памяти, а есть rubert-tiny, которая весит десятки мегабайт и сравнительно быстро работает даже на CPU. При этом все модели имеют разный размер и уникальные сильные и слабые стороны; как я писал в посте, выбирать, что использовать, стоит исходя из задачи.

судя по всему, какие-то неподдерживающиеся ТПУ операции

Кстати, технически ничто действительно не мешает использовать и даже предобучать модель нашим кодом на TPU: в частности, в проектах sahajBERT и в особенности CALM волонтёры уже могли пользоваться TPU в рамках эксперимента (код есть в оригинальном репозитории).

Прошу прощения за оффтоп, но пользуясь близостью темы, задам насущный вопрос. Прошу прощения, если вопрос глупый, я ненастоящий датасайентист.

  1. В transformers поддерживаются и tf, и pytorch. Но некоторые модели (тот же ruBERT) - чекпоинт pytorch, transformers их сам конвертирует в tf. Имеет ли это смысл, или лучше забить и попробовать всё делать на pytorch, если модель на pytorch? Особого глубокого смысла, почему я использовал tf/keras нет, просто так исторически сложилось.

  2. В transformers есть разные классы для BERT (и других моделей): чисто энкодер, для MLM, для классификации итп итд. Пример использования вашей модели c huggingface:

    model = AutoModelForMaskedLM.from_pretrained("yandex/RuLeanALBERT")

    Я же могу использовать класс не xxxForMaskedML, а другой, например, для классификации? Или лучше свою голову классификации прикрутить, ведь там непонятный черный ящик с непонятными слоями...

  1. Я бы не стал лишний раз конвертировать модели в TensorFlow без необходимости (скажем, без наличия inference-движка, опирающегося на модели в нужном формате): экосистема PyTorch на текущий момент гораздо богаче, а отличия с точки зрения производительности в стандартных ситуациях бывают в пользу каждого фреймворков и не всегда значимы. Более того, насколько я понимаю, поддержка TensorFlow в целом ослабевает в последнее время на фоне популярности PyTorch.

  2. Использовать эти классы вы в целом действительно можете, но из-за деталей реализации модели (это всё-таки не обычный BERT) загрузить RuLeanALBERT в AutoModel у вас пока что не получится. В качестве решения на текущий момент вы можете использовать реализацию LeanAlbertForSequenceClassification из кода, который мы выложили: общий интерфейс там такой же, как у AutoModel, и, как видно из кода обучения, всё прекрасно работает вместе с классом Trainer из transformers.

в процессе реализации дообучения мы обнаружили ряд проблем в разметке отдельных задач RuRussianSuperGLUEМ

Добрый день. Можете пояснить какие проблемы там были обнаружены?

На HF Hub у вас лежит только файл модели. Это правильно? Разве там не должен быть рядом сложен vocab и конфиги для токенайзера?

??подход децентрализации в обучении давно просился, это отличный вектор, спасибо!

Можете пояснить какие проблемы там были обнаружены?

В случае с датасетами RUSSE и RuCoS, в которых надо ответить сущностью или что-то сказать о смысле слова из предложения, я заметил ряд проблем с соответствием сущностей и сегментов, которые им сопоставлены: например, сегменты включают в себя пунктуацию, пробелы или вообще не те слова, которые должны в них находиться. Это вредит чистоте данных, а соответственно, и качеству моделей: в коде (например, тут) более детально описана суть проблем и исправления, которые применяются при подготовке данных. Как можно видеть по лидерборду, подобные исправления для RUSSE сделали наше решение лучшим по сравнению со всеми другими ML-методами.

На HF Hub у вас лежит только файл модели. Это правильно? Разве там не должен быть рядом сложен vocab и конфиги для токенайзера?

Кажется, всё нужное на месте: по этой ссылке находятся файлы токенизатора (как написано в инструкции на GitHub, они лежат в отдельной папке).

Интересно почему Яндекс не сделает свой открытый датасет?

Чтобы не вскрывать факты нарушения авторских прав?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий