
2026/01/14 6:50
大規模にリーンを実行する(Running Lean at Scale)
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Harmonic のインフラチームは、Python 用に
ファイルを.protoとテンプレート(compile.py)でコンパイルして特殊化された C++ コードを生成するカスタム Protocol Buffers 実装 pbcc をリリースしました。pbcc は標準ライブラリの代わりに使用され、高速・メモリ効率(2 GB 以上のメッセージも処理可能)と、ネイティブなリスト/辞書を備えた Pythonic API を提供します。また IDE のオートコンプリートや型チェック用にpymodule.in.ccスタブを生成します。広範囲なテストはすべてのフィールドタイプ、未知フィールドの保持、および.pyiラッパーによるメモリ安全性をカバーしています。PyObjectRefチームはまた Aristotle を公開しました。このプロジェクトは 2025 年国際数学オリンピックで金メダルを獲得し、Lean 4 で形式的に検証されています。Aristotle は VERINA ベンチマーク仕様の 189 件中 160 件(96.8 %)を解決し、選択ソート、ランレングス符号化、LIS、および top‑k 頻度要素といったアルゴリズム証明で主要な LLM を上回る性能を示しました。補完的なオープンソースツールとして Newclid 3.0(幾何学ソルバー)と Yuclid(証明生成器)が統合され、Aristotle と連携して補助点の生成が可能です。
Harmonic の Lean REPL サービスは v1–v4 からグローバルにロードバランスされた C++ プロトコルへ進化し、接続ピンニングなしでリクエストをルーティングします。約 500 k CPU を対象とし、95 % 超の稼働率を実現しています。同社は $75 M の Series A(Sequoia 主導)、$100 M の Series B(Kleiner Perkins 主導)、および $120 M の Series C(Ribbit Capital 主導)を調達しました。
今後の計画としては、転送コスト削減のためにルーターディスクに状態データを保存し、非 GKE CPU 容量を活用し、さらに高い稼働率を実現するためにオートスケーリングとグローバルキューイングを改善することが挙げられます。
本文
私たちのインフラチームは、ハイパフォーマンスなワークロード向けに標準ライブラリを置き換えるために、Python 用に pbcc というカスタム Protocol Buffers 実装を開発しました。pbcc は軽量化されたコンパイラであり、Protobuf メッセージ用の専用 C++ コードを生成することで、大規模データセットをメモリ内で扱う際のオーバーヘッドを大幅に削減し、Python API をよりクリーンにしています。
概要
- 背景 – 標準ツールが当社のニーズに合わなかった理由。
- pbcc の設計 – 速度とシンプルさを実現した方法。
- 主要ポイント – コアインフラをゼロから構築する際の教訓。
背景
Protocol Buffers は
.proto ファイルで定義された構造化データを直列化します。一般的なワークフローは次の通りです:
- スキーマ(
)を書く。.proto
でコンパイルする。protoc- 生成された Python ライブラリを使ってメッセージをシリアライズ/デシリアライズする。
しかし、データ規模が拡大すると標準の Python 実装では次のような限界に直面しました:
- 非常に大きいメッセージは遅く、メモリを大量消費。
- 2 GB を超えるメッセージはしばしば失敗。
- API が型チェック(例:
)をサポートせず、繰り返しフィールドにカスタムコンテナ型を使用しているため、等価性比較が直感的でない。mypy
要件
| 必要 | 説明 |
|---|---|
| 高速 | 大容量ペイロードでも低レイテンシ。 |
| メモリ効率 | 非常に大きいメッセージをクラッシュせず処理。 |
| Pythonic | ネイティブ 、 を使用し、IDE の型ヒントが利用可能。 |
pbcc のアーキテクチャ
pbcc は ahead‑of‑time(AOT)コンパイル方式を採用しています。
が Google の Protobuf コンパイラで生成されたモジュールからメッセージ記述子を読み取ります。compile.py- 高度に最適化された C++ テンプレート(
)を使用して、各メッセージタイプ用のソースコードを生成します。pymodule.in.cc - 生成された C++ コードは拡張モジュール(
)としてコンパイルされます。.so - Python はこのモジュールをインポートし、データクラスと同様に振る舞うクラス(
/serialize()
メソッド付き)を取得します。deserialize()
プロトコルバッファのロジックはすべて拡張モジュール内にあり、Python コード側では pbcc オブジェクトを通常のオブジェクトとして扱うだけです。
主要設計決定
正確性(最優先)
- すべてのフィールドタイプと修飾子を網羅したテストスイート。
- Protobuf 規格に従った未知フィールド処理:再シリアライズは意味的に等価で、必要に応じて削除してメモリを節約。
- 深く入れ子になったメッセージの安全なメモリ管理には
ラッパーを採用。PyObjectRef - 64 ビット整数をネイティブに扱い、人工的なサイズ制限は設けない。
利便性
- モジュールと同時に生成される
スタブファイルで IDE の自動補完と型チェックがフルサポート。.pyi - すべての Protobuf 型をネイティブ Python 型へマッピング:繰り返し →
、マップ →list
、オプション →dict
。None
パフォーマンス & スケーラビリティ
- カスタム
クラスがメモリを効率的に管理し、必要なときだけコピー。StringReader/Writer - pbcc は既に Google の upb ライブラリと同等の速度を実現しており、更なる C++ 最適化も可能。
結論
pbcc のような社内開発ソリューションは次のことを示しています:
- 外部プロジェクトを採用するコストが、そのメリットを上回る場合がある。
- 自社のニーズに合わせてツールをカスタマイズすると、API がよりクリーンになり、性能も同等かそれ以上になる。
pbcc は現在 GitHub で公開されています:https://github.com/harmonic-ai/pbcc。類似プロジェクトに興味がある方は、Harmonic にご参加ください!