Modèle / jeu de données
datawhalechina/diy-llm avatar
datawhalechina/diy-llm

diy-llm : reconstruire un LLM composant par composant, en chinois

Covers pre-training data, Tokenizer, Transformer, MoE,distributed training, Scaling Laws, inference & alignment .6 progressive code assignments for full-stack LLM learning | 涵盖预训练数据、分词器、Transformer、MoE、分布式训练、缩放定律、推理与对齐,6 项渐进代码作业,掌握 LLM 全栈知识

1 366 étoiles138 forksJupyter NotebookLa licence varie

En bref

De quoi s’agit-il ?
Le dépôt datawhalechina/diy-llm propose un parcours en seize chapitres et six travaux pratiques inspiré de Stanford CS336. La documentation est dense, le code est en notebooks, et la licence n'est pas déclarée.
À qui s’adresse-t-il ?
diy-llm convient à un lecteur sinophone qui veut suivre un cursus LLM structuré, du tokenizer jusqu'au RLVR, et qui accepte de lire du Jupyter Notebook. Il ne convient pas à qui cherche une bibliothèque à importer : il n'y a pas de package installable, seulement un dépôt de cours.
Puis-je l’utiliser commercialement ?
Pas sans autorisation. GitHub ne trouve aucun fichier de licence dans ce dépôt, et sans licence tous les droits sont réservés par défaut : vous pouvez lire le code, mais pas le réutiliser. Consultez le README ou demandez l’accord des auteurs avant de l’utiliser.
Est-il encore maintenu ?
Oui. Les derniers commits datent d’il y a 5 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 cursus, pas une bibliothèque

La confusion la plus fréquente devant un dépôt comme celui-ci consiste à chercher le point d'entrée d'un package. Il n'y en a pas. diy-llm est un support pédagogique : la documentation vit dans docs/zh/, les exercices dans coursework/, et le README précise que l'installation des dépendances se fait au cas par cas, selon le travail concerné. La commande donnée est volontairement minimale : git clone https://github.com/datawhalechina/diy-llm.git, puis cd diy-llm. Rien de plus. Le README indique explicitement qu'il faut installer les dépendances en fonction des besoins de chaque exercice, ce qui signifie qu'il n'existe pas de fichier de dépendances unique couvrant l'ensemble du parcours.

Le public visé est décrit sans ambiguïté dans les prérequis : Python courant, PyTorch, algèbre linéaire, probabilités, calcul différentiel, bases solides en apprentissage automatique. Le CUDA est listé comme optionnel, avec la mention qu'un chapitre d'introduction existe pour ceux qui partent de zéro sur ce point. C'est une exigence élevée. Un développeur backend qui n'a jamais écrit une boucle d'entraînement sera perdu dès le chapitre 3, consacré à la précision mixte et au calcul de FLOPs.

Ce que recouvre la progression en seize chapitres

Le tableau du README liste les chapitres avec leur état d'avancement. Quinze sont marqués comme terminés, le seizième comme en cours de mise à jour. L'ordre n'est pas arbitraire : il suit la chaîne de construction d'un modèle. Le chapitre 2 traite l'algorithme BPE, la normalisation Unicode et l'écriture manuelle du code d'entraînement d'un tokenizer. Le chapitre 4 couvre RoPE, RMSNorm, SwiGLU, AdamW et la comparaison entre Pre-Norm et Post-Norm. Le chapitre 5 aborde le routage Top-K, l'équilibrage de charge, la perte auxiliaire, l'Expert Parallelism et DeepSeekMoE. Les chapitres 6 et 7 portent sur la bande passante mémoire, la compute intensity, Flash Attention, la fusion de kernels, le modèle de programmation CUDA et une introduction à Triton. Le chapitre 8 traite le parallélisme de données, de modèle et de pipeline, ZeRO-1/2/3, FSDP et All-Reduce.

La seconde moitié change de registre. Le chapitre 9 couvre la loi de Chinchilla et la conception d'expériences de scaling. Le chapitre 11 traite la filtration de qualité, la déduplication par MinHash, la désidentification des données personnelles et la composition des jeux de données. Le chapitre 13 enchaîne pré-entraînement, SFT, DPO et RLHF PPO, avec la notion d'Alignment Tax. Le chapitre 14 est consacré au GRPO, aux vérificateurs basés sur des règles, aux récompenses de résultat et de processus, et au RLVR. Le chapitre 15 va de CLIP à LLaVA, Qwen-VL et Chameleon. Cette couverture est large, et c'est précisément ce qui distingue le projet d'un tutoriel isolé sur l'attention.

Les six travaux pratiques et leur architecture

Les exercices sont regroupés dans coursework/ et numérotés de 1 à 6. Le premier demande d'implémenter un tokenizer, une architecture de modèle et un optimiseur, puis d'entraîner un modèle de langue minimal. Le deuxième porte sur l'analyse de performance, l'implémentation de FlashAttention-2 en Triton et la construction d'un code d'entraînement distribué. Le troisième demande de comprendre le rôle de chaque composant du Transformer et d'ajuster une loi de scaling pour prédire l'effet d'une extension. Le quatrième part de données Common Crawl brutes pour produire un jeu de pré-entraînement après filtrage et déduplication. Le cinquième applique le SFT puis l'apprentissage par renforcement, GRPO cité en exemple, sur des problèmes mathématiques. Le sixième utilise lm-evaluation-harness et evalscope pour évaluer la compréhension du langage, le raisonnement de bon sens, le code et le raisonnement mathématique.

Un détail de structure mérite attention. Le tableau des chapitres renvoie le chapitre 10 (inférence) vers assignment6-evaluation, et non vers un exercice dédié à l'inférence. Le chapitre 10 couvre pourtant KV Cache, décodage spéculatif, quantification GPTQ et AWQ, PagedAttention et Continuous Batching. Le lien entre la théorie de l'inférence et l'évaluation n'est pas expliqué dans le matériel fourni. C'est une zone où la documentation reste silencieuse, et il faut le signaler plutôt que de supposer une cohérence qui n'est pas démontrée.

Mise en route et clonage du dépôt

Le README donne une seule séquence de commandes, reproduite telle quelle : git clone https://github.com/datawhalechina/diy-llm.git, puis cd diy-llm. Aucune commande d'installation n'est fournie au niveau racine, et le commentaire associé précise que l'installation des dépendances de base dépend des besoins de chaque exercice. Concrètement, cela signifie que le lecteur doit ouvrir le dossier du travail visé, par exemple coursework/assignment1-basics/, et y chercher les instructions propres à cet exercice. Le matériel fourni ne détaille pas ces instructions.

La lecture se fait selon trois axes énoncés dans le README : lire les documents chinois dans docs/zh/ dans l'ordre des chapitres, faire les six exercices de coursework/, puis relire le code pour comprendre la conception de chaque composant. Une version anglaise existe dans docs/en/. Le site de lecture en ligne est hébergé à l'adresse https://datawhalechina.github.io/diy-llm/, construite avec VitePress d'après l'arborescence (docs/.vitepress/). Une version PDF est publiée dans les releases, avec un filigrane Datawhale ajouté volontairement, ce que le README justifie par la volonté d'éviter la revente du document par des comptes marketing.

Le format notebook et ce qu'il implique

Le langage principal déclaré est Jupyter Notebook. Ce choix a des conséquences pratiques que le README n'aborde pas. Un dépôt dominé par les notebooks se révèle difficile à relire dans un diff : une modification de sortie ou de compteur d'exécution produit un diff volumineux qui masque le changement réel. La revue de code entre contributeurs devient pénible. Pour un apprenant seul, l'inconvénient est moindre, mais il réapparaît dès qu'on veut comparer sa solution à la version de référence. La progression entre les versions V0.1 (juin 2026) et V0.2 (août 2026) suggère un rythme de mise à jour soutenu, et chaque mise à jour de notebook peut casser la compatibilité d'un exercice déjà résolu.

Autre point : le README ne mentionne aucun fichier de verrouillage de dépendances, aucun environnement conda, aucun requirements.txt à la racine. Pour un parcours qui couvre à la fois Triton, FSDP, CUDA et l'évaluation par lm-evaluation-harness, l'absence d'environnement unifié est un vrai coût. Chaque exercice risque d'imposer ses propres versions de PyTorch ou de Triton, et rien dans le matériel fourni ne permet de savoir si ces versions sont compatibles entre elles.

Licence absente et coût de maintenance

Le matériel fourni indique que la licence est inconnue. Ce n'est pas un détail administratif. Sans identifiant de licence explicite, on ne peut pas déterminer ce que l'utilisateur est autorisé à faire du contenu : réutilisation des chapitres dans un cours interne, traduction, intégration d'extraits dans une documentation commerciale. Le README mentionne par ailleurs un filigrane ajouté aux PDF pour décourager la revente, ce qui signale une préoccupation sur la réutilisation, mais un filigrane n'est pas une licence. Il faut vérifier ce point directement dans le dépôt avant tout usage autre que la lecture personnelle. Je ne donne pas d'avis juridique ici, seulement le constat que l'information manque dans le matériel fourni.

Sur la maintenance, le dépôt n'est pas archivé et la dernière poussée date de septembre 2026, peu après la release V0.2 d'août 2026. Le rythme observé sur deux releases publiées à deux mois d'intervalle suggère un projet actif. Le coût pour l'utilisateur se situe ailleurs : suivre un cursus de seize chapitres avec six travaux pratiques représente un engagement de plusieurs semaines, et le chapitre 1 sur W&B et la recherche d'hyperparamètres est encore marqué comme à compléter. Un lecteur qui commence par là tombe sur une section inachevée.

Face à un cours universitaire classique

L'alternative la plus évidente est le cours original dont diy-llm s'inspire, Stanford CS336, dont le lien figure dans les ressources connexes. La différence d'approche est nette. CS336 suppose un accès à des ressources de calcul universitaires et s'adresse à des étudiants déjà plongés dans l'anglais technique. diy-llm revendique une localisation pour le public chinois : le README cite explicitement l'environnement réseau, les ressources de calcul disponibles et l'écosystème open source local, avec des exemples appuyés sur Qwen et DeepSeek plutôt que sur des modèles occidentaux. Le contenu des chapitres 5 et 14 confirme cette orientation, DeepSeekMoE et le RLVR avec GRPO étant des sujets associés à des travaux chinois récents.

L'autre différence tient à la structure. Un cours universitaire s'évalue par des examens. Ici, l'évaluation passe par six travaux pratiques dont le résultat est du code exécutable : un tokenizer fonctionnel, une FlashAttention-2 en Triton, un pipeline de données filtré. Pour un autodidacte, c'est un avantage réel, parce que la validation ne dépend pas d'un jury. Pour quelqu'un qui cherche une certification reconnue, c'est un inconvénient : le dépôt ne délivre aucun titre, seulement un ensemble d'exercices.

Quand ce dépôt n'est pas le bon outil

Si l'objectif est de mettre en production un service d'inférence, diy-llm n'apporte rien de direct. Le chapitre 10 décrit PagedAttention et le Continuous Batching, mais le projet ne fournit pas de serveur, pas de bibliothèque, pas d'API. Pour cela, il faut se tourner vers les implémentations que ces chapitres citent comme sujets d'étude, non vers le dépôt lui-même. De même, un ingénieur qui veut seulement ajouter un tokenizer à un projet existant trouvera plus rapide d'utiliser une bibliothèque établie que de suivre le chapitre 2 et d'écrire son propre entraînement BPE.

Il y a aussi un cas où le dépôt est activement contre-productif : celui du lecteur qui n'a pas les prérequis en apprentissage profond. La progression suppose une familiarité avec PyTorch et les réseaux de neurones dès le chapitre 2. Le README annonce vouloir combler les lacunes en mathématiques et en apprentissage profond pour lisser la courbe, mais rien dans le matériel fourni ne permet de vérifier l'ampleur de ce rattrapage. Un débutant complet risque d'accumuler des chapitres lus sans être compris, ce qui est pire que de ne pas commencer.

Conclusion éditoriale

diy-llm convient à un lecteur sinophone qui veut suivre un cursus LLM structuré, du tokenizer jusqu'au RLVR, et qui accepte de lire du Jupyter Notebook. Il ne convient pas à qui cherche une bibliothèque à importer : il n'y a pas de package installable, seulement un dépôt de cours. Avant de s'engager, vérifiez deux points : la licence, absente du matériel fourni, et le contenu réel de coursework/assignment2-systems/, qui conditionne l'accès aux chapitres GPU et distribué.

Sources officielles

  1. datawhalechina/diy-llm on GitHub
  2. Issues
  3. Project website
  4. README
  5. Releases
Notes de la communauté

Notes de la communauté