Читается целиком
Каждый блок трансформера — небольшой самостоятельный модуль. Библиотека зависит только от PyTorch и NumPy: никакой магии фреймворков между формулой и кодом.
Каждая модель — отдельный класс библиотеки llm и глава пособия: что изменилось по сравнению с предыдущей моделью, формулы и разбор кода.
Читается целиком
Каждый блок трансформера — небольшой самостоятельный модуль. Библиотека зависит только от PyTorch и NumPy: никакой магии фреймворков между формулой и кодом.
Сверено с эталоном
На весах HuggingFace логиты всех шести моделей совпадают до 1e-5–1e-4, greedy-генерация с KV-кэшем — токен в токен. Больше 1150 тестов.
Три уровня объяснения
Каждый механизм — идея и статья, затем формулы с числовыми примерами, затем конкретная строка кода, которая их реализует.
Полный цикл
BPE-токенизатор, датасеты, обучение, генерация — greedy, top-k, top-p, KV-кэш, батч промптов — и загрузка готовых весов HuggingFace.
git clone https://github.com/pese-git/llm-arch-research.gitcd llm-arch-researchuv syncНужны Python 3.10+ и uv. Видеокарта не обязательна. Подробнее — в Установке.
uv run python experiments/llm_only/run_llm_experiment.py --model llama --action train \ --config experiments/llm_only/configs/llama_train.jsonuv run python experiments/llm_only/run_llm_experiment.py --model llama --action generate \ --config experiments/llm_only/configs/llama_generate.jsonЛюбая из шести моделей на встроенном учебном корпусе: gpt, gpt2, llama, mistral, mixtral, gemma. Подробнее — в Обучении.
from transformers import GPT2LMHeadModelfrom llm.models.gpt import GPT2, convert_hf_state_dict
hf = GPT2LMHeadModel.from_pretrained("openai-community/gpt2")model = GPT2({"vocab_size": 50257, "embed_dim": 768, "num_heads": 12, "num_layers": 12, "max_position_embeddings": 1024, "dropout": 0.0, "tie_word_embeddings": True})model.load_state_dict(convert_hf_state_dict(hf.state_dict()))Рецепты для всех шести моделей — в Загрузке весов HuggingFace.
С чего начать: понять архитектуры · обучить модель · запустить готовые веса · изменить код