Перейти к содержимому

Ограничения

Библиотека учебная: код простой и читается целиком, а результат моделей проверен сверкой с HuggingFace. Ниже — чего в ней нет и что учесть, прежде чем строить на ней эксперименты.

  • Trainer — минимальный цикл. Нет сохранения чекпоинтов и лучшей модели, продолжения обучения (состояние оптимизатора не сохраняется), смешанной точности, накопления градиентов, распределённого обучения, логирования метрик кроме loss_history. См. Обучение.
  • Датасеты не склеивают тексты. Каждая строка — один пример, всё после block_size отбрасывается; классической нарезки непрерывного потока на блоки нет.
  • Учебный корпус игрушечный — 15 предложений. На нём проверяют, что обучение работает, а не качество модели.
  • Оценки качества нет. Модуль llm.evaluation пуст; перплексию считайте сами как exp от валидационного loss.
  • Скользящее окно не экономит вычисления. GroupedQueryAttention считает полную матрицу QKᵀ и затем маскирует лишнее: экономия есть только в памяти на KV-кэш при генерации.
  • Окно на одну позицию шире, чем в HuggingFace. В Mistral и Mixtral окно — window_size + 1 позиций, как в тексте статьи; при загрузке весов HF — window_size = sliding_window − 1. См. Mistral.
  • Нули в середине attention_mask и скользящее окно. Окно считается по местам в последовательности, а не по позициям настоящих токенов: pad-места в середине строки занимают окно, хотя и замаскированы. Левый и правый паддинг это не затрагивает.
  • Нет оптимизированных ядер (FlashAttention, scaled_dot_product_attention) и квантизации.
  • RoPE без масштабирования (rope_scaling): модели вроде Llama 3 с rope_scaling в конфиге не воспроизводятся. Llama поддерживает только обычный MHA.
  • Символьный BPE, а не byte-level: символ, которого не было в корпусе, становится <unk>. Для многоязычных данных корпус токенизатора должен содержать все нужные символы.
  • Обучение медленное на больших корпусах: частоты пар пересчитываются на каждом слиянии.

Изменения, после которых старый код, конфиги или чекпоинты ведут себя иначе, — в CHANGELOG. Технический долг и история исправлений — в бэклоге.