В этой статье я расскажу, как я смог обучить модель, которая превзошла GPT 3.5 Turbo на русскоязычной части MT-Bench. Также я рассмотрю новую конфигурацию для обучения на двух графических процессорах параллельно с помощью accelerate и deepspeed.

Особенный интерес представляет мой датасет для обучения. Он получен из сабсета мультиязычных промтов набора lightblue/tagengo-gpt4 на русском, английском и китайском, всего 10 тысяч примеров, сгенерированных с помощью GPT-4o. Это в 8 раз меньше, чем исходный набор Tagengo, но обученная на последнем Suzume, как показали бенчмарки, лишь очень незначительно превосходит мою модель на ru_mt_bench, а на англоязычном бенче и вовсе уступает ей. Это значит, что я в разы сэкономил на GPU за счет более высокого качества данных, полученных с помощью GPT-4o. 

Я использовал скрипт для получения ответов по заданным промптам. Для генерации русскоязычной выборки я изменил часть скрипта, чтобы выбрать все промпты на русском из Tagengo (8K примеров), так как основной фокус при обучении модели был на русском языке. 

В итоге я получил датасет ruslandev/tagengo-rus-gpt-4o и приступил к обучению.

Для этого я создал виртуальную машину с NVIDIA H100, используя сервис immers.cloud. Для достижения наилучших результатов по instruction-following (что проверяется на MT-Bench) я взял в качестве исходной модели meta-llama/Meta-Llama-3-8B-Instruct. Именно на ней обучена модель Suzume, у которой высокая оценка на MT Bench. Предыдущие эксперименты показали, что базовая Llama-3 8B,  а особенно ее четырехбитная версия для QLoRA  unsloth/llama-3-8b-bnb-4bit - значительно отстает по оценкам бенчмарка.

В этот раз я обучил параллельно на двух GPU, для этого я задал новую конфигурацию моей виртуальной машины - две NVIDIA A100.

Я воспользовался инструментом axolotl, который позволяет быстро сконфигурировать и запустить сессию обучения.

Мой конфиг axolotl здесь.

После установки axolotl, которая описана в документации, остается только запустить обучение командой: 

accelerate launch -m axolotl.cli.train config.yaml

Accelerate — это Huggingface библиотека для распределенного обучения.

axolotl запустил два параллельных процесса с шардами модели для каждого из двух GPU. Обучение на одну эпоху длилось около часа, итоговый train loss — 0.8.

Результат превзошел мои ожидания — третье место в mt_bench:

model

score

gpt-3.5-turbo       

8.25625

lightblue/suzume-llama-3-8B-multilingual-orpo-borda-top25 

8.22500

ruslandev/llama-3-8b-gpt-4o-ru1.0       

8.01250

lightblue/suzume-llama-3-8B-multilingual-orpo-borda-full  

7.97500

lightblue/suzume-llama-3-8B-multilingual-orpo-borda-half 

7.97500

meta-llama/Meta-Llama-3-8B-Instruct   

7.97500

lightblue/suzume-llama-3-8B-multilingual-orpo-borda-top75 

7.93750

Nexusflow/Starling-LM-7B-beta  

7.92500

lightblue/llama-3-8B-multilingual-orpo-base-half-borda 

7.84375

lightblue/suzume-llama-3-8B-multilingual-aya

7.83125

lightblue/suzume-llama-3-8B-multilingual-orpo-naive-full  

7.78750

lightblue/suzume-llama-3-8B-multilingual 

7.73125

ruslandev/llama-3-8b-gpt-4o 

6.61875

Моя модель превзошла llama-3-8b-instruct и большинство версий Suzume, кроме самой сильной из них. Это на англоязычном бенчмарке.

Теперь — результат ru_mt_bench:

model

score

lightblue/suzume-llama-3-8B-multilingual-orpo-borda-half  

8.94

lightblue/llama-3-8B-multilingual-orpo-base-half-borda 

8.86

lightblue/suzume-llama-3-8B-multilingual-orpo-borda-top25  

8.84

lightblue/suzume-llama-3-8B-multilingual-orpo-borda-top75  

8.46

lightblue/suzume-llama-3-8B-multilingual  

8.36

lightblue/suzume-llama-3-8B-multilingual-orpo-naive-full  

8.32

lightblue/suzume-llama-3-8B-multilingual-orpo-borda-full    

8.20

ruslandev/llama-3-8b-gpt-4o-ru1.0

8.12

Nexusflow/Starling-LM-7B-beta      

8.06

lightblue/suzume-llama-3-8B-multilingual-aya   

8.00

gpt-3.5-turbo   

7.94

ruslandev/llama-3-8b-gpt-4o   

7.36

Моя модель получила оценку 8.12, немного не дотянув до Suzume и превосходя gpt-3.5-turbo, у которой 7.94.

Это очень многообещающий результат, здесь можно сделать несколько выводов. Во первых, мой датасет в восемь раз меньше, чем Tagengo, а значит, обучение обошлось гораздо дешевле, чем Suzume — всего-то два GPU часа.

Я не увеличивал англоязычную выборку в своем датасете, там всего тысяча примеров на английском, а англоязычный MT Bench неожиданно показал среднюю оценку 8 баллов. Это значит, что добавление большего количества качественных мультиязычных данных повышает общее качество модели, а не только ее показатели для этого конкретного языка. Эта эффект уже был показан в статье Петера Девина — Tagengo: A Multilingual Chat Dataset

Я очень рад, что мне удалось наблюдать реализацию этой идеи на практике. Мой датасет, веса модели, а также файлы в формате GGUF опубликованы в моем Huggingface аккаунте.

Комментарии (16)


  1. TsarS
    21.07.2024 15:27
    +1

    Просто интересно, сколько обошлась работа с Н100?


    1. abstract_chaos Автор
      21.07.2024 15:27
      +2

      На immers cloud H100 ~430р в час. Но финальную версию этой модели я обучал на 2x A100. 230р/час, всего около 1K р.


  1. arheops
    21.07.2024 15:27

    А обучалася ли вообще gpt-3.5 на русскоязычных данных?


    1. Moog_Prodigy
      21.07.2024 15:27
      +1

      Конечно обучался, изначально там много языков.


  1. beatleboy
    21.07.2024 15:27
    +9

    Автору спасибо. Хорошая моделька получилась. Я сконвертил ее для Ollama. И как мне кажется эта модель поинтересней чем выпущенная вчера T-lite, работает шустрей, не душнит как T-lite.

    Может кому-то тоже будет интересно сравнить на Ollama модель T-lite:instruct 8b от Т-банка с моделью llama-3-8b-gpt-4o-ru1.0 от @abstract_chaos


  1. N-Cube
    21.07.2024 15:27

    Заголовок полный кликбейт:

    Как я обучил модель, которая понимает русский лучше GPT 3.5 Turbo

    И первая же фраза опровергает обещанное в заголовке:

    я смог обучить модель, которая превзошла GPT 3.5 Turbo на русскоязычной части MT-Bench

    Оказывается, на деле речь лишь об одном бенчмарке идет.


    1. Newbilius
      21.07.2024 15:27

      Ваши предложения?


  1. iramovich
    21.07.2024 15:27
    +1

    Спасибо за модельку


  1. ArsenMuratovi4
    21.07.2024 15:27
    +1

    круто, спасибо


  1. RealLazyCat
    21.07.2024 15:27

    модель t-lite (выше в комментариях)
    ожидание ответа на вопрос из примера о пицце -0:04:45.099607
    при этом жрет:
    24 Гб RAM (all 64)
    21 VRAM (4090)
    18% CPU (r9 7950x)

    модель beluga 7b
    ожидание ответа на вопрос (на английском) - 0:00:06.533465
    при этом жрет:
    10 Гб RAM (all 64)
    14 VRAM (4090)
    8% CPU (r9 7950x)

    модель beluga 13b
    ожидание ответа на вопрос (на английском) - 0:02:18.005243
    при этом жрет:
    16 Гб RAM (all 64)
    21 VRAM (4090)
    25% CPU (r9 7950x)

    модель "ruslan"
    ожидание ответа на вопрос о пицце - 0:04:35.263743
    при этом жрет:
    24Гб RAM (all 64)
    21 VRAM (4090)
    18% CPU (r9 7950x)

    к качеству ответа вопросов нет


    1. Filipp42
      21.07.2024 15:27

      T-Lite идёт БЕЗ квантизации.


    1. Advisory
      21.07.2024 15:27

      1. t-lite:
        4 минуты 45.099607 секунд

      2. beluga 7b:
        0 минут 6.533465 секунд

      3. beluga 13b:
        2 минуты 18.005243 секунд

      4. модель "ruslan":
        4 минуты 35.263743 секунд

      Почти по пять минут на ответ! Капец. Это какой же домашний ПК нужен, чтобы хотя бы до 2 секунд уменьшить?


      1. beatleboy
        21.07.2024 15:27

        У меня на 3090 TI t-lite в среднем отвечает за 5-6 сек


        1. Advisory
          21.07.2024 15:27

          @RealLazyCat пишет, что у него на 4090 модель t-lite «ожидание ответа на вопрос из примера о пицце -0:04:45.099607» — 4 минуты 45.1 секунды!


    1. Advisory
      21.07.2024 15:27

      [duplicate deleted]


  1. Mavito
    21.07.2024 15:27
    +1

    Есть ли причины, по которым выбор пал на Llama-3 и axolotl - не пробовали другие фреймворки(trl, ...)/модели (Mistral, Qwen, ...)? Можно ли было в качестве базовой модели для sft использовать Suzume? 2 карты A100 используются для ускорения обучения или на одну карту для тренировки базовая модель не влезала?