AI

Stanford CS336「LLM をゼロから作る」を、API 運用者目線で読む

Stanford CS336 は言語モデルをゼロから実装させる講義です。自分で学習しない API 運用者にとっても、tokenizer・推論・アライメントという「課金している層の地図」になる。5 課題を自分の請求書の注釈として読み替えます。

SoSoraEndo2026年6月2日 12:059 min1,984

動画で読む

結論: 「ゼロから作る」は、運用者に "触らない部分の地図" をくれる

結論から書きます。Stanford の CS336(Language Modeling from Scratch、言語モデルをゼロから実装する講義)は、自分でモデルを学習しない API 運用者にこそ効く教材です。理由は、ふだんブラックボックスとして課金している層 — トークナイザ・学習・推論・データ・アライメント — の内側に、一度だけ地図を引いてくれるからです。地図があれば、障害のとき「どこを見ればいいか」が変わります。

きっかけは、CS336 の講義サイトが Hacker News に上がっていたことでした。担当は Tatsunori Hashimoto と Percy Liang。OS の講義に倣って「データ収集からトランスフォーマ実装、学習、評価まで全部自分で書かせる」と謳っています。私は LLM を学習する側ではなく、API で叩いて auto-publish を回す側です。最初は「自分には縁のない講義だ」と思って閉じかけました。でも課題一覧を見て、手が止まりました。私が毎月の請求書で見ている数字の、ほぼ全部がそこに並んでいたからです。

CS336 の 5 課題を、運用者の語彙に翻訳する

まず課題構成を、運用者が普段使う言葉に置き換えます。CS336 は 5 つの課題でできていて、それぞれが API 利用時に見えている数字の "裏側" に対応します。

課題講義での内容運用者が普段見ている対応物
1. Basicstokenizer・Transformer・optimizer を実装トークン課金、context window
2. SystemsGPU kernel と分散学習推論レイテンシ、tokens/s
3. Scalingscaling law と各部品の役割モデルサイズと品質の関係
4. DataCommon Crawl を前処理して学習データ化モデルの知識の偏り、cutoff
5. AlignmentSFT と強化学習で整える版が変わると変わる口調

この対応表を作っただけで、私は CS336 を「他人事の講義」から「自分の請求書の注釈」に読み替えられました。以下、運用に効く順に 3 つだけ掘ります。

tokenizer を自分で書くと、トークン課金の手触りが変わる

Assignment 1 で最初に書くのが tokenizer(テキストをモデルが食べる単位=トークンに刻む変換器)です。ここを一度自分で実装すると、トークン課金が「なんとなく高い」から「この日本語が高い理由」に変わります。

LLM の課金はトークン単位ですが、トークンは単語でも文字でもありません。BPE(Byte Pair Encoding、頻出するバイト列を貪欲に併合していく圧縮法)で決まる、中途半端な塊です。英語は 1 単語がだいたい 1 トークンに収まる一方、日本語は 1 文字が 2〜3 トークンに膨らむことがある。これを「知識」として知っているのと、併合処理を自分で書いて「なぜそうなるか」を知っているのは、別の解像度です。私は context engineering で Claude Code のトークン消費を半分にしたとき、最後まで効いたのが「日本語のプロンプトを削るとトークンが非線形に減る箇所」を狙うことでした。あれが効いた理由を、BPE の併合表をいじって初めて腹落ちさせられた覚えがあります。

実装の入口としては、Andrej Karpathy の minbpe が小さくて読みやすい。200 行ほどで、自分の請求書の単位がどう決まっているかを触れます。正直に書くと、私は最初 vocab を 256 のまま回して「全然圧縮されない」と 20 分ほど悩み、merge 回数を増やし忘れていただけ、というしょうもない失敗をしました。地図を引く側のはずが、最初の一歩で迷子になったわけです。

Assignment 2「Systems」は、推論の数字の根拠を見せてくれる

Assignment 2 の Systems は、GPU kernel と分散学習を扱います。運用者にとっての価値は、tokens/s やレイテンシといった "他人が出してくるベンチマーク数字" を、鵜呑みにせず疑えるようになることです。

たとえば「標準 GPU で 3000 tokens/s」という主張を見たとき、それが 1 リクエストあたりなのか全体スループットなのか、batch size はいくつか、で意味が 10 倍変わります。私はこの手の数字を標準 GPU で LLM 推論 3000 tokens/s という主張を運用者目線で読んだ記事で一度ほどきましたが、あのとき必要だった前提知識 — KV cache、batching、メモリ帯域がボトルネックになる構造 — は、まさに Systems 課題が手を動かして教える範囲でした。数字の出どころを 1 段だけ深く疑えると、ベンダーのスライドに振り回されにくくなります。

Assignment 5「Alignment」は、版で口調が変わる理由

Assignment 5 は SFT(Supervised Fine-Tuning、お手本の応答を真似させる工程)と強化学習でモデルを整えます。ここが分かると、「同じモデルなのに版が上がったら口調が変わった」という運用上の謎が、謎でなくなります。

モデルの個性は事前学習の総量ではなく、この後工程の味付けで決まります。私は別記事でモデルの個性は post-training で決まると書きましたが、CS336 はその "味付け" を自分の手で一度かけさせる講義です。すると、ベンダーが post-training を更新するたびに出力のトーンが動く理由が、構造として見えてきます。固定したい文体を system prompt 側で押さえる、という運用判断の根拠もここにありました。関連して、LLM は発散する、私は収束させる側でありたいで書いた違和感も、結局は後工程の癖をどう御すかの話だったのだと思います。

なお、このサイトの記事は AI が下書きを書き、私が公開前に確認・編集して出しています。CS336 を読み直したのも、自分が毎日使っている道具の内側を、運用者として一度はちゃんと見ておきたかったからです。

まとめ: 学習しない人ほど、一度は地図を引く価値がある

CS336 は「自分でモデルを学習するための講義」ですが、学習しない運用者にとっても "課金している層の地図" として効きます。持ち帰る点を並べます。

  • tokenizer を一度書くと、トークン課金が具体的なコスト構造に見える
  • Systems 課題は、他人の tokens/s 数字を疑う前提知識をくれる
  • Alignment 課題は、版で口調が変わる理由を構造で説明する
  • 全課題を「自分の請求書の注釈」として読み替えると、縁のない講義ではなくなる

地図は領土ではない。けれど地図がないまま毎月課金し続けるより、一度引いておく方がずっと心強い。

ゼロから作らない人こそ、一度はゼロから読む。触らない場所の地図は、障害のときにだけ価値を出す。

よくある質問

モデルを学習しない API 利用者が CS336 を読む意味はありますか?
あります。CS336 は普段ブラックボックスとして課金している層(tokenizer・推論・アライメント)の内側を一度だけ見せてくれます。学習しなくても、障害時に「どこを見ればいいか」の地図として効きます。
tokenizer を自分で実装すると何が変わりますか?
トークン課金が「なんとなく高い」から「この日本語が高い理由」に変わります。BPE の併合で英語は 1 単語が約 1 トークン、日本語は 1 文字が 2〜3 トークンに膨らむ構造を、手を動かして腹落ちできます。
CS336 はどんな課題で構成されていますか?
Basics(tokenizer・Transformer・optimizer)、Systems(GPU kernel と分散学習)、Scaling(scaling law)、Data(Common Crawl の前処理)、Alignment(SFT と強化学習)の 5 課題です。担当は Tatsunori Hashimoto と Percy Liang。
版が変わるとモデルの口調が変わるのはなぜですか?
個性は事前学習の総量ではなく、後工程の post-training(SFT や強化学習)の味付けで決まるからです。Alignment 課題を一度なぞると、ベンダーが後工程を更新するたびトーンが動く理由が構造で見えます。

参考文献

  1. CS336: Language Modeling from Scratch (Stanford, Spring 2026)
  2. karpathy/minbpe — minimal Byte Pair Encoding tokenizer
  3. Training Compute-Optimal Large Language Models (Chinchilla scaling law)
  4. Common Crawl — open repository of web crawl data

Reaction

Share

X (Twitter)