何がわかるのか
ヒートマップで一望
ダンプ全体を 4KB ページ単位のグリッドに分割。非ゼロ率・エントロピー・文字密度で「どこに実データがあるか」を色で瞬時に把握。
領域の重ね合わせ
モデル重み / KV キャッシュ / アクティベーション / ヒープ等の領域を JSON で読み込み、半透明レイヤーとして重ねてどこが大きいか突き止めます。
推定利用量(MiB)
各領域の実データ量を自動集計。どの領域が何 MiB 占めているかをリスト表示します。
丸ごと軽量
依存は D3.js の CDN 1 本のみ。メトリック計算は Web Worker で実行し、大きなダンプでも UI が固まりません。
1980's カセットデッキ調
VU メーター風の緑→黄→赤の LED セグメント、テープカウンタ、ピークホールド表示で、時代錯誤にノスタルジックにメモリを見渡せます。
チュートリアル
対象の LLM / AI プロセスを確認する
backend で稼働中のモデルサーバーや推論プロセスを見つけます。
ps aux | grep -Ei 'llama|ollama|python|torch|token' # メモリ上の領域レイアウトを確認 vmmap <PID>
メモリをダンプする
lldb で対象 PID にアタッチし、必要なアドレス範囲をバイナリとして書き出します。
sudo lldb -p <PID> \ -o "memory read --force --binary --outfile dump.bin 0x100000000 0x140000000" \ -o detach -o quit
ヘルパースクリプトも同梱しています(バイナリ + 領域 JSON を一度に生成)。
sudo ./scripts/acquire_dump.sh -p <PID> -a 0x100000000 -s 0x4000000 \ -o dump.bin -j regions.json
ブラウザで可視化・分析する
viewer.html に dump.bin をアップロード。
メトリックを「エントロピー」に切り替えると、モデル重みのように高エントロピーな領域がくっきり浮かび上がります。
領域 JSON を読み込んで各領域の推定利用量(MiB)を確認しましょう。
解析のヒント
重み ≒ エントロピー大
FP16/BF16 重みはほぼ全バイトが非ゼロで高エントロピー。ヒートマップの「肌色」の帯がモデル重みの可能性大。
KV キャッシュ ≒ 帯状のまだら
ヘッダー長分の使われた領域とゼロ埋めが交互に出る。アクティベーションと同じレイヤー構造の繰り返しが見えます。
文字密度で vocab を探す
トークナイザやプロンプトの文字列は ASCII 比率が高い。文字密度ビューで一発で可視化。
FAQ
SIP や権限が必要ですか?
他プロセスのメモリを読むには sudo と(環境によって)SIP の制限への理解が必要です。ツール自体は取得後のバイナリをブラウザ内だけで処理します。
ブラウザの外へデータは送信されますか?
送信しません。すべての処理はローカルブラウザ内で完結します。ただしダンプにはパスワード・鍵・個人情報が含まれうるため、ファイルは外部にアップロードしないでください。
対応サイズは?
上限 256 MiB までアップロード可能。それ以上の領域は lldb で分割して取得してください。
このページ/CDN がオフラインでも動く?
D3.js を CDN から読み込むため、完全オフラインで使う場合は d3.min.js をローカルに置いて参照を差し替えてください。
GitHub Actions でデプロイ
main への push で .github/workflows/deploy-pages.yml が自動で
GitHub Pages へデプロイします。リポジトリ設定 → Pages → 「デプロイ元」を GitHub Actions に変更するだけです。
詳細は README.md と DEV-MEMO.md を参照。