Обновить

Франкенштейн на 30 ГБ RAM: Как мы пересадили мозг Gemma в скелет DeepSeek и сломали Transformers

Уровень сложностиСложный
Время на прочтение6 мин
Охват и читатели8.7K
Всего голосов 10: ↑7 и ↓3+6
Комментарии11

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

Мифический Франкенштейн мог заниматься осмысленной практической деятельностью. Стоит ли ожидать полезных артефактов от подобного подхода, кроме "ну да, и так тоже извратиться можно"?

Ожидать... да стоит, в следующей статье опубликую результат дообучения осмысленно отвечать

Вы пишете, что модель выдала «цифровую шизофрению». Но как понять, что это результат несовместимости словарей и проекций, а не того, что в четвёртом слое adapt_weight залил нули из-за промаха с размерностью? Без проверок после каждого слоя (хотя бы assert transplanted_weight.abs().sum() > 0) вы не доказываете, что веса действительно переехали. Концепция становится нефальсифицируемой: успех — «что-то сгенерировалось», провал — «что-то сгенерировалось, но бессвязно». В обоих случаях результат принимается, а значит, эксперимент не доказывает ничего, кроме факта запуска Python.
я не утверждаю, что вы не добились интересного результата. Я говорю, что в текущем виде этот результат не доказывает заявленное — «в машинном обучении нет непробиваемых стен архитектуры». Чтобы доказать, нужно исключить альтернативные объяснения (пустые веса, случайные инициализации, ошибки размерностей). Добавление минимальных самопроверок и устранение хрупкости превратят эксперимент из разового трюка в воспроизводимое доказательство.

Спасибо, что подсветили слабое место

Зачем ты с ИИ сгенерировал вопрос для ИИ?? Если так скучно , то идите в свои cli консольки.

Насторожили осторожности, что это не убийца chatGPT, будто статью писал chatGPT.

да конечно! пользуемся по возможности LLM ми во всем

Как идея с пересадками, взять слои с большой модели и воткнуть в более мелкую (по глубине).

Затем заморозить все кроме этого слоя и учить определённой задаче, затем разморозить всё и дать согласоваться слоям. А лучше размораживать сначала окружающие слои.

Отличная идея! Но есть ряд но. Например слои в V4 В среднем по 12 ГБ ,В GLM Вся эта мишура тоже от 5 ГБ А для рабочей модели нужно минимумом от 8 слоев просто по диску краш идет ,по этому идем от обратного, в тоже время как скелет V4 300 МГ

Мне кажется такой фигнёй занимается 90% huggingface`а

Каждая вторая модель типа "Qwen3.5-4B-Claude4.6-IQ4_K_M" генерирует очень похожий бред (не помню точно, но мне это вроде иногда удавалось решить. То ли отключением Vision, то ли сменой девайса запуска с NPU/GPU на CPU)

Я не очень понял.

У этих моделей был разный токенизатор? Если разные, то на выходе может быть бред, ведь вклад токенов другой.

У этих моделей были разные эмбеддинги? Если разные, то это значит, что информационные связи нарушаются. В одном случае связь король + мужчина может сместиться в огурец + вино.

С переносном FFN в MoE как раз меньше всего проблем. Классические Трансформеры FFN и MoE не особо сильно отличаются. То что так любят называть экспертами, по сути это разрезание глобального FFN на несколько частей, каждая из которых более качественно аппроксимирует и выделяет часть глобального FFN. То есть глобальный FFN теряет точность, из за ограничения размеров. Поэтому мы можем по сути взять его участки и расширить их размерность. Это можно представить через аналогию с функцией описывающей N колебаний. Чтобы апроксимировать все N колебаний, нам нужна FFN с большой размерностью, но мы можем разложить ее на N частей, где каждый FFN будет описывать свое колебание с более высокой точностью (функция больше не пытается апроксимировать все N). Так как на практике в статической модели, только некоторые колебания имеют наибольшую ценность, то остальные можно ~ игнорировать (поэтому говорят про активные веса в MoE) и MoE выбирает одну из FFN (эксперта). Само разбиение в MoE как раз и происходит по интервалам после голов. Это как разбить линейку на участки. Если участок 1 сильнее остальных, значит аппроксимируем на основе него.

Я ускорял обучение MoE за счёт того, что сначала обучал модель с одним FFN, затем копировал его значение во всех экспертов (несколько FFN) и затем дообучал. Таким образом при дообучении, модель детализирована каждый из своих участков. Это давала ещё один плюс. Например, для какого-то эксперта не хватает данных при обучении. Если вдруг модель выберет его, результат будет не очень, а так они уже содержать глобальную информацию и даже если для данного эксперта не хватило данных при обучении, модель не начнет нести полный бред.

Второй подход, который ускорял обучение заключался в том, что сначала мы обучаем K блоков. Затем добавляем ещё один блок и копируем в FFN K+1 веса предыдущего K. Дальше модель детализирует его. Это ускоряет обучение, так как чем меньше блоков, тем быстрее обучение. По сути на каждой итерации мы дообучаем новый блок и согласовываем связи.

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

Публикации