Modèle / jeu de données
datawhalechina/llms-from-scratch-cn avatar
datawhalechina/llms-from-scratch-cn

llms-from-scratch-cn : construire un GPT, Llama3, ChatGLM3 ou RWKV en notebooks

仅需Python基础,从0构建大语言模型;从0逐步构建GLM4\Llama3\RWKV6, 深入理解大模型原理

4 364 étoiles597 forksJupyter NotebookNOASSERTION
GitHub

En bref

De quoi s’agit-il ?
Le dépôt Datawhale enseigne l'architecture des grands modèles en écrivant le code soi-même, chapitre par chapitre, avec PyTorch comme seul prérequis. Utile pour comprendre les tenseurs et l'attention, pas pour entraîner un modèle de production.
À qui s’adresse-t-il ?
Ce dépôt convient à un lecteur qui a déjà écrit du PyTorch et veut voir, ligne par ligne, comment un bloc d'attention multi-têtes ou un chargement de poids Llama3 se construit. Il ne convient pas à une équipe qui cherche un modèle entraîné, un pipeline de fine-tuning ou du code de déploiement : les chapitres 6 à 8 sont annoncés comme à venir et le README précise que la méthode est destinée à l'éducation, avec de petits modèles.
Puis-je l’utiliser commercialement ?
À vérifier. La licence de ce dépôt n’entre pas dans les catégories que nous classons automatiquement : lisez son fichier LICENSE avant tout usage commercial.
Est-il encore maintenu ?
Oui. Les derniers commits datent d’il y a 174 jours.
En quel langage est-il écrit ?
Principalement Jupyter Notebook, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Un dépôt pour ceux qui veulent écrire l'attention eux-mêmes

La plupart des ressources en français ou en anglais sur les LLM enseignent l'usage : charger un modèle depuis un hub, appeler une API, faire du fine-tuning avec un wrapper. Ce dépôt prend le chemin inverse. Le README annonce la couleur : il est question de architecture, et le projet se présente comme un tutoriel pratique pour construire de zéro un modèle de la famille ChatGPT. Le public visé est explicite, il faut des bases en Python et, d'après la description du chapitre 2, du PyTorch suffit pour suivre.

Le dépôt est maintenu par Datawhale et se présente comme une adaptation en chinois de rasbt/LLMs-from-scratch, avec un remerciement nominatif à l'auteur original. Il ne s'agit donc pas d'une création isolée mais d'une traduction enrichie, ce qui a une conséquence pratique : les notebooks de la partie fondamentale suivent une progression déjà éprouvée, et l'effort propre du dépôt se porte sur les discussions d'architecture. C'est là que se trouve l'intérêt réel pour un lecteur qui connaît déjà les bases : ChatGLM3, Llama3 et cinq versions de RWKV, chacune dans son notebook.

La progression des notebooks, du texte brut au script d'entraînement

La partie fondamentale occupe les chapitres 2 à 5, plus des annexes. Le chapitre 2 traite le texte, avec un notebook principal, un notebook dédié au dataloader et un fichier de solutions d'exercices. Le chapitre 3 construit l'attention, et un notebook séparé, multihead-attention.ipynb, isole l'attention multi-têtes du reste. Le chapitre 4 assemble le modèle complet, avec un gpt.py qui sort du notebook pour devenir un module importable. Le chapitre 5 passe à l'entraînement non supervisé, et c'est la partie la plus opérationnelle du dépôt : train.py, generate.py, et les solutions d'exercices.

Deux chemins sont proposés pour ce tronc commun. Le dossier Codes contient les notebooks courts, pour une prise en main rapide. Le dossier Translated_Book contient une version plus détaillée. Ce dédoublement est cohérent avec l'objectif pédagogique, mais il implique que le lecteur doit choisir son entrée : suivre les deux en parallèle revient à lire deux fois la même matière avec un niveau de détail différent. Les annexes complètent l'ensemble : l'annexe A introduit PyTorch en deux parties et fournit un script DDP-script.py pour l'entraînement distribué, l'annexe D ajoute des fonctionnalités au processus d'entraînement.

Les chapitres 6, 7 et 8 sont annoncés comme à venir : fine-tuning pour la classification de texte, fine-tuning avec retour humain, et usage en pratique. Autrement dit, tout ce qui touche à l'adaptation d'un modèle à une tâche réelle n'est pas encore disponible.

ChatGLM3, Llama3 et RWKV : cinq notebooks d'architecture

Le dossier Model_Architecture_Discussions constitue la seconde moitié du dépôt. ChatGLM3 y est traité dans un notebook nommé 加载模型权重.ipynb, ce qui indique d'emblée l'angle : le chargement des poids. Llama3 dispose de llama3-from-scratch.ipynb. RWKV est décliné en quatre notebooks, v2, v3, v4 et v5, chacun avec son guide, tous attribués au même contributeur.

Cette organisation a un mérite : elle montre que ces architectures ne sont pas des variantes cosmétiques les unes des autres. RWKV remplace l'attention par une formulation récurrente, et la succession v2 à v5 documente l'évolution de cette idée plutôt que de présenter une version figée. Lire les quatre notebooks dans l'ordre a donc un sens pédagogique que ne donne pas un article de synthèse.

La limite est structurelle. Le README décrit pour ces modèles des fichiers de configuration, des scripts d'entraînement et du code central, mais les notebooks listés portent sur la discussion et la reconstruction de l'architecture, pas sur l'entraînement de bout en bout. Un notebook qui charge des poids et rejoue un forward n'apprend pas à entraîner. C'est un choix assumé, cohérent avec la priorité affichée pour l'architecture, mais il faut le savoir avant de s'y engager.

Ce qu'il faut pour exécuter les notebooks

Le dépôt est en Jupyter Notebook, avec du Python et PyTorch. Le README ne fournit pas de fichier de dépendances ni de commande d'installation, et c'est une lacune réelle : il faut déduire l'environnement des imports présents dans chaque notebook. Concrètement, l'entrée se fait par les fichiers listés dans le tableau du README, par exemple Codes/ch02/01_main-chapter-code/ch02.ipynb pour le traitement du texte, puis Codes/ch03/01_main-chapter-code/multihead-attention.ipynb pour l'attention, puis Codes/ch04/01_main-chapter-code/gpt.py et Codes/ch05/01_main-chapter-code/train.py.

Le seul élément de configuration visible dans le matériel fourni concerne l'entraînement distribué : l'annexe A contient DDP-script.py, ce qui suppose une exécution via torchrun ou une commande équivalente à plusieurs processus. Aucun hyperparamètre, aucune variable d'environnement et aucune clé de configuration ne sont documentés dans le README. Toute personne qui veut faire tourner train.py doit donc lire le script lui-même pour connaître ses arguments et ses chemins de données.

Sur le matériel, le README ne donne aucune indication. Il mentionne des modèles petits et fonctionnels, ce qui suggère qu'un GPU modeste suffit pour les chapitres d'entraînement, mais rien dans le matériel fourni ne permet de l'affirmer avec précision. À vérifier avant de planifier quoi que ce soit.

La licence : un NOASSERTION qui cache un Apache 2.0

L'API du dépôt renvoie NOASSERTION comme identifiant de licence, ce qui signifie qu'aucune licence standard n'a été reconnue automatiquement. Le README, lui, affiche un badge Code License Apache 2.0 qui pointe vers le fichier LICENSE.txt à la racine. Cette divergence entre les deux sources est le premier point à vérifier si vous comptez réutiliser du code.

Le second point concerne le contenu non code. Le dépôt est une adaptation d'un projet existant, avec traduction et ajouts. Le badge Apache 2.0 porte sur le code, et rien dans le matériel fourni ne précise le régime applicable aux textes traduits ni aux notebooks d'architecture rédigés par des contributeurs tiers. Apache 2.0 prévoit des obligations de mention et de conservation des avis, ce qui compte si vous rediffusez les notebooks modifiés. Je ne donne pas d'avis juridique ici, mais la combinaison d'un NOASSERTION et d'une oeuvre dérivée justifie une lecture attentive du fichier LICENSE.txt et, le cas échéant, un avis professionnel.

Un coût de maintenance faible, mais un contenu qui vieillit

Le dépôt n'est pas archivé et le dernier push remonte à mars 2026. Aucune release n'a été publiée, ce qui est cohérent avec un projet de contenu pédagogique : il n'y a pas d'artefact à versionner, seulement des notebooks à mettre à jour. Le coût de maintenance pour un utilisateur est donc proche de zéro. Vous clonez, vous lisez, vous n'avez rien à intégrer dans une chaîne de build.

Le revers est que le contenu dépend de versions de bibliothèques et de formats de poids externes. Les notebooks ChatGLM3 et Llama3 chargent des poids, et un changement de format ou de dépôt en amont peut invalider un notebook sans que rien ne le signale. C'est le risque principal d'un tutoriel qui s'appuie sur des artefacts téléchargés : la partie théorique reste valable, la partie exécutable peut casser silencieusement. La progression vers les chapitres 6 à 8 est également un engagement non tenu à ce jour, et il n'existe aucun calendrier public dans le matériel fourni.

Face à un livre ou à un cours vidéo

L'alternative la plus directe est le dépôt original rasbt/LLMs-from-scratch, dont celui-ci dérive. La différence n'est pas dans le contenu fondamental, qui est partagé, mais dans la langue et dans les ajouts : la version Datawhale est en chinois, propose deux niveaux de lecture, et surtout ajoute les notebooks d'architecture ChatGLM3, Llama3 et RWKV. Si votre objectif est uniquement de construire un GPT de zéro, l'original suffit. Si vous voulez comprendre comment un modèle chinois ou un modèle récurrent se distingue d'un Transformer, c'est ici que se trouve la matière supplémentaire.

Comparé à un cours vidéo ou à un ouvrage, le format notebook a un avantage net : le code s'exécute et se modifie. On peut casser une tête d'attention, changer le nombre de têtes, observer ce qui se passe. Un livre ne le permet pas. En contrepartie, un notebook n'a pas de relecture éditoriale continue, et les incohérences entre le README et l'API du dépôt, comme celle de la licence, en sont une illustration.

Conclusion éditoriale

Ce dépôt convient à un lecteur qui a déjà écrit du PyTorch et veut voir, ligne par ligne, comment un bloc d'attention multi-têtes ou un chargement de poids Llama3 se construit. Il ne convient pas à une équipe qui cherche un modèle entraîné, un pipeline de fine-tuning ou du code de déploiement : les chapitres 6 à 8 sont annoncés comme à venir et le README précise que la méthode est destinée à l'éducation, avec de petits modèles. Avant de vous engager, ouvrez Codes/ch05/01_main-chapter-code/train.py et vérifiez que vos ressources correspondent à ce que le script attend, puis lisez le fichier LICENSE.txt pour trancher la question du NOASSERTION.

Sources officielles

  1. datawhalechina/llms-from-scratch-cn on GitHub
  2. Issues
  3. README
Notes de la communauté

Notes de la communauté