Перейти к содержимому
ПереводыDatawhale и китайские курсы

Tiny Universe: путеводитель по «белым ящикам» Datawhale

Обзор проекта tiny-universe («Руководство по сборке „белого ящика“ большой модели»): что за «белые ящики» в нём собраны, как они соотносятся с уроками ступеней 4–9, в каком порядке их проходить и как запускать на своей машине, плюс полный перевод README проекта.

tiny-universe — открытый проект сообщества Datawhale «Руководство по сборке „белого ящика“ большой модели». Идея простая: вместо того чтобы вызывать готовые фреймворки как «чёрный ящик», собрать каждую часть LLM-системы своими руками на PyTorch и NumPy — модель, RAG, агента, систему оценки, генератор картинок — и увидеть, как всё устроено внутри. Это ровно принцип нашего курса «сначала руками, потом фреймворк», поэтому проект удобно использовать как второй, китайский взгляд на практические уроки ступеней 4–9.

Проект распространяется по лицензии CC BY-NC-SA 4.0 (некоммерческое использование, ссылка на авторов, та же лицензия у производных работ), поэтому все наши страницы по нему — под той же лицензией. Авторы — те же люди, что написали книгу Happy-LLM (наш путеводитель); несколько разделов tiny-universe — ранние версии глав этой книги.

Раздел оригиналаО чёмНаша страницаУроки курсаСложность
TinyLLM (Tiny-LLM, «Tiny Llama3» в README)свой BPE-токенизатор на TinyStories, LLaMA2-подобная модель на ~8,5 млн параметров, обучение за несколько часов в 2 ГБ видеопамяти, генерацияполный перевод4.2.3, 4.6.2–4.6.3, 5.6.1🟡
Qwen-blogпуть тензора через Qwen2 в Hugging Face Transformers: RMSNorm, GQA, RoPE, маска, SwiGLUполный перевод4.5.2–4.5.3, 5.2.1🟡
TinyTransformerTransformer из статьи «Attention Is All You Need» на PyTorch: внимание, маска, многоголовое внимание, энкодер и декодер, позиционное кодированиеконспект той же темы — Happy-LLM, гл. 24.4.1–4.4.3, 4.5.1🟡
TinyRAGRAG без фреймворков: эмбеддинги, нарезка, векторное хранилище на NumPy, ответ LLMполный перевод8.2.1🟢
TinyAgentагент ReAct на InternLM2 с инструментом «поиск Google»полный перевод8.3.1–8.3.2🟢
TinyEvalдвухэтапная оценка LLM: инференс → метрики (F1 по словам, accuracy, ROUGE), датасеты LongBenchполный перевод7.3.1–7.3.2🟢
TinyDiffusion (Tiny DDPM)DDPM на CIFAR-10: формулы, U-Net, обучение на MSE, генерация, IS и FIDполный перевод9.1.2🟡→🔴
TinyGraphRAGGraphRAG: извлечение сущностей и отношений LLM-ом, граф в Neo4j, иерархическая кластеризация Лейдена, сводки сообществ, локальный и глобальный поискв этом обзоре8.2.2🔴
TinyIMGRAGImageRAG: Stable Diffusion + проверка картинки моделью Qwen2.5-VL + переписывание промпта Qwen2.5 + поиск похожих картинок через CLIPв этом обзоре9.1.1–9.1.2🔴
CDDRS (раздел «исследования»)RAG для проверки строительной документации: смысловая нарезка, генерация проверочных вопросов, гибридный скоринг, переранжированиев этом обзоре8.2.2🔴
TinyRL_LLMзаготовка про RL для LLM (GRPO, GSPO) — на момент перевода в папке только пометка «Comming soon»—6.4.1—
flowchart TB
S4["Ступень 4: язык и Transformer"] --> TT["TinyTransformer<br/>(= Happy-LLM, гл. 2)"]
TT --> QB["Qwen-blog:<br/>современный блок"]
S4 --> TL["TinyLLM:<br/>своя маленькая LLaMA"]
QB --> TL
S7["Ступень 7: оценка"] --> TE["TinyEval"]
S8["Ступень 8: RAG и агенты"] --> TR["TinyRAG"] --> TG["TinyGraphRAG,<br/>CDDRS"]
S8 --> TA["TinyAgent"]
S9["Ступень 9: мультимодальность"] --> TD["TinyDiffusion"] --> TI["TinyIMGRAG"]
Маршрут по tiny-universe вместе со ступенями курса (схема переводчика)
Когда в курсеЧто делать в tiny-universeЗачем
после 4.6.3 «Цикл обучения»TinyLLM: все четыре шага, короткий прогонсравнить свой nanoGPT с LLaMA-подобной моделью и SentencePiece
после 4.5.3 «Современный блок» и 5.2.1Qwen-blog с открытым modeling_qwen2.pyувидеть RMSNorm, RoPE, GQA в промышленном коде
вместе с 7.3.1TinyEval на маленькой моделипонять, как считаются метрики на генеративных ответах
вместе с 8.2.1TinyRAG на своих конспектахRAG без LangChain и векторных БД
вместе с 8.3.1TinyAgent + доработка до полного циклапонять формат ReAct и разбор ответа модели
вместе с 9.1.2TinyDiffusion, 10–20 эпохсвязать формулы DDPM с кодом

Скачать проект:

Окно терминала
git clone https://github.com/datawhalechina/tiny-universe.git
cd tiny-universe/content/TinyLLM # каждый раздел — отдельная папка со своим README и requirements.txt

Мотивация авторов: обычный RAG режет текст на куски и теряет связи между ними. Пример из README: в одном куске «дедушку Сяомина зовут Лаомин», в другом — сведения о Лаомине; на вопрос, связывающий оба факта, обычный поиск по кускам вернёт только половину. GraphRAG превращает документы в тройки «сущность — отношение — сущность» и строит граф знаний, так что всё про одну сущность собирается в одном месте.

Что реализовано: модули LLM и эмбеддингов, работа с графовой БД Neo4j; извлечение сущностей и отношений по промптам (в README приведены сами промпты); кластеризация графа иерархическим алгоритмом Лейдена в «сообщества» и генерация их текстовых сводок; два вида поиска — локальный (вопрос о конкретной сущности: берём её и соседей) и глобальный (вопрос «обо всём»: отвечаем по сводкам сообществ). Это упрощённая версия идеи Microsoft GraphRAG; когда она нужна и чем дорога — в уроке 8.2.2.

Генерация картинок с поиском: Stable Diffusion рисует картинку по промпту, визуально-языковая модель Qwen2.5-VL проверяет, совпадает ли картинка с промптом, и называет недостающие понятия; Qwen2.5 переписывает их в поисковые описания; CLIP находит в базе похожие картинки; затем изображение генерируется заново с найденными картинками как подсказкой. Основа — статья «ImageRAG: Dynamic Image Retrieval for Reference-Guided Image Generation» (2025). Всё работает локально на одной карте 24 ГБ. К урокам 9.1.1 и 9.1.2.

Раздел «исследования»: воспроизведение научной работы о RAG для проверки строительной документации на соответствие нормам (в README проекта — пометка ADVEI25). Интересен как пример «RAG под узкую область»: нарезка по смыслу вместо фиксированных кусков, генерация проверочных вопросов к документу, поиск, ведомый знаниями, оценка фрагментов по нескольким признакам (редкость и важность терминов, связность), переранжирование и генерация рекомендаций по исправлению.


Ниже — полный перевод файла README.md репозитория (без картинок и QR-кода).

«Руководство по сборке „белого ящика“ большой модели»

Заголовок раздела ««Руководство по сборке „белого ящика“ большой модели»»

Этот проект — руководство по сборке большой модели «своими руками», идущее от принципов, ориентированное на «белый ящик» и охватывающее всю цепочку работы с большой моделью. Его цель — помочь читателям с базой в традиционном глубоком обучении, начиная с низкоуровневых принципов, «чисто руками» собрать понятную и работающую систему большой модели: саму модель, фреймворк RAG, систему агента (Agent) и систему оценки модели. Проект идёт от основ, подробно разбирает каждый технический момент и даёт полную реализацию в коде; подробные объяснения и комментарии к коду помогают читателю самостоятельно воспроизвести ключевые части большой модели и в процессе глубоко её понять.

Проект стремится построить для широкого круга учащихся понятный, работающий и воспроизводимый мир больших моделей, чтобы каждый заинтересованный мог сам, вручную собрать свою Tiny LLM Universe.

Основное содержание проекта:

Основная часть — реализации классических технологий с нуля; цель — глубоко освоить детали реализации классических работ:

  1. Генеративная модель изображений своими руками — Tiny Diffusion
  2. Глубокий разбор устройства большой модели — Qwen Blog
  3. Пошаговое предобучение самодельной большой модели — Tiny Llama3
  4. Как оценить свою большую модель — Tiny Eval
  5. Фреймворк RAG вручную — Tiny RAG
  6. Минимальная система агента своими руками — Tiny Agent
  7. Глубокое понимание основ больших моделей — Tiny Transformer
  8. Базовая система GraphRAG своими руками — Tiny GraphRAG

В исследовательской части с нуля воспроизводятся новые научные работы и производственные решения; цель — дать почувствовать путь от «умею повторить» к «умею придумать новое»:

  1. Метод поиска для RAG, усиленный тонкими смысловыми элементами, — CDDRS (ADVEI25)

«Война ста моделей» не утихает: открытые и закрытые большие модели постоянно поднимают планку возможностей, приближая великое будущее AGI. С ростом возможностей моделей снижается и порог для их дообучения и разработки приложений на их основе; большие модели всё глубже проникают во все отрасли, наделяя производство и жизнь интеллектом. Стремительно зреющая экосистема приносит всё больше открытых и закрытых фреймворков и API, а бесчисленные учебники позволяют всё большему числу разработчиков быстро и удобно делать приложения на больших моделях. Но чем зрелее экосистема, тем важнее глубоко понимать детали внутри фреймворков и уметь разрабатывать без них. Только если идти от базовых принципов, по возможности отказаться от фреймворков и собрать систему большой модели «чисто руками», можно по-настоящему понять её главные возможности и ключевые части, свободно менять и применять фреймворки и как угодно приспосабливать большие модели к любым отраслям и задачам.

Сейчас большинство учебников учат разработчиков быстро и удобно разрабатывать и обучать на сильно «обёрнутых» API и открытых фреймворках. Это хорошо для новичков, но упускается важность понимания принципов модели и внутреннего устройства фреймворков. И для самой большой модели, и для систем на её основе — RAG и Agent, — и для необходимой при разработке системы оценки есть множество руководств по готовым инструментам, из-за чего многие учащиеся «знают, что так, но не знают почему» и умеют лишь механически пользоваться инструментами, а не свободно переделывать их, исходя из принципов. Этот проект отказывается от сильно обёрнутых инструментов и API и, начиная с нижнего уровня (уровня PyTorch), «чисто руками» собирает систему большой модели и решает задачи RAG, Agent и Eval, — чтобы учащиеся с некоторой базой в больших моделях глубже освоили их устройство и вошли в более свободный, богатый и увлекательный мир больших моделей.

Проект подойдёт, если вы:

  • освоили базовое применение больших моделей и хотите изучить, как они устроены, но не знаете, с чего начать;
  • очень любопытны и жадны до знаний, у вас есть желание учиться;
  • интересуетесь задачами RAG, Agent, Eval для больших моделей и хотите понять их на уровне принципов;
  • любите практику и писать код, хотите с нуля написать RAG, Agent и Eval для большой модели;
  • хотите понять глубинное устройство больших моделей и поднять свой технический уровень.

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

Мы надеемся открыть волшебный мир LLM большему числу учащихся и, с настроем «знать не только что, но и почему», построить собственную „Tiny LLM Universe“.

  • Весь процесс — с нуля своими руками.
  • Проект охватывает весь цикл LLM — от модели (Model) до RAG, Agent и Eval; это учебник по всему стеку LLM.
  • В отличие от больших пакетов алгоритмов, код проекта проще и понятнее для начинающих разработчиков, больше похож на «белый ящик».
  • Проект будет и дальше развиваться: например, появятся обучение своими руками Tiny-llama3, сбор датасета для узкой области и т. д.
  • Приглашаем всех участвовать и вместе строить лучшую экосистему LLM!
  • 2025.8.12: вышел TinyGraphRAG — GraphRAG с нуля!
  • 2024.12.25: выпуск TinyDiffusion — Diffusion с нуля! Предобучение генератора изображений за два часа!
  • 2024.10.28: TinyLlama3 — от предобучения Llama с нуля до загрузки модели и инференса, хватит 2 ГБ видеопамяти!
  • 2024.6.26: дополнительный материал — оценка на математике гаокао (вступительный экзамен в вузы КНР): TinyEval теперь умеет оценивать задачи гаокао!
  • 2024.5.20: дополнительный материал — Tiny Transformer: Transformer, собранный полностью вручную.
  • 2024.5.1: выпуск Tiny-Universe V1 — подарок к Первомаю!

GraphRAG — новая в последние годы технология генерации, дополненной поиском (RAG): она соединяет графовые структуры с большими языковыми моделями и сильна в рассуждениях о сложных связях и поиске связанных знаний. Но для начинающих система понятий GraphRAG громоздка: графовые БД, векторный поиск, графовые алгоритмы, взаимодействие с LLM — от принципов до реализации высокий порог понимания.

Проект вручную собирает максимально упрощённую систему GraphRAG: от формул и схемы архитектуры — к конкретному коду построения графа, поиска, рассуждения и генерации. Цель — помочь интуитивно понять, как работает GraphRAG, и освоить весь путь: подготовка данных, обработка запроса, сборка ответа.

(Рисунок: схема работы TinyGraphRAG.)

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

Проект вручную собирает максимально упрощённую модель DDPM: от формул статьи — к конкретному коду обучения и генерации. Цель — помочь лучше понять устройство диффузионных моделей и освоить весь цикл: обучение, инференс, оценка.

(Рисунок: схема DDPM.)

Начинающие, изучая LLM, часто «бледнеют при виде кода» — огромного и с кучей обёрток.

Но на самом деле архитектура LLM не так сложна, как кажется! На примере Qwen2 проект проводит вас внутрь структуры модели — глазами входного тензора, через каждый операционный блок модели, — и «зажигает свет» в чёрном ящике LLM.

Кроме самой модели, подробно разобраны механизмы внутри неё — GQA, RoPE, маска внимания (Attention Mask), — чтобы понимание LLM было полным!

(Рисунок: общая схема Qwen2.)

LLM порождают вводящие в заблуждение «галлюцинации», опираются на возможно устаревшую информацию, неэффективны со специальными знаниями, не имеют глубокого понимания профессиональных областей и слабоваты в рассуждениях.

Именно на этом фоне появилась генерация, дополненная поиском (Retrieval-Augmented Generation, RAG), — одна из главных тенденций эпохи ИИ.

Прежде чем языковая модель сгенерирует ответ, RAG находит релевантную информацию в обширной базе документов и использует её, чтобы направлять генерацию; это сильно повышает точность и уместность ответа. RAG заметно ослабляет галлюцинации, ускоряет обновление знаний и делает происхождение текста проверяемым — большие языковые модели становятся практичнее и надёжнее.

RAG стал важной частью приложений LLM, но другие RAG-проекты строятся на обёрнутых фреймворках: пользоваться ими легко, но они прячут устройство RAG, и их трудно свободно переделывать и улучшать. Этот проект отказывается от сильно обёрнутых RAG-фреймворков и собирает RAG с нуля, чтобы лучше понять его принципы.

Зеркало: https://www.codewithgpu.com/i/datawhalechina/tiny-universe/tiny-universe-tiny-rag

(Рисунок: схема RAG.)

TinyAgent (записи пока нет — ищите в видеоканале Datawhale «Строим минимальную систему агента»)

Заголовок раздела «TinyAgent (записи пока нет — ищите в видеоканале Datawhale «Строим минимальную систему агента»)»

Большие модели обладают удивительно сильными способностями, но у них есть и постоянные слабости: логические рассуждения, текущие события, узкопрофессиональные области. Поэтому важное направление развития — давать модели целевые инструменты, «рычаг», чтобы она сверяла детали с реальным миром, — так получаются более умные, профессиональные и всесторонние приложения. На этой идее и построен Agent: LLM превращается в агента, который самостоятельно понимает задачу, планирует, принимает решения и выполняет сложные задачи, а богатый набор профессиональных инструментов позволяет большой модели по-настоящему войти в реальную жизнь.

Проект на основе подхода ReAct вручную делает минимальную структуру агента (на деле это скорее вызов инструментов): шаг за шагом пишем Agent, чтобы читатель лучше понял его состав и работу и потом мог свободно строить своих агентов. Летом попробуем переделать структуру ReAct в структуру SOP — присоединяйтесь!

(Рисунок: схема ReAct.)

С распространением LLM всё больше людей знакомы с дообучением (SFT), но как оценить результат дообучения — в частности, как разные модели справляются с текущим датасетом, — всё ещё открытый вопрос. И как объективно оценить качество генерации для разных задач — с выбором ответа, дискриминативных, генеративных — тоже нужно прояснить.

Чтобы ответить на эти вопросы, мы собрали и описали целостную систему оценки: она научит подбирать метрики под свою задачу и объективно оценивать по ним модель, давая точные количественные данные о её возможностях!

(Рисунок: схема процесса оценки.)

Цель проекта — реализовать простую большую языковую модель: от обучения токенизатора к обучению модели и генерации текста. Простую LLM можно обучить, используя только NumPy и PyTorch, видеопамяти уходит около 2 ГБ.

Ресурсов для обучения нужно совсем немного: хватит одной видеокарты, видеопамяти — около 2 ГБ. Обучение недолгое — несколько часов.

(Рисунок: пример генерации обученной модели.)

Сегодня почти все LLM основаны на механизме внимания (Attention), предложенном в Transformer; чтобы глубоко понять устройство и структуру LLM, обязательно нужно глубоко и полно понять Transformer.

По классической статье «Attention is All You Need» мы вручную собрали на уровне PyTorch полную, воспроизводимую и работающую модель Transformer, чтобы помочь глубже понять её устройство и заложить прочную базу для LLM.

Руководители проекта

  • Сяо Хунжу — руководитель проекта (участник Datawhale, Университет Тунцзи)
  • Сун Чжисюэ — руководитель проекта (участник Datawhale, Китайский горно-технологический университет, Пекин)
  • Цзоу Юйхэн — руководитель проекта (участник Datawhale, Университет международного бизнеса и экономики)

Участники

  • Лю Сяоюй — основной участник (Хуачжунский университет науки и технологии)
  • Пань Дуи — основной участник (Гонконгский университет науки и технологии, Гуанчжоу)
  • Гэ Цзицянь (Университет Тунцзи)

Прочее

  • Особая благодарность @Sm1les за помощь и поддержку проекта.
  • Если есть идеи — пишите нам; Datawhale будет рад вашим issue.
  • Особая благодарность всем, кто внёс вклад в учебник!

Datawhale — учебное сообщество в области ИИ. Изначальная идея — for the learner, расти вместе с учащимися. Сейчас в учебных группах уже тысячи человек; организованы занятия по машинному обучению, глубокому обучению, анализу данных, добыче данных, веб-скрейпингу, программированию, статистике, MySQL, соревнованиям по данным и другим темам. Присоединиться можно через официальный аккаунт Datawhale в WeChat.

Работа распространяется по лицензии Creative Commons «Атрибуция — Некоммерческое использование — На тех же условиях» 4.0 Международная (CC BY-NC-SA 4.0).


  • Happy-LLM — книга тех же авторов: то же самое, но связной книгой, с главами о дообучении и RL для агентов.
  • self-llm — как запустить и дообучить современные открытые модели, чтобы подставить их в TinyRAG и TinyAgent.
  • nanoGPT и llama2.c Андрея Карпатого — на llama2.c основан TinyLLM.
РусскийПояснение
«белый ящик» (white box)система, устройство которой видно и понятно
«своими руками», с нуляжаргон: написать самому, без готовых библиотек
весь цикл, «вся цепочка»от модели до приложения и оценки
генерация, дополненная поиском (RAG)урок 8.2.1
агент (Agent)урок 8.3.1
оценка (Eval)урок 7.3.1
граф знаний (knowledge graph)основа GraphRAG
поиск сообществ (community detection)кластеризация узлов графа
«переделать под себя»жаргон: сильно модифицировать код