[GUI] Monitor: on a Mac "GPU load" is time busy, not compute in use; VRAM HIT RATE is always a dash

オープン 初心者向け
#5,484 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 4 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
66/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
cpp

調査の方向性

まずGUIのGPU負荷カードとRecent requestsテーブルをたどり、次にissueに記載されたテレメトリフィールドがどのように表示されるかを確認します。GPU負荷のラベルを更新するか説明を追加し、hit_rateがない場合はVRAM HIT RATE列を非表示にするか、その意味を説明します。カードが稼働時間を正確に表し、Macの行に説明のないダッシュが表示されなくなれば完了です。

索引モデルが issue の本文から書いたものです。

説明

Area
[GUI] (the desktop app / web Monitor)

What happened
On a Mac (M5 Max, 40 GPU cores, Strata 0.2.12, engine 0.1.58-metal, Qwen3.8-Flash-Next UD-Q4_K_XL) the Monitor's GPU load card sits at 95-99% for as long as requests keep coming, in both phases:

  • reading a prompt (~1,600 tok/s)
  • decoding (~85 tok/s)

It reads like "all 40 cores are maxed out", but it isn't that. serve/telemetry.py (_Metal, from #2360) shows IOKit's Device Utilization %, which is the share of time the GPU had work scheduled, not the share of its compute in use. ioreg -r -d 1 -c IOAccelerator gives the same value (95) while the engine decodes. Decode on this machine is bound by memory bandwidth, so the ALUs mostly wait for weights, yet the card still says 99%. This is the same definition as NVML's utilization.gpu ("time a kernel was running"), so the number is correct. Only the label promises more than the number means.

The Recent requests table's VRAM HIT RATE column has the same kind of problem. On a Mac it is – on every row, because the Metal engine reports no expert-cache lookups (hit_rate is None in /metrics: unified memory, every expert is mapped). The column takes space and suggests something is missing.

Expected
The card says what it measures, and Mac-only blanks are explained or hidden.

Proposal (small, GUI only)

  1. Rename the card to GPU busy, or keep the name and add a subtitle/tooltip: "share of time the GPU had work scheduled; not how much of its compute is in use". This applies to NVML and amdgpu as well, since they use the same definition.
  2. Hide the VRAM HIT RATE column when no row in the table has a hit_rate (or when the backend is metal), or give it a tooltip: "unified memory: every expert is mapped, so there is no VRAM cache to hit".
  3. Optional: next to the busy %, show a load figure that tells "busy" apart from "saturated" during decode. One option is the achieved weight bandwidth (bytes of active weights read per token × decode tok/s) against the chip's peak. Another is GPU power or frequency once #5016 lands.

Related

  • #2360: added the Mac reader and gpu_note
  • #5457: gpu_note is never shown on a Mac, so temp, Power and PCIe are silent dashes
  • #5016: Apple Silicon GPU temp and power without root

These three cover temp, power and PCIe; this issue covers only the GPU load label and the hit-rate column.

主要言語
C++
スター
11.6k
フォーク
1k
PR マージ指標
30日以内にマージされた PR はありません

環境構築

このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

Niko1221/Strata のほかの issue

Niko1221/Strata の issue をすべて見る

似ている issue

C++ の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。