jmaczan/tiny-vllm
Build your own high performance LLM inference engine in C++ and CUDA - a smaller version of vLLM
tiny‑vllm – 実践的な C++/CUDA LLM 推論エンジン(およびチュートリアル)
何であるか – tiny‑vllm は C++ で記述された完全なオープンソースの LLM 推論サーバー実装であり、CUDA(および AMD GPU 用にオプションの HIP)をサポートしています。エンジンのソースコードと、現代のトランスフォーマーに基づく言語モデルの各コンポーネント(重みの読み込みからトークン生成まで)を段階的に解説する教育用コースの両方を提供しています。
なぜ重要か – 多くの高性能推論サーバー(例:vLLM、TensorRT‑LLM)は大規模なプロダクション向けコードベースです。tiny‑vllm は意図的に問題を 10 億パラメータの Llama 3.2 モデルに絞り込み、推論を高速化する CUDA カーネル、メモリレイアウト、バッチ処理ロジックを学習者が明確に把握できるようにしています。したがって、理論(アテンション、RMSNorm、FlashAttention風のソフトマックス、PagedAttention)と実際にコンパイル・実行可能なシステムとの橋渡しとして機能します。
主な機能(README に記載)
- 実際の LLM を Safetensors ファイルから読み込み(Llama 3.2 1B Instruct、BF16 重みでテスト済み)。
- prefill(プロンプト処理)と decode(1トークン生成)の両方をサポートする完全なフォワードパス。
- 次のすべての重い計算をカスタム CUDA カーネルで実行:
- エンベッディングの参照
- 並列リダクションを用いた RMSNorm
- 回転位置埋め込み(RoPE)
- グループ化クエリアテンション(GQA)
- Flash‑style オンラインソフトマックス
- PagedAttention とページ化 KV キャッシュ(長文コンテキストのメモリ効率化)。
- 2 種類のバッチ処理戦略:
- 静的バッチ – 単純なワークロード向けの固定サイズバッチ。
- 連続バッチ – リクエストの動的な追加・削除を可能にし、プロダクションサーバーを模倣。
- AMD GPU サポートは HIP/hipBLAS を通じてオプションで可能。同じ CUDA ソースコードを薄い互換性ヘッダーで再利用。
技術スタック
- 言語: C++ 17
- GPU API: CUDA 13.1(nvcc)と cuBLAS;AMD GPU 用にオプションの HIP。
- モデル形式: Safetensors(BF16 重み)。
- 依存関係: 単一ヘッダー JSON パーサー
nlohmann/json(v3.12.0)。 - ビルドシステム: CMake(Ninja をサポート;
-DUSE_HIP=ONで切り替え可能)。
誰が使うべきか
- 学生 / 自己学習者:LLM 推論がカーネルレベルでどのように動作するかを理解したい人。
- 教員:コードとナラティブ解説を組み合わせた教材を探している人。
- エンジニア:低レベルのパフォーマンステクニック(FlashAttention、KV キャッシュのページ化)に興味があり、最小限で読みやすいリファレンス実装を求める人。
プロジェクトの状態
- README ではすべての主要なエンジンコンポーネントが実装済み(チェックボックスがチェック済み)とマークされています。
test.shスクリプトはプロジェクトをビルドし、簡易な推論デモを実行し、作者の Linux + RTX 5090 環境でコードがコンパイルされ出力が得られることを示しています。- 教育目的で積極的にメンテナンスされており、ビルドヘルプのためのイシューの提出を歓迎しています。
始める方法
- リポジトリをクローンし、必要に応じて CUDA/GCC のパスを調整。
- CUDA Toolkit(AMD 用は ROCm)をインストールし、互換性のある GPU を確保。
- Hugging Face から Llama 3.2 1B Instruct の
model.safetensorsをダウンロード。 ./test.shを実行 – スクリプトはエンジンをビルドし、最小限の推論テストを実行。- マークダウンベースのコースセクション(例:Tokenization, Attention, Paged KV cache)に従い、理論を読み、対応するソースファイルを確認。
名前の由来 – 人気のある vLLM プロジェクトの「若い・小さな兄弟」として位置づけられ、機能の幅よりも明確さと学習を重視しています。
上記のすべての詳細はリポジトリの README から直接引用;追加の機能は推測されていません。
関連
- Dispatch
- プロジェクト
- プロジェクト
- Dispatch
- Dispatch