CARVIEW |
Select Language
HTTP/2 200
date: Sat, 11 Oct 2025 02:41:28 GMT
content-type: text/html; charset=utf-8
cache-control: max-age=0, private, must-revalidate
cf-cache-status: DYNAMIC
link: ; rel=preload; as=style; nopush,; rel=preload; as=script; nopush,; rel=preload; as=style; nopush,; rel=preload; as=script; nopush,; rel=preload; as=script; nopush
nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
referrer-policy: strict-origin-when-cross-origin
report-to: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=AYrMiLiaZ1feLixJwqch%2BbhpltS8nelCPPVZSl5P0Ws%3D\u0026sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d\u0026ts=1760150488"}],"max_age":3600}
reporting-endpoints: heroku-nel="https://nel.heroku.com/reports?s=AYrMiLiaZ1feLixJwqch%2BbhpltS8nelCPPVZSl5P0Ws%3D&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&ts=1760150488"
server: cloudflare
strict-transport-security: max-age=0; includeSubDomains
vary: Accept,Accept-Encoding
via: 2.0 heroku-router
x-content-type-options: nosniff
x-permitted-cross-domain-policies: none
x-request-id: ed9260e4-581c-d2ec-bde7-a01945784955
x-runtime: 0.162886
x-xss-protection: 0
content-encoding: gzip
set-cookie: _secure_speakerd_session=RwxJCO%2BcmqpQV53phpLrQ6XIzqC9ARon6rKn5q6XyQfch9YbrfsMnZYpQoLk9aUyilr0flb7QDwsE7aa89q2V%2F2hO7kRR9v3arw8quDmGQog7sJ13n%2BbXj5XlXhB4Tqr1ATZQhEJmdLlj%2BHJkX7DtkvEpGNEHxIS7t3nonwmduWoWALUXcoyzh2yImc9g%2BVp%2Bp%2FOfFhcFFImTxwc%2B6asIz4UzoKnKOnE9CexaI%2BBJSMk55FMtXslxlGi8aSVKhhrlJHHtG7QNOpm0tpqQtGxYveJpRSFTjV8nD8ZktVRK9ZHCb%2FUQQcxdfaUaUeyPwoexN6uzRMW9qfOqlzM1bcnyYddhJ57UYMt5eNQEvVg6ZXU4RDuPhODxIHYn1%2FKf3z7L2SI1ASwdC043J%2FG74hqhPJO--68YY49DBFoCOV0OB--ujbCwieYl8%2F11H6BA5b7sw%3D%3D; HttpOnly; SameSite=Lax; Secure; Path=/; Expires=Sat, 25 Oct 2025 02:41:28 GMT
cf-ray: 98caffa40dfd2ffb-BLR
eBPFを用いたAIネットワーク監視システム論文の実装 / eBPF Japan Meetup #4 - Speaker Deck
eBPFを用いたAIネットワーク監視システム論文の実装 / eBPF Japan Meetup #4
eBPF Japan Meetup #4
https://ebpf.connpass.com/event/350944/
Yuuki Tsubouchi (yuuk1)
May 30, 2025
More Decks by Yuuki Tsubouchi (yuuk1)
Other Decks in Programming
Featured
Transcript
-
@yuuk1t / Yuuki Tsubouchi Ph.D. eBPFを 用 いたAIネットワーク 監視システム論 文
の実装 eBPF Japan Meetup #4 2025/05/30 さくらインターネット株式会社 さくらインターネット研究所 -
௶ ༎थ / yuuk1 さくらインターネット研究所 京都 大 学博 士 (情報学)
https://yuuk.io/ 主な研究開発分野 AI for SRE SREͷݚڀऀ ςϨϝτϦʔγεςϜʢϞχλϦϯάɾΦϒβʔόϏϦςΟͳͲʣ 4ͿΓʹeBPFΓ·ͨ͠ 2 -
: K. Liu, et al., “R-Pingmesh: A Service-Aware RoCE Network
Monitoring and Diagnostic System”, SIGCOMM, 2024. IUUQTEPJPSH R-Pingmesh: A Service-Aware RoCE Network Monitoring and Diagnostic System Kefei Liu, Zhuo Jiang, Jiao Zhang, Shixian Guo, Xuan Zhang, Yangyang Bai, Yongbin Dong, Feng Luo, Zhang Zhang, Lei Wang, Xiang Shi, Haohan Xu, Yang Bai, Dongyang Song, Haoran Wei, Bo Li, Yongchen Pan, Tian Pan, Tao Huang ACM SIGCOMM 2024 ژ༣ిେֶ ࢵۚࢁ࣮ݧࣨ %PVZJO7JTJPO$P -UE ஶऀ ॴଐ ձٞ ද URL リファレンス論 文 の書誌情報 [Liu+,SIGCOMM24] 3 -
アジェンダ 1. R-Pingmeshの紹介 (10分) 2. R-Pingmesh 設計と実装(10分) 3. AIコーディング所感(4分 時間なければカット)
4. まとめ(1分) 4 • 研究者として、論 文 の知を実装する貢献があることを 示 したい • 本 日 の 文 脈では、eBPFはあくまで「部品」であるが、「部品」とし ての使い 方 がおもしろいので共有したい • Work In Progress -
AIインフラ 分散深層学習基盤 • 「学習」ワークロードには 大 量の 高 性能GPUによる「分散学習」が必要。 • 「分散学習」は勾配計算結果をGPU間で同期するための集合通信が必要。
高 速でロスレスなインターコネクト ネットワークが必要 1. R-Pingmeshͷհ さくらインターネットは 高火力 PHYなどの GPUサービスを提供 RDMA (In fi niband / RoCE) 6 -
分散学習のプロファイル例 計算と通信を交互に繰り返す 7 MLPerf Training GPT-3の事前学習ベンチマーク中に取得したプロファイル Pytorch Pro fi lerの結果をPerfettoで可視化
NT ΠϯλʔίωΫτ௨৴ NT NT NT 1. R-Pingmeshͷհ -
分散学習は、単 一 故障に 非 常に敏感で、全体に波及しやすい(バレル効果) AIインフラの信頼性 [Liu+,SIGCOMM24] 8 ネットワークの問題か?切り分けが難しい ‣
アプリログには集合通信ライブラリ(NCCL)が”error code 12”がみえるが… ‣ 原因は、ホスト側の問題(GPUダウン・ハング・メモリ不 足 ・NCCL誤設定)であ ることも ‣ フラッピングRNIC・スイッチポート / 損傷または経年劣化したファイバ / 誤設定 1. R-Pingmeshͷհ -
バレル効果の例 9 1. R-Pingmeshͷհ <-JV 4*($0..>'JHVSF͔Βసࡌ 単 一 のフラッピング RNIC
単 一 のフラッピング スイッチポート -
既存の診断 方 法 1. ネットワーク構成、ホストとスイッチのログ、異常メトリクスの検査 2. RNIC間のperftest/nccl-testなどのベンチマークツール実 行 େنʢ3/*$͕ඦઍҎ্ͳͲʣʹͳΔͱஅʹ࣌ؒΛཁ͢Δ ϕϯνϚʔΫ࣮ߦͷͨΊʹɺҰ୴δϣϒΛఀࢭ͠ͳ͚ΕͳΒͳ͍
[Liu+,SIGCOMM24] 10 ↪ΑΓਖ਼֬ʹ3/*$୯ҐͰωοτϫʔΫোΛಛఆ͍ͨ͠ ↪ৗ࣌ࢹ͢Δํ๏͕·͍͠ 3P$&ݻ༗ͷΛݕग़͍ͨ͠ 1. R-Pingmeshͷհ ᶃ ᶄ ᶅ -
R-Pingmesh RNIC to RNICのアクティブプルービングによるRoCEネットワーク監視 11 ③ 継続的なプルービン グによるRTT・パケッ トロスの常時計測 ②RoCEパケットに
よるプルービング ① サービストラフィッ クとは独 立 したRNIC 単位のプルービング Cluster Monitoring 1. R-Pingmeshͷհ -
R-Pingmeshのうれしさ ネットワーク障害の対応優先度を評価できる 13 ༏ઌ ରԠ ݕग़ 1 ཁଈ࣌ରԠ ੑೳϝτϦΫεྼԽͷᮢա
$MVTUFS.POJUPSJOH4FSWJDF5SBDJOH ʹΑΔݕग़ 1 ଈ࣌ରԠ͢Δ͔ཁஅ ੑೳϝτϦΫεྼԽͷᮢະຬ $MVTUFS.POJUPSJOH4FSWJDF5SBDJOH ʹΑΔݕग़ 1 αʔϏεӨڹͳ͠ɻҟৗ ػثͷཁɾमཧ $MVTUFS.POJUPSJOHͷΈʹΑΔݕग़ 学習ジョブの学習率や平均 NWスループットなどを監視 1. R-Pingmeshͷհ これはまさにSREのアプローチ -
R-Pingmeshのうれしさ その他 • RNICの組み合わせ数の削減 • フルメッシュプルーピングはToR内でのみに限定し、ToR間は 式(1)に従っ てランダムにプルービングする • Tracerouteの経路データと突き合わせて、単純な投票メカニズムで異常なリ
ンクと異常スイッチの特定する 14 𝑘 શͯͷ5P3·ͨ͗ϦϯΫΛΧόʔ͢ΔͨΊͷ UVQMFͷݸɻ 𝑁 5P3·ͨ͗ύεͷɻ 𝑃 &$.1ʹج͍ͮͯ 𝑘 ݸͷλϓϧ͕ 𝑁 ݸύεΛΧ όʔͰ͖Δ֬ɻ 1. R-Pingmeshͷհ ຊ ε Ω ο ϓ -
2. R-Pingmesh 設計と実装の紹介 1. R-Pingmeshの紹介 2. R-Pingmesh 設計と実装 3.
AIコーディング所感 4. まとめ -
R-Pingmeshのシステム全体像 16 <-JV 4*($0..>'JHVSF31JOHNFTI'SBNFXPSLΛجʹվมͯ͠ܝࡌ 1. Agentが登録処理 2. ControllerからPinglistが届く 3. PinglistからProberがプルー
ブを送信 4. RTTなどを記録しAnalyzerへ 1. eBPFでサービスジョブの通 信の5-tupleを監視 2. 専 用 のPinglistへ追加 2. R-Pingmesh ઃܭͱ࣮ͷհ -
yuuki/rpingmeshの技術スタック 17 • 言 語:Go • RoCE通信:libibverbs • eBPF Kprobe,
cillium/ebpf • 要素間通信:gRPC • Registry: Rqlite • 計装:OpenTelemetry 2. R-Pingmesh ઃܭͱ࣮ͷհ -
Grafanaダッシュボードの例 マトリクス表 示 19 &4/&5.BUSJY1BOFM1MVHJO ্࣮ͷͰ·ͩࢹ Ͱ͖͍ͯͳ͍3/*$ͷ Έ߹Θͤ͋Γ %TU 3/*$T
4SD3/*$T 2. R-Pingmesh ઃܭͱ࣮ͷհ -
• ローカルのRNICごとに、Responder 用 のgoroutineを起動 • ProberはPinglistから対象を選び、あえて逐次的にProbe送信 • (ratelimitパッケージで対象ごとのレート制限) • Responderは他のProbeから並
行 して受信するので並 行 処理が必要 • Queue Pair(ソケットのようなもの)をProberとResponderごとに作成 Cluster Monitoringの実装 RoCE通信の多対多Ping 20 2. R-Pingmesh ઃܭͱ࣮ͷհ -
• GPU Direct RDMAでは、CPUを介さず転送される => カーネルのeBPFは使えないはず? • 接続開始点と終了点についてはカーネルで実 行 されるため、それらをトレース
• modify_qp と destory_qp を kprobe でフックし、5タプル <src_gid, dst_gid, src_qpn, dst_qpn, src_udp_port> を取得する • GID(IPv6アドレス)の取得は構造体の深い読み取りが必要になる Service Tracingの実装 21 TUSVDUJC@RQ TUSVDUJC@EFWJDF TUSVDUJC@QPSU@EBUB<> JC@HJE@UBCMF@FOUSZ VOJPOJC@HJE TUSVDUJC@HJE@UBCMF SBX<>@@V 2. R-Pingmesh ઃܭͱ࣮ͷհ -
Service Tracing実装上の問題点 CO-RE(Compile Once - Run Everywhere)を使いにくい • ビルドインされていないカーネルモジュールはBTFつきでコンパイルされて いないことがある(Nvidia
Mellanoxなど) • BTF有効で再コンパイルし、モジュールを要リロード 22 ˞IUUQTMPSFLFSOFMPSHCQGHJU!CSZDFLBIMFDPN 2. R-Pingmesh ઃܭͱ࣮ͷհ ˞ • BTFがvmlinuxには含まれないので、分割BTFを使う • 分割BTFの最 小 化(bpftool — base_btf gen min_core_bpf)は未サポート -
苦労話 Ib verbs(UD型)はユーザー管理資源が多い 23 2. R-Pingmesh ઃܭͱ࣮ͷհ ߲ #4%ιέοτ JCWFSCT
ଓϞσϧ ιέοτੜˠCJOE ˠ 6%1ଓෆཁʗ5$1DPOOFDU 1SPUFDUJPO%PNBJOʢ1%ʣɾ$PNQMFUJPO2VFVF ʢ$2ʣɾ2VFVF1BJSʢ21ʣΛੜ Ѽઌࢦఆ TFOEUP TPDL CVG MFO TPDLBEES ֤Ѽઌ͝ͱʹ"EESFTT)BOEMFʢ")ʣΛ࡞͠ɺ TFOE@XSBIͱTFOE@XSSFNPUF@RQOͰࢦఆ ૹड৴ ݺͼग़͠ TFOE SFDW ɺTFOEUP SFDWGSPN JCW@QPTU@TFOE ʗJCW@QPTU@SFDW Ͱ8PSL 3FRVFTUΛߘ ϝϞϦཧ ΧʔωϧόοϑΝܦ༝ ϢʔβۭؒόοϑΝʢ.3ʣΛJCW@SFH@NS Ͱొ ྃ௨ ϒϩοΩϯάʗϊϯϒϩοΩϯάʗ TFMFDUʗFQPMM $2ΛϙʔϦϯάʢJCW@QPMM@DR ʣ·ͨΠϕϯτۦ ಈͰ௨ ৴པੑɾॱং 5$1৴པɾॱংอূɺ6%1ඇ อূ 6%ʢ6OSFMJBCMFʣͳͷͰύέοτϩεॱংೖସ ͋ΓɻΞϓϦଆͰ੍ޚ͕ඞཁ -
苦労話 Ib verbsサンプルコードが少ない 24 2. R-Pingmesh ઃܭͱ࣮ͷհ • libibverbsに付属する ud_pingpong.c
(900 行 弱)あたりを読む • 1対1通信でリソース競合などが起きない前提のコード • 多対多通信するものはないか? • NVidiaのnccl(集合通信lib)はあるが、通信種別がUDではなくRC ˞IUUQTHJUIVCDPNMJOVYSENBSENBDPSFCMPCNBTUFSMJCJCWFSCTFYBNQMFTVE@QJOHQPOHD ˞ -
苦労話 Ib verbs難しい問題 25 2. R-Pingmesh ઃܭͱ࣮ͷհ GIDとしてIPv4-mapped Addressで通信するときの問題 •
通常、カーネルがRoCEパケットの冒頭に40バイト(IPv6ヘッダ)挿 入 • IPv4-mappedだと前半20バイト0、後半20バイト分IPv4ヘッダを挿 入 • 仕様には書いてないはず? • カーネルのコードに書いてある… ˞ IUUQTFMJYJSCPPUMJODPNMJOVYWTPVSDFJODMVEFSENBJC@WFSCTI- ˞ struct ib_grh ibgrh; struct { /* The IB spec states that if it's IPv4, the header * is located in the last 20 bytes of the header. */ u8 reserved[20]; struct iphdr roce4grh; }; -
苦労話 ACKパケットのロスト問題 26 2. R-Pingmesh ઃܭͱ࣮ͷհ • 問題: バッファ上書きによるACKパケット化けが発 生
• 並 行 に動く受信呼び出し処理が受信バッファの同じアドレスを参照していた • 解決: 長 い受信バッファをスロット分割 • 受信要求キュー(WR)ごとに独 立 したN x (バッファサイズ)のバッファを 用 意 • 受信要求キューID (WRID)にスロット番号をいれることでトレース可能に ʜ 4MPU 4MPU 4MPU 3FDW#V ff FS 4MPU -
使 用 したAIコーディングツール 基本はCursorを使 用 28 3. AIίʔσΟϯάॴײ Ϟσϧ໊ ͍ํॴײ
$MBVEF4POOFU ॳظ࣮ϦϑΝΫλϦϯάʹ༻ɻ (FNJOJ1SP1SFWJFX ίʔυϕʔε͕େ͖͘ͳ͔ͬͯΒৗ༻ɻίετͱɺੑೳόϥ ϯε͕ྑ͍͕͓͠ΌΓͰઆ໌จ͕͍ɻ 0QFO"*P ෳࡶͳσόοά࣌ʹଞͷϞσϧʹͳ͍ಎΛఏڙͯ͘͠ΕΔɻ ඇৗʹߴֹͳͷͰͧ͜͜ͱ͍͏ͱ͖ʹɻ $MBVEF4POOFU ϦϦʔε͞Ε͔ͯΒৗ༻ɻ ίʔυͷ࣭͕΄͔ΑΓߴ͘ɺ3VMFTͷैੑߴ͍ɻ (FNJOJ'MBTI 'SFFNPEFMͳͷͰ؆୯ͳจॻϝοηʔδੜͳͲ 4FMFDUJOH.PEFMTIUUQTEPDTDVSTPSDPNHVJEFTTFMFDUJOHNPEFMT -
AIコーディングの 手 順 • 論 文 を全 文 読ませて、実装するための設計書を作るよう指 示
した • その際に、使いたい技術スタック(Go 言 語、gRPC、Rqliteなど)は指 示 した • できあがった設計書を読み込ませて、コンポーネント(agent, controller)ご との 大 きな粒度で実装するように指 示 した • それっぽいものができあがるが、低レイヤ部分や複雑なロジックは 大 幅に簡略 化されてしまった • 動かない部分を発 見 し、逐次AIに指 示 してロジックの追加やデバッグを 行 った 29 3. AIίʔσΟϯάॴײ ˞IUUQTHJUIVCDPNZVVLJSQJOHNFTICMPCNBJODVSTPSSVMFTEFTJHONED ˞ -
AIコーディング 良かったところ 実装や問題解決速度は明らかに向上する • スコープが 十 分 小 さいタスクではyuuk1がやるより圧倒的に早く質も 十
分 • Controllerは 一 般的なWebアプリに近いので特に直すことも少なかった • RqliteのようなややニッチなDBでも、ドキュメントを渡せば 十 分 • 複雑なデバッグへ対応できることがある • ログ(zerolog.Trace/.Debug)の追加をしてくれ、そのログo3/o4-mini に渡すとyuuk1になかった原因分析と解決策を提案 30 3. AIίʔσΟϯάॴײ -
AIコーディング 悪かったところ 予想外の省略や決め打ちによるバグの発 生 • 初期実装では、簡略化されていることに気づかず、あとでバグの温床になった • 初期実装でも、タスクを 十 分スコープを
小 さくして指 示 者がコードを認知できるよ うにする訓練が必要そう • 勝 手 にロジックを変えられていたり、簡略されることがある • タスクついでのリファクタはしてくれず、アドホックにコード追加しがち • 単 一 責任原則に従ってリファクタしてくれと 言 えば、 一 定レベルではやってくれる • 意味のないテストコードが量産されることもある • 構造体オブジェクトを作成し、そのフィールド値をチェックするだけ 31 3. AIίʔσΟϯάॴײ -
eBPFのコーディング • 深く構造体にアクセスするロジックは、デバッグ時に実装を勝 手 に省略しがち • GIDの読み取りを諦めてしまう • 初期実装では、関連する構造体定義を渡せばそれっぽくは書いてくれる •
C bpfコードからBpftraceスクリプトへの変換時に、C 言 語の知識が混在してコ ンパイルエラーが多発する • bpftrace(8) Manual Page(4000+ 行 )を渡しても同じ • もっと単純なデバッグ 用 スクリプトなら問題なかった 32 3. AIίʔσΟϯάॴײ -
自 律型ツール(Devin/Codex/OpenHands/…) 実 行 環境の 用 意が難しいソフトウェアには不向き • RDMAやeBPF Kprobeなどはサンドボックス環境で実
行 するのが難しい • Software RoCEなどはあるのでVMでがんばればできるかも • テストがまともに書けないため、AIが試 行 錯誤できない • 結局リバートすることになる 34 3. AIίʔσΟϯάॴײ -
4. まとめ 1. R-Pingmeshの紹介 2. R-Pingmesh 設計と実装 3. AIコーディング所感(4分
時間なければカット) 4. まとめ(1分) -
まとめ • RNIC単位でメッシュ状にPingを打ち合うRoCEネットワーク監視システムR- Pingmeshを実装している • eBPFは実際にサービス使 用 中の通信を検出するために使う • 一
般には、トレーシングの結果を直接に計測値として収集することが多い • AIコーディングは、Webアプリ以外のソフトウェアでも有 用 と感じた。 • 特に論 文 実装では、論 文 を読み込ませ、すぐに実装に移れる • AIが 自 律的に動作検証を 行 えない状況では、Vibe Codingまでは不可 4. ·ͱΊ 36 ʢจςΩετ͋Δ͠ɺ"*͋Δ͠ɺQJOH͛Δ͚ͩ ͔ͩΒ؆୯Ͱʂʁͦ͏ࢥ͍ͬͯͨ࣌ظ͋Γ·ͨ͠ʣ -
今後 • 実装を成熟させ、社内のクラスタ環境に展開したい • 運 用 中だけなく、検証期間中に動かしても有 用 かもしれない •
R-pingmeshから得られたテレメトリーデータをAIOpsに活 用 したい 4. ·ͱΊ 37 -
RTTの計測 方 法 RTT = ネットワークRTT + Prober処理遅延 + Responder処理遅延
42 ProberとResponder間の時 刻ずれを考慮する NW RTT = (⑤-②) - (④-③) Prober Delay = (⑥-①) - (⑤-②) ACK2(④を含む) を送信 HWλΠϜ ελϯϓ Responder Delay = ④-③ 要点:同 一 ホスト上でのみ 時刻を差分計算する 2. R-Pingmesh ઃܭͱ࣮ͷհ