純粋なCMakeでGPT-2:なぜなら、そうできるから
AlpinDaleのgpt2.cmakeは、Q16.16固定小数点数演算を使用して、GPT-2モデルを完全にCMakeで実装しています。ビルドツールを本来の用途をはるかに超えて押し上げる、ワイルドな概念実証です。

AlpinDaleのgpt2.cmakeは、Q16.16固定小数点数演算を使用して、GPT-2モデルを完全にCMakeで実装した概念実証です。このプロジェクトは、クイックな実験用のトイモデルと、Hugging Faceから実際のOpenAI GPT-2の重みを読み込むフルモデルの2つのパスを提供します。
仕組み
トイモデルは、Pythonスクリプトを介してテーブルとモデル定義を生成し、cmake -P gpt2.cmakeを通じて推論を実行します。フルモデルは、safetensors、ボキャブラリ、マージファイルをダウンロードし、tools/gen_full.pyで変換し、プロンプトとトークン数でgpt2_full.cmakeを実行します。
すべての演算はQ16.16固定小数点数で行われ、浮動小数点演算を完全に回避しています。これは、CMakeのmath()コマンドが整数のみをサポートするプラットフォーム間で、実装を決定的かつ移植可能に保つための意図的な選択です。
なぜこれが重要なのか
CMakeは汎用言語ではありません。ネイティブなデータ構造がなく、ニューラルネットワーク用の標準ライブラリもなく、math()コマンドは32ビット整数に制限されています。それでもこのプロジェクトは、アテンション、フィードフォワード層、トークナイゼーションをすべてその制約内で実装しています。
その結果は、CMakeのスクリプトモードの柔軟性の証であると同時に、できるからといってやるべきではないという教訓でもあります。コードはおそらく保守不可能で遅いですが、技術的な演習としては印象的です。
トレードオフと制限
固定小数点数演算は量子化誤差を導入し、浮動小数点推論と比較して出力品質を低下させる可能性があります。フルモデルは約500MBの重みのダウンロードと前処理が必要なため、軽量なデモではありません。
パフォーマンスも懸念事項です。CMakeスクリプトは解釈され、小さなモデルでもネイティブ実装よりも遅く実行されます。これは本番ツールではなく、ビルドシステムができることの限界を押し広げる好奇心の産物です。
エンジニアにとっての教訓は2つあります。固定小数点ニューラルネットワークを理解したいなら研究する価値のある楽しいハックであり、間違ったツールを仕事に使うことについての戒めでもあります。GPT-2を実行する必要があるなら、実際のランタイムを使用してください。同僚を感心させたいなら、これがリンクすべきリポジトリです。
CMakeでGPT-2を実行できるからといって、そうすべきというわけではない——しかし、それは見事な自慢だ。
ディスカッション
0 件のコメント
最初のコメントを投稿しましょう。