10GB のメモリで数十億規模のグラフ処理するアルゴリズム:DataFusion が大好きです

2026/08/01 0:53

10GB のメモリで数十億規模のグラフ処理するアルゴリズム:DataFusion が大好きです

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Apache DataFusion は、標準的なノートパソコン上でバイリオン規模のグラフ解析を遂行する能力を証明し、Apache Spark といった高価なクラスターインフラストラクチャの必要性を取り除きました。SQL スタイルのジョインとアグリゲーションを通じて効率的な大規模並列同期(Map-Reduce)アルゴリズムを実装し、処理をディスクにオフロードすることで、同システムはわずか 5GB のメモリを用いて、約 30 分以内に PageRank を計算しました。その対象は 15 回のフル反復にわたるバイリオンエッジの有向グラフ(Graphalytics

graph500-26
、エッジ数 1.05B、ノード数 3280 万)であり、計算結果は真値と完全に一致しました。同様に、同システムは Bögeholz et al. の「インデータベース連結成分解析」に基づき、約 36 分以内に 22 回の前方反復を用いて、Twitter データセット(
twitter_mpi
、エッジ数~19.6B、ノード数 5260 万)の弱連結成分を特定しました。その際、メモリプールは 8GB が使用されました。これらの結果は、
systemd-run
を介した厳格なメモリ制限などの条件下でも検証されています。依然として、スパイルプールのディスク前ソート化の欠如による極限メモリシナリオにおける稀なデッドロックなど、若干の課題は残っていますが、この飛躍的な進歩により、研究者や小規模チームが安価なハードウェア上で地元の環境で高度な解析を実行するための障壁が大幅に低下しました。

本文

Apache DataFusion を用いた大規模グラフ Map-Reduce 実装報告

概要 (TL;DR)

  • アプローチ: Apache DataFusion を基盤に、大規模グラフに対する Map-Reduce アルゴリズムを実装しました。
  • 設計方針:
    • 処理をディスクへオフロードし、ランダムアクセスではなくバッチスキャンを基盤としたアルゴリズムを採用しています。
    • DataFusion がスパイラ(Spill)、ソートマージ結合(SMJ)、集計、プランニング、実行を一括で担当するため、実装コードは極めて軽量です。
  • 検証環境: 厳密なモードでテストを行い、
    systemd-run
    を用いてハードメモリ制限下での動作確認を実施しました。

主要な成果と課題

  • PageRank (10 億エッジ):
    • データセット
      graph500-26
      (3,280 万ノード、10.5 億エッジ)に対し、5GB のメモリで計算可能です。
  • 弱連結成分 (WCC) (20 億エッジ):
    • データセット
      twitter_mpi
      (5,257 万ノード、19.6 億エッジ)に対し、10GB のメモリで全弱連結成分を同定可能です。
  • 比較優位:
    • NetworkX や Igraph ではこれらが不可能でしたが、現在はノート PC 一台でも対応可能になりました。
    • 従来の「Apache Spark と GraphFrames が必須」という認識から、DataFusion の大規模グラフ解析への活用姿勢を根本的に変えました。
  • 現時点での課題:
    • FairSpillPool: 極限のシナリオではデッドロックが頻発します。
    • SMJ 実装: ディスク上で事前ソートされたデータを使用する SMJ の実装は未対応であり、現状は動作していません(※)。

設定 (Setup)

2 つの主要タスクについてテストを行いました。

PageRank

  • 概要: Graphalytics データセット
    graph500-26
    に対する PageRank 計算です。検索結果のランキング付けや不正行為検知などに利用されます。
  • アルゴリズム:
    • 古典的な Pregel(Bulk Synchronous Parallel: Map-Reduce)を採用しています。
    • DataFusion の Join と Agg を用いて表現し、Spark の GraphFrames ライブラリのコア部分と類似した構造です。

使用データセット詳細

項目
ノード数32,804,978
エッジ数1,051,922,853
有向 (Directed)False(非有向)
メモリ制限 (Memory Limit)5 GB
DataFusion プールサイズ4 GB

弱連結成分 (Weakly Connected Components, WCC)

  • 概要: Graphalytics データセット
    twitter_mpi
    に対する全弱連結成分の同定です。異なるシステム間の ID 重複を除去する「アイデンティティ解決」の中核アルゴリズムです。
  • アルゴリズム: 「データベース内の連結成分分析」(Bögeholz 他,arXiv 1802.09478)に基づく実装です(Spark GraphFrames でも同様のアルゴリズムが実装済み)。

使用データセット詳細

項目
ノード数52,579,682
エッジ数1,963,263,821
有向 (Directed)True(有向)
メモリ制限 (Memory Limit)10 GB
DataFusion プールサイズ8 GB

結果 (Results)

PageRank

  • 特性:
    • 比較的単純なタスクですが、スケーラビリティを証明するため SMJ(ソートマージ結合)を利用しました。
    • 頂点サイズが小さいため、HJ(ハッシュ結合)でも可能です。
  • 実装詳細:
    • エッジと状態をディスクへオフロードし、イテレーションを繰り返します(ラインジンを破断させることなく処理)。
    • 収束するまで繰り返し実行します。
    • 有向エッジのみを対象とするため、グラフの非対称化は不要です。
  • 計算時間:
    • 30 分(15 フルイテレーション)を要しますが、ボトルネックは処理速度ではなくメモリ設定です。
    • 現実的な規模(10 億エッジ級)であれば十分高速に動作します(テスト済み)。
  • 精度確認:
    • グラウンド・トゥリス(正解値)との照合結果:完全一致(許容誤差 0.0001)。

将来の最適化可能性

  • 結合効率: SMJ は各イテレーションで最も結合側のデータ(エッジ)を再ソートする必要があり、パフォーマンス向上の余地があります。
    • 改善策: エッジを範囲別バケット化やレンジパーティショニングを行うことで回避可能です。
  • ストレージ形式: Parquet が最適な形式か検討が必要ですが、Parquet 以外の選択肢も視野に入れます。
  • 結合と集計のフューズ (Join+Agg Fuse):
    • 各 Pregel イテレーションは「エッジ Join ノード状態 -> Group By + Agg -> Join -> 更新」という流れです。
    • 最初の 2 ステージ(Join + Agg)をフューズできれば、パフォーマンスの劇的向上が見込めますが、DataFusion での実装方法についてはさらに学習が必要です。

Weakly Connected Components (WCC)

  • 特性:
    • 最も困難なパートです。Twitter グラフ(20 億エッジ、CSV 約 30GB)に加え、WCC ではエッジを対称化(Union)する必要があります。
    • ピーク時には約40 億のエッジを、プールサイズである8GBという限られたメモリで処理します。
  • プロセス:
    • 最初の数回のイテレーションを乗り越えると、収縮プロセスによりエッジ数が劇的に減少し、メモリ圧力が低下する段階でアルゴリズムは完了します。
    • 完了までの所要時間:約 10 分

実行ログ(一部)

以下は

systemd-run
を用いたハードメモリ制限下での実行ログです。

sem@fedora:~/github/graphframes-rs$ systemd-run --user --scope \
   -p MemoryMax=10G -p MemorySwapMax=0 \
   -p AllowedCPUs=0-1 \
   --setenv=RUST_LOG=graphframes_rs=info,datafusion=warn \
   ./target/release/run-algorithm twitter_mpi-v.parquet twitter_mpi-e.parquet wcc 42 file:///var/home/sem/Downloads/gf_wcc_out 8G 2

Running as unit: run-p316509-i284528.scope; invocation ID: 742f9296d31d426580b7ec8213422cf9
[2026-07-05T05:37:21Z INFO  graphframes_rs::algorithm::connectivity::connected_components] start WCC with run-id 017c0a23-2b20-4ffa-ac6b-6e2cb8d7203e
[2026-07-05T05:52:21Z INFO  graphframes_rs::algorithm::connectivity::connected_components] after preparation graph has 3228212374 edges
[2026-07-05T06:13:21Z INFO  graphframes_rs::algorithm::connectivity::connected_components] cc forward iteration 1, edges remaining: 840238268
...
[2026-07-05T06:18:23Z INFO  graphframes_rs::algorithm::connectivity::connected_components] connected components written to file:///var/home/sem/Downloads/gf_wcc_out after 22 forward iterations
num-iterations: 22

精度確認

  • Graphalytics: グラウンド・トゥリス(正解データ)を提供しており、検証が容易です。結果は正しいことを確認しました。

メモリ使用状況と集計 (CSV リード)

memory D SELECT column1, count(*) as cnt FROM read_csv('twitter_mpi-WCC', delim=' ') GROUP BY column1 ORDER BY cnt DESC LIMIT 5;
┌──────────┬──────────┐
│ column1  │   cnt    │
│  int64   │  int64   │
├──────────┼──────────┤
│        1 │ 52,515,193│
│ 27052874 │       67 │
│ 47269046 │       44 │
│ 45352761 │       33 │
│ 17516773 │       30 │
└──────────┴──────────┘

結果テーブルからの集計

memory D SELECT component, count(*) as cnt FROM results GROUP BY component ORDER BY cnt DESC LIMIT 5;
┌───────────┬──────────┐
│ component  │   cnt    │
│   int64    │  int64   │
├───────────┼──────────┤
│        1   │ 52,515,193│
│   27052874 │       67 │
│   47269046 │       44 │
│   45352761 │       33 │
│   17516773 │       30 │
└───────────┴──────────┘

同じ日のほかのニュース

一覧に戻る →

2026/08/01 4:03

Hugging Face の侵入を Tailscale が阻止しなかった

## Japanese Translation: 最近のセキュリティインシデントにより、Hugging Face の AI エージェントが永続的な Tailscale 認証キーを介して侵害され、攻撃者が悪意のあるノード 181 台を生成し、Kubernetes クラスタで root アクセスを取得し、4 日間で秘密管理ストレージにある 136 キーを含むシークレットストアにアクセスできたことが明らかになりました。Tailscale そのものには脆弱性はありませんでしたが、特権の過度に付与されたエージェントが静的認証キーを使用することで、このエスケープが可能になりました。専門家は、これらを**ワークロードアイデンティティ連邦**(署名された OIDC により短期間有効なトークンを生成)または、サポートされている場合にハードウェアバインドのキーを利用するように置き換えることを推奨しています。組織もまた、エージェントがローカルテレメトリを抑制している場合でも異常を検出するために**ネットワークフローログ**を有効にすべきであり、**Tailnet Lock**などの厳格なアドミッション制御を実装する必要があります。Tailscale は文書の改善、危険なアクションに対する UI の警告の追加、デフォルト設定の微調整による将来のインシデントの防止に取り組んでおり、同社はこの点を認識しています。 --- ### 改訂サマリー(欠落していた詳細を統合): 最近のセキュリティインシデントにより、Hugging Face の AI エージェントが永続的な Tailscale 認証キーを使用して侵害される仕組みが暴露されました。攻撃者はこれらの再利用可能な認証情報を利用し、4 日間にわたり悪意のあるノード 181 台を生成し、「秘密管理ストレージの 136 キー」へのアクセスを含むシークレットを窃取しました。これは、静的なキーが「ゼロトラスト」環境であっても深刻なリスクをもたらすことを示しています。Tailscale そのものには脆弱性はありませんでしたが、デフォルトの設定により、特権の過度に付与されたエージェントが Kubernetes クラスタの root アクセスを取得することができました。このケースは、auth keys などの標準的な認証方法の危険性を浮き彫りにしており、これらは一般的ですが、継続的な AI ワークロードには不適切で不安全です。将来のエスケープを防止するため、専門家は静的認証情報を、ワークロードアイデンティティ連邦による短期間有効なトークン(または HSM の発行が利用の妨げにならない場合にハードウェアバインドのキー)に置き換えることを推奨しています。組織はまた、異常を検出するためにネットワークフローログを有効にし、動的な識別子ベースのアクセス制御へと移行する必要があります。さらに、**Tailnet Lock**による厳格なアドミッション制御の実装や、デバイスポスチャーチェックの利用によって、不明瞭なノードをより効果的に孤立させることができます。Tailscale はゼロトラストの期待にもかかわらずインシデントを引き起こしたことを認め、文書の改善、UI のナッジの追加、デフォルト設定の微調整、類似の AI 駆動によるエスケープベクトルに対する構成強化へのエンジニアリングサポートを提供することで対応することを約束しています。

2026/08/01 0:17

エレベーター

## 日本語訳: 歴史的事象シミュレーションによるエレベーターアルゴリズムの比較により、単純な反応型戦略は動的な交通状況において複雑な最適化手法よりも優れたパフォーマンスを発揮することが示されています。SCAN(1961 年に特許出願)はロビーから最上階まで移動した後で方向を反転させ、一方 LOOK は現在の方向の要求が完了する dès à présent で反転を開始し、必ずしも最上階まで到達する必要はありません。両者はどちらも中央スケジューラーに依存し、新しい要求を最も手近な稼働中のエレベーターへ割り当てます。パフォーマンスは、30 秒以内かつ 90 秒以内の到着割合といった待機時間指標で測定されます。これらの研究では、早朝ラッシュ(ロビーから上層への移動)は、一貫して特定の方向の混雑を生じるため、夜間よりも通常より悪い待機時間を引き起こすことが示されています。奥蒂斯の RSR などの高度なプラットフォームは、遅延を処理するために継続的な再最適化(5 秒ごと)を使用し、ETA、車内負荷ペナルティ、同方向への集まる回避ボーナス、方向一致ボーナス、近接アイドルボーナスといった評価要素を活用します。しかし、ベンチマーク結果では、LOOK は高流量(>7 階/分)時や小規模なビルにおいて RSR を上回る可能性があり、そのシンプルなルールが不要な停車を減らすためです。キオスクを使用した目的地割り当てシステムは、通常よりも悪い待時間を生じることが多く、この直感に反する結果は、硬直的なキオスク割り当てと、5 秒ごとの再バランスステップがその窓期内に変化する交通状況に対応できないことに起因します。極めて高層のビルで多数のエレベーターがある場合、キオスクが提供する追加情報が有益である可能性もありますが、一般的なシミュレーション結果では、完璧な効率を追求する重機的な最適化手法よりも、適応可能なルールベースの割り当てシステムを維持することで、より優れた信頼性を確保できると示唆されています。待機時間(<30 秒、<90 秒)、階数、車両数、流量(例:18/分)などの変数を実験するためのシミュレーションツールが用意されています。

2026/08/01 3:04

qm

## Japanese Translation: Quantum(QM)は、スタートアップ向けに開発された安全なマルチプレイヤージェントハネスであり、Slack と Web チャンネルと直接連携しつつ、隔離されたワークスペース内で従業員が安全にコラボレーションすることを可能にする。该平台は、耐久性のあるサンドボックス、スコープされたメモリ、そして個々のユーザーおよび共有ルーム両方に対してファイルおよびキーチェーンビューに対する厳格な制御を提供することで、重要なデータプライバシーの問題に対処しています。オープンソースの原則(MIT ライセンス)に基づいて構築され、Node 上で TypeScript と Fastify を使用して動作するヘッドレスコア API を備えた QM は、Pi、OpenCode、Codex、Claude Code など多様な AI モデルをサポートしながら、ベンダーロックインを引き起こしません。システムは、破壊的なアクションに対して硬い拒否を実装する事前宣言されたコマンドポリシーを含む 3 つの構成可能なポーズ(Strict、Auto default、Dangerous)を通じてセキュリティを確保しています。技術的には、Postgres の永続化レイヤーを利用し、デプロイは特定のディレクトリ構造(`deploy/layers/<org>/`)を介して管理され、バイト識別可能性のあるコアを組織固有のインフラストラクチャとプラグインイメージから分離します。デプロイは `qm init` CLI を使用して開始され、スキルを具現化し、GitHub の標準的なフォーク機能ではなくローカルでリポジトリをフォークすることで、組織がコードベース全体を秘密に保つことを可能にします。さらに、QM は内部データの漏洩を厳格に防止しながらアップストリームの変更をマージする特定のスキル(`update-qm` および `upstream-pr`)を通じて継続的な更新を促進します。また、プラットフォームはカスタム内部 Web アプリ、Git リポジトリから共有可能なスキル、cron を介したバックグラウンドプロセス、および管理制御をサポートしています。ドキュメントは `docs/getting-started.md` などの主要なマークダウンファイルで利用可能です。最終的には、QM はデータの完全性やセキュリティを損なうことなく、スタートアップがプライベートプロジェクトにおける強固なコラボレーションを実現できるようにし、AI を活用する方法を変革します。

10GB のメモリで数十億規模のグラフ処理するアルゴリズム:DataFusion が大好きです | そっか~ニュース