<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://berlimioz.fr/feed.xml" rel="self" type="application/atom+xml" /><link href="https://berlimioz.fr/" rel="alternate" type="text/html" hreflang="fr" /><updated>2026-09-25T13:24:37+00:00</updated><id>https://berlimioz.fr/feed.xml</id><title type="html">Chloé Roger</title><subtitle>Développeuse web fullstack senior (Ruby/Rails) — journal d&apos;apprentissage de l&apos;ingénierie LLM : self-hosting, RAG, mise en production.</subtitle><author><name>Chloé Roger</name></author><entry><title type="html">Jour 1 — Setup du labo et premiers tokens</title><link href="https://berlimioz.fr/journal/2026/09/25/setup-et-premiers-tokens/" rel="alternate" type="text/html" title="Jour 1 — Setup du labo et premiers tokens" /><published>2026-09-25T00:00:00+00:00</published><updated>2026-09-25T00:00:00+00:00</updated><id>https://berlimioz.fr/journal/2026/09/25/setup-et-premiers-tokens</id><content type="html" xml:base="https://berlimioz.fr/journal/2026/09/25/setup-et-premiers-tokens/"><![CDATA[<p>Premier jour officiel du programme LLM. Au menu : monter l’environnement
de travail complet, et premières manipulations de tokenization.</p>

<h2 id="le-labo">Le labo</h2>

<ul>
  <li><strong>Python 3.12 via <a href="https://docs.astral.sh/uv/">uv</a></strong> — venant de Ruby,
uv c’est bundler + rbenv en un seul outil, et rapide. Projet <code class="language-plaintext highlighter-rouge">labo-llm</code>
initialisé avec JupyterLab et numpy.</li>
  <li><strong><a href="https://ollama.com">Ollama</a></strong> pour faire tourner des modèles en local :
un <code class="language-plaintext highlighter-rouge">llama3.2:3b</code> (2 Go) tourne à <strong>~127 tokens/s</strong> sur mon Mac (Apple
Silicon). Largement de quoi expérimenter sans GPU cloud.</li>
  <li>Premier script : interroger le modèle local via l’API HTTP d’Ollama en
Python — l’équivalent d’un <code class="language-plaintext highlighter-rouge">Net::HTTP.post</code> avec un payload JSON, rien
d’exotique pour qui vient du web.</li>
</ul>

<h2 id="premiers-tokens--le-français-coûte-cher">Premiers tokens : le français coûte cher</h2>

<p>Un LLM ne voit jamais de texte : il voit des <strong>tokens</strong>, des sous-mots
découpés par un algorithme (BPE) dont le vocabulaire a été appris
majoritairement sur de l’anglais. Vérification avec <code class="language-plaintext highlighter-rouge">tiktoken</code> :</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>"The quick brown fox jumps over the lazy dog."          → 10 tokens
"Le rapide renard brun saute par-dessus le chien
 paresseux."                                            → 18 tokens (+80 %)
</code></pre></div></div>

<p>Même sens, presque le double de tokens. Sur cette phrase l’écart est
extrême, mais la tendance est générale : <strong>le français coûte 20 à 30 % plus
cher</strong> en tokens que l’anglais — donc en facturation API, et en place dans
la fenêtre de contexte.</p>

<p>Autre découverte parlante : <code class="language-plaintext highlighter-rouge">strawberry</code> est découpé en <code class="language-plaintext highlighter-rouge">str</code> + <code class="language-plaintext highlighter-rouge">aw</code> +
<code class="language-plaintext highlighter-rouge">berry</code>. Le modèle ne voit pas les lettres — voilà pourquoi « combien de r
dans strawberry ? » a piégé tant de modèles.</p>

<h2 id="prochaine-étape">Prochaine étape</h2>

<p>Finir la semaine 3 du cours d’Andrew Ng (régression logistique,
régularisation), puis la vidéo de Karpathy sur le tokenizer BPE, à
réimplémenter en Python.</p>]]></content><author><name>Chloé Roger</name></author><category term="module-1" /><summary type="html"><![CDATA[Premier jour officiel du programme LLM. Au menu : monter l’environnement de travail complet, et premières manipulations de tokenization.]]></summary></entry></feed>