11 ポイント 投稿者 GN⁺ 2024-02-24 | 1件のコメント | WhatsAppで共有
  • GoogleのGemmaモデル向けの軽量でスタンドアロンなC++推論エンジン
  • 誰のためのプロジェクトか?
    • 現代の大規模言語モデル(LLM)推論エンジンは、従来のニューラルネットワークランタイムを超えるカスタム機能を持つ複雑なシステムである
    • 高水準アルゴリズムと低水準計算の共同設計を通じた研究と革新の機会がある一方、実験向けに設計されていないC++推論ランタイムと、低水準計算を抽象化するPython中心のML研究フレームワークとの間にはギャップが存在する
    • gemma.cppはGemma 2Bおよび7Bモデルの最小実装を提供し、汎用性よりもシンプルさと直接性を重視している
    • gemma.cppは実験や研究ユースケースを目的としており、最小限の依存関係で他のプロジェクトに容易に統合でき、約2K LoCのコア実装と4K LoCの補助ユーティリティから成り、簡単に修正可能
    • CPU推論のためにGoogle Highway Libraryの移植性の高いSIMDを活用
    • 本番環境向けのデプロイには、JAX、Keras、PyTorch、TransformersのようなPythonフレームワークを使う標準的なデプロイ経路を推奨

クイックスタート

システム要件

  • 開始前に、CMake、Clang C++コンパイラ(C++17以上対応)、Kaggleから取得したアーカイブを展開するための tar がインストールされている必要がある

ステップ1: Kaggleでモデル重みとトークナイザーを取得

  • KaggleのGemmaモデルページを開き、Model Variations |> Gemma C++ を選択
  • Variation ドロップダウンには、bfloat16重み(より高い忠実度)と8ビット量子化浮動小数点重み(より高速な推論)のオプションが含まれる
  • 一般的には -sfp チェックポイントから始めることを推奨

ステップ2: ファイルを展開

  • 同意書に記入した後、archive.tar.gz ファイルをダウンロードして展開
  • 展開されたファイルには、モデル重み(例: 2b-it-sfp.sbs)とトークナイザーファイル(tokenizer.spm)が含まれる
  • これらのファイルは任意の扱いやすいディレクトリ位置へ移動できる(例: このリポジトリの build/ ディレクトリ)

ステップ3: ビルド

  • ビルドシステムはCMakeを使用
  • gemma推論ランタイムをビルドするには、ビルドディレクトリを作成し、プロジェクトのトップレベルディレクトリで cmake を使ってビルドファイルを生成
  • 8ビット量子化浮動小数点重み(sfp)の場合は、オプションなしで cmake を実行
  • bfloat16重みをダウンロードした場合は、上記のようにオプションなしで cmake を実行する代わりに、WEIGHT_TYPE を highway の hwy::bfloat16_t 型に設定して cmake を実行
  • 適切な cmake コマンドを実行した後、build/ ディレクトリへ移動し、make を実行して ./gemma 実行ファイルをビルド

ステップ4: 実行

  • build/ ディレクトリ内で gemma を実行できる
  • gemma には必須引数があり、例として 2b-it-sfp.sbs 重みファイルと tokenizer.spm トークナイザーファイルを使って実行できる

使い方

  • gemma はverbosityフラグで制御される複数の使用モードを持つ
  • すべての使用モードは現在インタラクティブで、新しい行の入力時にテキスト生成がトリガーされる

対話型ターミナルアプリ

  • デフォルトでverbosityは1に設定されており、gemma が呼び出されるとターミナルベースの対話型インターフェースを提供する

コマンドラインツールとして使用

  • gemma 実行ファイルをコマンドラインツールとして使うには、gemma.cpp向けの引数を完全指定したエイリアスを作成すると便利な場合がある

プロジェクトにgemma.cppライブラリを含める

  • gemma.cppを自分のプロジェクトに含める最も簡単な方法は、FetchContent を使ってgemma.cppと依存関係を取得すること
  • CMakeLists.txtに以下を追加できる

gemma.cppをライブラリとしてビルド

  • gemma.cppは自身のプロジェクトでライブラリ依存として使用でき、libgemma ターゲットをビルドして共有ライブラリアーティファクトを生成できる

謝辞と連絡先

  • gemma.cppは2023年秋にAustin HuangとJan Wassenbergによって開始され、Phil Culliton、Paul Chang、Dan Zhengの貢献により2024年2月に公開された
  • これはGoogleが公式にサポートする製品ではない

GN⁺の見解:

  1. gemma.cppは大規模言語モデルの実験や研究に有用なツールであり、C++ベースの軽量推論エンジンを提供することで、既存のPython中心フレームワークとのギャップを埋めることに貢献する
  2. このプロジェクトはオープンソースコミュニティに貢献できる機会を提供し、Googleのオープンソースガイドラインに従うことの重要性を強調している
  3. gemma.cppは多様な使用モードを提供し、開発者や研究者が自身のプロジェクトに容易に統合して利用できるよう設計されており、これはAIおよびML分野のイノベーションを促進する可能性を持つ

1件のコメント

 
GN⁺ 2024-02-24
Hacker Newsの意見
  • Hacker Newsコメント要約:
    • Austinによる紹介とプロジェクトの説明:

      • Austinはプロジェクトの共同著者であり、質問に答えると述べている。
      • gemma.cppはllama.cpp/ggmlとは独立しており、llama.cppプロジェクトから着想を得ている。
      • gemma.cppはgemmaの直接実装であり、実験・研究、および移植性と容易な改変を重視している。
      • 初期実装はCPU SIMD中心で、GPUサポートの選択肢を模索中である。
      • Gemmaモデル自体に関する質問には別の同僚が答える予定で、これはC++実装ではあるが、モデルの学習プロセスとは比較的独立している。
      • Googleの小規模チームで取り組んでおり、他の人々にも有用に使ってもらえることを願っている。
      • プロジェクトに関するTwitterスレッドへのリンクを提供している。
    • GoogleのLLM競争力に関する意見:

      • GoogleはOpenAIと比べて商用製品では後れを取っているという批判はあるが、LLM分野では非常に有能である。
      • Googleが本格的に動き出せば印象的な成果を出すだろうという意見。
      • FacebookとLlamaのおかげでオープンソース競争が続いてほしいという期待と、OpenAIが当初のミッションから離れつつあるとしても、その初期ビジョンの重要性は忘れるべきではないという指摘。
    • ビルドシステムに関する質問:

      • なぜGoogleがビルドシステムとしてbazelを使わなかったのか不思議に思うコメント。
    • Gemmaの性能への称賛:

      • GemmaがHHEMリーダーボードに追加され、小規模モデルの中で低い幻覚率を示している。
    • LLMオープンソースエコシステムの発展速度への感嘆:

      • LLMオープンソースエコシステムの進化が非常に速く、新しい情報やコードが次々と出てきている。
    • モデルフォーマットに関する質問:

      • GGUF、GGMLなど、さまざまなモデルフォーマットの違いと、それらがどのように管理されているのか説明を求めるコメント。
    • LLMの数学能力に関する議論:

      • LLMは数学の問題をうまく解けないという説明と、ChatGPTが数学を得意に解いているように見える理由についての議論。
      • LLMプロジェクトがプラグインモデルをサポートしているか、またllama.cppを使って開発したシステムにプラグイン型アプローチを適用できるかについての質問。
    • Gemmaのコンテンツ制限の有無に関する質問:

      • GemmaにGeminiのようなコンテンツ制限機能が組み込まれているのか、それともそれがGeminiアプリケーション側の特徴なのかを尋ねる質問。
    • gemma.cppへの感謝と今後の機能追加への期待:

      • gemma.cppリポジトリへの感謝を示し、Pythonラッパーを開発したと述べている。
      • gemma.cppチームが新しい技術を更新するたびに簡単に使えるよう、Pythonラッパーを開発したという説明。
    • Gemmaモデルの実行ファイルサイズに関する質問:

      • Gemmaモデルを最小限のコマンドラインインターフェースで構築し、オフラインで実行可能なスタンドアロン実行ファイルにした場合、最終的な実行ファイルサイズがどの程度になるのかという質問。