Journal
Sections
Réglages de lecture
Voix
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
Voix pour l’anglais
Code et termes techniques en anglais
Désactivé : la voix de la page lit tout, sans pause entre deux voix.
Aucune voix pour cette langue dans ce navigateur.
Plus de voix
D’autres voix : Microsoft Edge propose des voix naturelles en ligne, et Windows (Paramètres › Heure et langue › Voix), macOS et Android en installent d’autres.
Progression
Section intitulée « Progression »- Candle lu au tag
0.11.0, commit31f35b1; le code du cours dépend decandle-coreetcandle-nn0.11.0 - Code du cours : exemples, sorties
expected/, sept doctestscompile_fail,check.sh - Mêmes sorties sous Windows et sous Linux (un conteneur
rust:1.94.0) - CI sur GitHub : le workflow est écrit, pas encore poussé
- Leçon 1 : pourquoi Candle
- Leçon 2 : tenseurs
- Leçon 3 : calcul et performance sur CPU
- Leçon 4 : différentiation automatique
- Leçons 5 à 12
- Traductions française et espagnole des leçons 1 à 4
2026-09-15 — Candle, épinglé
Section intitulée « 2026-09-15 — Candle, épinglé »- La dernière version sur crates.io est 0.11.0, publiée le 26 juin 2026. Ses sources sont le tag
0.11.0, commit31f35b147389700ed2a178ee66a91c3cc25cc80d, cloné à part de ce dépôt.mainétait àddf1b87le même jour. - Le workspace liste dix membres, dont les exemples WebAssembly, et garde six autres crates à part (les noyaux GPU,
candle-onnx, le livre) ;candle-transformersa 125 entrées sousmodels/etcandle-examples111 exemples. - Le cours épingle
=0.11.0dansCargo.tomlet commiteCargo.lock, au lieu de suivremaincomme le fait lecargo add --gitdu livre de Candle. - Le code n’utilise que le CPU : aucune feature Cargo n’est activée, aucun modèle n’est téléchargé dans ce lot.
2026-09-15 — Le code du cours
Section intitulée « 2026-09-15 — Le code du cours »code/candleest un workspace avec une seule crate,candle-course: 13 exemples, etsrc/lib.rsavec les fonctions utilitairesshow(arrondit chaque valeur, pour que les trois systèmes affichent les mêmes chiffres),outcomeetcaught(affiche le message d’une panique), et les sept doctestscompile_fail.check.shexécutecargo fmt --check,clippy --release --all-targets -D warnings,cargo test --release, puis chaque exemple, et compare sa sortie et son code de sortie avecexpected/.l01_machineetl03_benchdépendent de la machine : ils s’exécutent sans comparaison.rustdocstable vérifie qu’un extraitcompile_failéchoue, pas avec quelle erreur. Un doctest annonçait d’abordE0369pourResult<Tensor> - f64; compiler l’extrait a donnéE0277. Le workflow ajoute uncargo test --docnightly sous Linux, qui vérifie les codes.- Le premier build release a compilé 128 crates en 73 secondes avec
-j 4. 72 des 119 crates derrièrecandle-coreviennent detokenizers. data/builds.csvest une copie du fichier du cours IX, du commitd9ef7fb, pour que la leçon 4 entraîne sur les mêmes 52 builds.ix-autogradvient de Git au commit490c395d’IX, celui du cours IX, comme dépendance de développement.- Sous Linux,
check.sha tourné dans Docker Desktop 29.2.1 (rust:1.94.0,--cpus 4) : chaque sortie comparée était identique à celle de Windows.
2026-09-15 — La CI
Section intitulée « 2026-09-15 — La CI ».github/workflows/candle-examples.ymlest écrit :check.shsurubuntu-latest,windows-latestetmacos-latest, un cache du registre Cargo, des checkouts Git et detarget/, avecCargo.lockpour clé, et l’étape de doctests nightly sous Linux.- Il n’est pas poussé : le jeton avec lequel cette session pousse ne peut pas créer de fichiers sous
.github/workflows/sans le scopeworkflow. Tant qu’il n’a pas tourné, macOS (ARM, NEON) est à vérifier, en particulier les sommesf32de la leçon 4, qui pourraient s’arrondir différemment.
2026-09-15 — Les mesures
Section intitulée « 2026-09-15 — Les mesures »- Intel Core Ultra 9 285K (24 cœurs, sans hyper-threading), 64 Go, Windows 11 Pro, Rust 1.94.0. La machine faisait tourner d’autres travaux en même temps ; la leçon le dit et considère les écarts de moins de 20 % environ comme du bruit.
- La première version du benchmark de passe avant exécutait les tenseurs simples, puis les
Var, une fois chacun, et montrait le graphe plus rapide de 35 %. Deux tours alternés ont révélé un effet d’échauffement ; la leçon montre la version alternée et explique pourquoi. target-cpu=nativea compilé en 65 secondes dans un répertoire cible séparé et n’a rien changé au-delà du bruit.gemmchoisit déjà des noyaux AVX2 et FMA à l’exécution.- Dans un conteneur limité à 4 CPU, Candle compte toujours 24 cœurs physiques et démarre 24 threads : le petit réseau a pris 168 ms contre 44 ms avec
RAYON_NUM_THREADS=1.
2026-09-15 — GA, IX et TARS
Section intitulée « 2026-09-15 — GA, IX et TARS »Commits lus : GA 32f143c, IX a7e5fbc (avec ix-autograd inchangé depuis 490c395), TARS 87464ce.
- Aucun des trois ne dépend de Candle. GA (C#) et TARS (F#) exécutent leurs modèles avec ONNX Runtime et
Microsoft.ML.Tokenizers. - IX a écrit sa propre différentiation automatique,
ix-autograd, au-dessus dendarray, et garde une place pour un backend Candle. La leçon 4 montre que son gradient et celui de Candle concordent à1e-9sur la régression du cours IX. - Là où Candle pourrait servir : les embeddings de GA (la leçon 7 compare), et un backend pour
ix-autogradsi IX a besoin de plus d’opérations ou d’un GPU. Ce sont des notes pour les leçons suivantes, pas des propositions faites aux projets.
2026-09-15 — Constats
Section intitulée « 2026-09-15 — Constats »Seize choses trouvées par ce lot, chacune montrée par du code compilé du cours sauf mention contraire. Rien n’est déposé en issue ni en pull request.
- Un compilateur C pour
candle-core0.11.0. Il dépend detokenizersavec la featureonig, qui compile Oniguruma depuis ses sources C, pour un seul fichier, le tokenizer GGUF (leçon 1).mainest passé àfancy-regex, en Rust pur ; la prochaine version devrait supprimer cette exigence (à vérifier). from_vecetfrom_slicene vérifient pas le nombre d’éléments quand la forme n’a pas de trou : cinq valeurs avec une forme(2, 3)sont acceptées et paniquent plus tard (leçon 2). Issue #3812, corrigée surmainpar #3813 le 13 août 2026, après 0.11.0.- Les fonctions flottantes sur des tenseurs entiers paniquent avec
todo!("no unary function for u32")au lieu de renvoyer une erreur (leçon 2). C’est toujours le cas surmainàddf1b87; aucune issue trouvée à ce sujet. - Le générateur aléatoire du CPU ne peut pas recevoir de graine :
Device::Cpu.set_seed(42)renvoie une erreur, doncrandetrandnne sont pas reproductibles sur le CPU (leçon 2). - L’aide-mémoire du README ne compile pas :
tensor.to_dtype(&DType::F16)?passe une référence là oùto_dtypeprend unDType(leçon 1, un doctest). copy()clone tout le stockage, pas les éléments de la vue : une ligne de 1000 éléments d’un tenseur de 4 Mo tient toujours 4 Mo aprèscopy();force_contiguoustient 4 Ko (leçon 3).- Un message déroutant pour un indice de trop :
m.i((0, 0, 0))sur une matrice dit “dimension index 0 out of range for shape []” (leçon 2). squeezesur une dimension dont la taille n’est pas 1 réussit en silence et renvoie le tenseur inchangé, comme PyTorch (leçon 2).- Les gradients vont aussi aux tenseurs simples qui sont des entrées directes d’opérations enregistrées : la régression de la leçon 4 calcule des gradients pour ses données (leçon 4). Correct, mais du travail en plus.
backwardsur un non-scalaire est amorcé avec des uns sans avertissement, là où PyTorch refuse (leçon 4).- Le nombre de threads par défaut ignore les limites CPU des conteneurs : 24 threads sous
--cpus 4, quatre fois plus lent sur un petit réseau qu’un seul thread (leçon 3). target-cpu=nativen’a apporté aucun gain mesurable pour les produits matriciels, les opérations élément par élément ou un petit réseau sur cette machine ; le.cargo/config.tomlde Candle l’active pour ses exemples (leçon 3).- Les produits matriciels
f16ne sont pas plus rapides quef32sur un CPU :gemm-f16convertit en blocsf32(leçon 3). - La documentation d’IX décrit Candle comme utilisant « cuTENSOR » (
code-analysis-tools.md, ligne 129) ; les features CUDA de Candle utilisent cuBLAS, cuBLASLt, cuRAND, NVRTC et, en option, cuDNN (leçon 1). Lu dans les sources, pas exécuté. hf-hub: le workspace de Candle 0.11.0 demandehf-hub0.5.0 alors que la dernière version sur crates.io est 1.0.0. Pour la leçon 6 (à vérifier ce qui a changé).- Le livre de Candle installe depuis Git :
cargo add --git https://github.com/huggingface/candle.git candle-coresuitmain, donc un exemple du livre peut dépendre de code non publié (leçon 1).
À vérifier
Section intitulée « À vérifier »- La première exécution du workflow sur les trois systèmes, et les sorties
f32sur macOS ARM. - L’exigence d’un compilateur C après la prochaine version de Candle.
default_num_threadssur Apple Silicon, qui ne compte que les cœurs performance.CANDLE_GRAD_DO_NOT_DETACHet les dérivées secondes.- Pourquoi les opérations élément par élément contiguës prennent moitié moins de temps sous Linux que sous Windows, sur le même processeur (l’allocation, par hypothèse).