PaPoo
cover
technews
Author
technews
世界の技術ニュースをリアルタイムでキャッチし、日本語でわかりやすく発信。AI・半導体・スタートアップから規制動向まで、グローバルテックシーンの「今」をお届けします。

C++とCUDAで作る“小さなvLLM”入門:tiny-vllmが面白い理由

記事のキーポイント

tiny-vllmって何?

GitHubで公開されている tiny-vllm は、ひとことで言うと「vLLMの小型版を、自分の手で実装して学ぼう」というプロジェクトです。

vLLMといえば、LLMを速く・効率よく動かすための有名な推論エンジンです。
ここでいう inference engine は、学習済みのLLMを読み込み、ユーザーの質問に対してテキストを生成するための実行基盤のこと。
つまり「モデルを作る」よりも、「モデルを実際に速く動かす」側の技術です。

この tiny-vllm の面白いところは、単なるサンプル実装ではなく、
“高性能なLLM推論エンジンをC++とCUDAで作る” というテーマを、学習教材として分解している点にあります。

個人的には、こういうプロジェクトはかなり価値が高いと思います。
LLMは便利ですが、内部で何が起きているかはブラックボックスになりがちです。そこを「ゼロから作る」方向に引き戻してくれるので、理解が一気に深まりそうです。

このリポジトリでできること

READMEによると、このリポジトリには大きく2つの要素があります。

  1. 推論サーバーのソースコード一式
  2. その実装手順を学ぶためのコース

そして、エンジン側で扱う内容はかなり本格的です。たとえば:

この並びを見るだけでも、かなり実戦寄りだとわかります。
「Hello, world のLLM版」ではなく、​本当に性能を意識した推論基盤を狙っているのが伝わってきます。

そもそも、なぜC++とCUDAなの?

READMEでは、なぜこの実装をC++とCUDAでやるのかがかなり率直に説明されています。

理由はシンプルで、​ハードウェアをできるだけ効率よく使って、高速に動かしたいからです。

LLMの処理は、ざっくり言うと「大量の掛け算と足し算」です。
少量ならCPUでも十分ですが、大量の行列計算になるとGPUのほうが圧倒的に向いています。

ここはすごく本質的だと思います。
LLMを“賢い文章生成マシン”として見ると神秘的ですが、中身はかなり地道な数値計算です。
その意味で、​知能のように見えるものが、大量のパラメータと大量の計算から立ち上がっているという見方は、理解の助けになるはずです。

「モデル」と「推論」は別物

READMEの説明でわかりやすいのが、​学習(training)と推論(inference)をきちんと分けていることです。

LLMは、ざっくり言うと次の流れで作られます。

  1. モデルの設計
    • PythonやPyTorchのような高レベルな道具で構造を考える
  2. モデルの実装
    • 最終的な設計をコードに落とす
  3. 学習
    • 大量の計算資源を使って重みを学習する
  4. 配信・実行(serve the model)
    • 学習済みモデルを実際に動かす

tiny-vllm が扱うのは、このうちの 4. 実行 の部分です。

ここ、一般の人には少しわかりにくいのですが、かなり大事です。
モデルのファイルは、ただの「重みの集まり」です。
それ単体では動きません。
それを動かすためのプログラムが必要で、さらにそのプログラムがGPUをうまく使えるように作られている必要がある。
つまり、​学習済みモデルがあっても、それを速く動かすのは別の難しさがあるわけです。

このプロジェクトの学び方がうまい

READMEを読む限り、tiny-vllm は「完成品を見せる」だけでなく、​学びの順番がかなり丁寧です。

image_0002.png

たとえば扱うトピックには、こんなものがあります。

正直、最初に見ると「単語が強いな……」と思うかもしれません。
でも、こういう一覧はむしろ親切です。
LLM推論の世界で何が重要なのかを、かなり具体的に見せてくれているからです。

特に面白いのは、​数学とシステムの両方が混ざっていること。
Attentionの数式だけ知っていても速くはならないし、CUDAだけ知っていても何を最適化するか決められない。
この手のプロジェクトは、その両方をつなぐ訓練になると思います。

PagedAttentionやcontinuous batchingが重要な理由

このあたりは、LLM推論を“本気で”やるなら避けて通れない話です。

continuous batching

複数のユーザーからのリクエストを、到着順にうまく混ぜながらまとめて処理する仕組みです。
単純に「固定の人数をひとまとめにする」のではなく、​新しいリクエストを継ぎ足していくのがポイント。

これができると、GPUの空き時間が減って効率が上がります。
要するに、​行列計算マシンを遊ばせない工夫です。

PagedAttention

これはメモリ管理の工夫です。
Attentionは過去の生成履歴を参照するので、KV cache がどんどん増えます。
そのメモリをうまくページ単位で扱うことで、​無駄を減らし、断片化も抑えやすくするわけです。

こういう仕組みは、表面だけ見ると地味です。
でも実際には、​高速なLLMサービスを成立させる主役級の技術だと思います。
モデルそのものの性能だけではなく、運用上の効率が体験を決めるからです。

これは「勉強したい人」にかなり向いている

READMEには、「学習ツールとして使ってほしい」「大学などの教材にも歓迎」といったニュアンスがあります。
この姿勢がとても良いと思いました。

最近のLLM関連プロジェクトは、便利だけれどブラックボックスなものも多いです。
一方 tiny-vllm は、​**“理解しながら作る”** ことを前面に出しています。

しかも、C++とCUDAでやるので、

みたいな、実務でも重要なテーマに自然と触れられます。

個人的には、これはAIエンジニア志望の人だけでなく、
​「LLMって結局どう動いてるの?」をちゃんと知りたい人にもかなり刺さる題材だと思います。

まとめ

tiny-vllm は、単なる“速い実装”の公開ではありません。
LLM inference engine を自分の手で作りながら、その裏側を学ぶための教材としてかなり魅力的です。

この流れは、LLMを「使う側」から「動かす側」に視点を引き上げてくれます。

私はこういうプロジェクトを見ると、AIの世界ってやっぱり面白いなと思います。
派手なデモの裏で、地味だけど重要な工夫が山ほどある。
tiny-vllm は、その“地味だけど重要な部分”を真正面から学べる、かなり良い入口ではないでしょうか。


参考: GitHub - jmaczan/tiny-vllm

同じ著者の記事