Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Web3:バリデーターのクラウド移設、運用自動化、コスト最適化への取り組み

 Web3:バリデーターのクラウド移設、運用自動化、コスト最適化への取り組み

GREE Tech Conference 2024で発表された資料です。
https://techcon.gree.jp/2024/session/TrackC-3

gree_tech

October 25, 2024
Tweet

Video

More Decks by gree_tech

Other Decks in Technology

Transcript

  1. バリデーターの課題 • 固定費が高い。 ◦ インフラ費用が高い。 ▪ ハイスペックなサーバーが必要。 ▪ ネットワークのトラフィックが多い。 •

    運用がスケールしない。 ◦ チェーンが増えた分だけ作業が増える。 ▪ ブロックチェーンの運用はチェーンが増えると手順書が増える。 • 例:MySQLの運用はサーバーが増えても手順書は増えない。 ▪ バリデーターのためのマネージドサービスがない。 ◦ 運営からの連絡がチャット(DiscordやTelegram) ▪ チェーンが増えただけチャットも増える。 ▪ 専門用語が多く属人化しやすい。 ▪ Discord・Telegramは会社でアカウントが管理できない。(IdPがコントロールできない。) ◦ 深夜対応が多い。 ▪ 早く対応しないとリスクが増える。 6
  2. バリデーターのインフラ費用 • ネットワークのegressの費用はAWSやGoogle Cloudで約半分。 ◦ Google CloudならStandard Tierがおすすめ。 ◦ 費用は公式の電卓で計算。

    9 egressの種類 コスト 40TBの費用(例) 20TBの費用(例) AWS USD 0.089/GB (月40TB) $3,901 $2,078 GCP Premium Tier USD 0.085/GB (月40TB) $6,553 $3,481 GCP Standard Tier USD 0.075/GB (月40TB) $3,408 $1,872 Linode インスタンスあたり 20TBまで無料 0 (2インスタンス) 0
  3. バリデーターの移設 • サーバーのコスト最適化のため移設が必要。 ◦ AWSからGoogle Cloudに移設。 • 移設の注意点 ◦ 移設時のダウンタイムを減らす。

    ▪ TBサイズのデータのコピーに数時間かかる。 ◦ サーバーの構築を特定のディレクトリまとめる。 ▪ /usr/bin以下や/homeの下にファイルを置かない。 ▪ 注意:ブロックチェーンのアプリはシングルバイナリで動くのでパッケージのイン ストールはいらない。 ◦ rsyncで移設する。 ▪ 複数回rsyncを実行して、最後にサーバーを止めてからrsync。 ▪ 注意:levelDBはレプリケーションのようなものをサポートしてない。 10
  4. 運用の課題:運用がスケールしない。 • チェーンが増えた分だけ作業が増える。 ◦ MySQLの運用はサーバーが増えても手順書は増えない。 ◦ ブロックチェーンの運用はチェーンが増えると手順書が増える。 ◦ バリデーターのためのマネージドサービスがない。 •

    運営からの連絡がチャット(DiscordやTelegram)。 ◦ チェーンが増えただけチャットも増える。 ▪ サーバーは運営が管理していて、こちらではコントロールできない。 ◦ 専門用語が多く属人化しやすい。 • 深夜対応が多い。 ◦ 早く対応しないとリスクが増える。 11
  5. 運用の課題:運用がスケールしない。 • チェーンが増えた分だけ作業が増える。 ◦ チャットの確認が大変。チャネルが多すぎて迷子になる。 ◦ ブロックチェーンの運用はチェーンが増えると手順書が増える。 ◦ バリデーターのためのマネージドサービスがない。 •

    運営からの連絡がチャット(DiscordやTelegram)。 ◦ チェーンが増えただけチャットも増える。 ▪ サーバーは運営が管理していて、こちらではコントロールできない。 ◦ 専門用語が多く属人化しやすい。 • 深夜対応が多い ◦ 早く対応しないとリスクが増える。 12 • チャットの分析基盤を作る。 • チャットの確認、要約、課題抽出の自動化 ◦ チャットの収集 ◦ LLMによる分析
  6. アップデートのメッセージ中の多様なバージョン表記 16 • 通常のメッセージにあるバージョン ◦ New version of Bor v1.4.0

    has been released for Polygon Mainnet. • アップデートのリンクが渡されるケース ◦ 新しいバージョンがリリースされたことご連絡いたします。 https://github.com/oasysgames/oasys-validator/releases/tag/v1.1.0 • バージョンがハイフン付きで書かれている場合 ◦ Instructions to upgrade: https://forum.polygon.technology/t/bor-v1-3-6-release/19554
  7. アップデートの自動化 • 課題 ◦ チャットの集約だけでは作業自体は減らない。 ◦ 休日対応が辛い。 ◦ 運営から不定形なフォーマットでアップデートの連絡がくる。 ◦

    LLMで任意のコマンドを実行させるのはNG。 ◦ 正規表現で重要なところを抜き出すのが困難。 • 解決方法 ◦ LLMでバージョンを抜き出す。 ▪ Structured Outputを使う。 • JSON SchemaでLLMの出力の型を定義。 ◦ 定型のタスクを自動実行する。 17
  8. アップデートの自動化:Structured Output • LLMでバージョンを抜き出すためのJSON Schema 18 { "properties":{ "hash":{ "description":"A

    sha1 that system outputs.", "type":"string" } }, "required":["hash"], "type":"object" } • LLMがSchema通りの出力をしてくれる。 ◦ 特別なパーサーがいらない。
  9. アップデートの自動化 • 課題 ◦ 一つのチャットに複数のプログラムのアップデート情報がながれる。 ◦ LLMが誤認識をする。 ▪ アップデートするプログラム取り違える。 ◦

    自分自身の出力に反応する。 ▪ アップデート完了メッセージで、またアップデートしようとする。 ◦ 表記揺れがある。 ▪ バージョン番号の表記にぶれがある。v2.1といったり2.1といったり。 ◦ プロンプトインジェクション ▪ バージョンの代わりになにかコマンドを埋め込まれるとか。 19
  10. アップデートの自動化 • 課題 ◦ 一つのチャットに複数のプログラムのアップデート情報がながれる。 ◦ LLMが誤認識をする。 ◦ 自分自身の出力に反応する。 ◦

    表記揺れがある。 ◦ プロンプトインジェクション • 解決方法 ◦ テストをちゃんと書く。 ◦ フォーマットバリデータを書く。 ◦ プロンプトを改善する。 ◦ デグレが起きてないことを確認。 ◦ モデルを変える。(GPT-4からGPT-4oにする。) 20
  11. プロンプトの例:違うプログラムのアップデート 21 タスク アップデートするOasysのverifierのバージョンを抜き出す。 入力 You are a validator of

    oasys(blockchain). When a new verifier(oasvlfy, verse-verifier) is released, get the version of the released verifier. User message is as follows: --- 新しいバージョンがリリースされたことご連絡いたします。 https://github.com/oasysgames/oasys-validator/releases/tag/v1.1.0 出力 v1.1.0
  12. プロンプトの例:違うプログラムのアップデート:修正 22 タスク アップデートするOasysのverifierのバージョンを抜き出す。 入力 You are a validator of

    oasys(blockchain). The server has verifier(oasvlfy, verse-verifier) and validator(oasys-validator) programs. When a new verifier(oasvlfy, verse-verifier) is released, get the version of the released verifier. Don't return the version of validator. User message is as follows: --- 新しいバージョンがリリースされたことご連絡いたします。 https://github.com/oasysgames/oasys-validator/releases/tag/v1.1.0 出力 なにも出力しない。 対象のプログラムと対象でないプログラムを明記する。
  13. プロンプトの例:表記ブレ:間違えるケース 23 タスク アップデートするOasysのvalidatorのバージョンを抜き出す。 入力 You are a validator of

    oasys(blockchain). The server has verifier(oasvlfy, verse-verifier) and validator(oasys-validator) programs. When a new validator(oasys-validator) is released, get the version of the released validator. User message is as follows: --- 新しいバージョンがリリースされたことご連絡いたします。 https://github.com/oasysgames/oasys-validator/releases/tag/v1.1.0 出力 1.1.0
  14. プロンプトの例:表記ブレ:修正例 24 タスク アップデートするOasysのvalidatorのバージョンを抜き出す。 入力 You are a validator of

    oasys(blockchain). The server has verifier(oasvlfy, verse-verifier) and validator(oasys-validator) programs. When a new validator(oasys-validator) is released, get the version of the released validator. The format is like vx.x.x. The prefix is "v". User message is as follows: --- 新しいバージョンがリリースされたことご連絡いたします。 https://github.com/oasysgames/oasys-validator/releases/tag/v1.1.0 出力 v1.1.0 プロンプトの改善によるバージョンの表記ブレの修正例になっている。
  15. プロンプトの例:アップデートメッセージに反応 25 タスク アップデートするOasysのvalidatorのバージョンを抜き出す。 入力 You are a validator of

    oasys(blockchain). The server has verifier(oasvlfy, verse-verifier) and validator(oasys-validator) programs. When a new validator(oasys-validator) is released, get the version of the released validator. User message is as follows: --- [Validator Node] Updated Oasys Validator of oasys to v1.2.4 出力 v1.2.4 アップデートしたというメッセージ(アップデート完了)で アップデートしたいわけではない。
  16. プロンプトの例:アップデートメッセージ:修正例 26 タスク アップデートするOasysのvalidatorのバージョンを抜き出す。 入力 You are a validator of

    oasys(blockchain). The server has verifier(oasvlfy, verse-verifier) and validator(oasys-validator) programs. When a new validator(oasys-validator) is released, get the version of the released validator. Don't call the function by messages with prefixed with '[Validator Node]', which are own messages. User message is as follows: --- [Validator Node] Updated Oasys Validator of oasys to v1.2.4 出力 なにも出力しない。 回答してはいけないケースをプロンプトに書く。