Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Changelog

## 1.0.0 - 2026-05-15

Bare-metal 1.0 narrows `gpu-usage-audit` to one clear workflow: inspect the
current NVIDIA Linux host, collect NVML telemetry into SQLite, and render a
retrospective active / idle-held / truly-idle report.

- Reset the product surface to a single local bare-metal host.
- Added `gua doctor` for read-only local NVIDIA/NVML/database readiness checks.
- Made `nvidia-ml-py` a default dependency while keeping the `nvml` extra as a
compatibility alias.
- Defaulted `daemon` and `report` to `/tmp/gua.db`.
- Made `daemon` refuse an existing database and `report` refuse a missing one.
- Kept the schema at v1: `host`, `gpu_sample`, `proc_sample`.
- Removed post-1.0 auto-runtime planning artifacts and runtime-detection code.
- Preserved `demo` for GPU-less output checks with fake telemetry.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Jupyter notebook open with an 8 GB tensor on the GPU and went to
lunch — `nvidia-smi` will show 1% utilization, but the card is
*unusable* by anyone else. This tool measures that.

> **Status:** main tracks the bare-metal 1.0 scope.
> **Status:** bare-metal 1.0 release candidate.
> `gua doctor` checks only the current machine. `daemon` records NVML
> telemetry from the current NVIDIA host, `report` reads the resulting
> SQLite database, and `demo` runs anywhere with fake telemetry. The Go
Expand Down Expand Up @@ -61,8 +61,8 @@ its `gua` / `gpu-usage-audit` commands.
GitHub Release assets are also available for manual download:

```sh
BASE="https://github.com/AI-Ocean/gpu-usage-audit/releases/download/v0.4.1"
WHEEL="gpu_usage_audit-0.4.1-py3-none-any.whl"
BASE="https://github.com/AI-Ocean/gpu-usage-audit/releases/download/v1.0.0"
WHEEL="gpu_usage_audit-1.0.0-py3-none-any.whl"

curl -fsSLO "$BASE/$WHEEL"
curl -fsSLO "$BASE/SHA256SUMS"
Expand Down
28 changes: 14 additions & 14 deletions projects/bare-metal-1.0/handoff.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,9 +31,9 @@
- PR B: implemented in PR #10.
- Post-1.0 cleanup: 완료. auto-runtime 문서와 `RuntimePlan`/env detection
잔재를 제거했다.
- PR C: 구현 대부분은 README/CLI에 반영된 것으로 보이나 계획서에는 아직 완료
상태가 없다.
- PR D: 대기. 현재 버전은 `0.4.1`이며 1.0 release bump는 아직 하지 않았다.
- PR C: implemented in release prep.
- PR D: 진행 중. 현재 버전은 `1.0.0`으로 bump했고, local build/wheel smoke는
통과했다. NVIDIA host acceptance와 tag publish가 남았다.

마지막 로컬 검증은 모두 통과했다.

Expand All @@ -42,13 +42,14 @@ uv run ruff check
uv run ruff format --check
uv run mypy
uv run pytest
uv build --out-dir /tmp/gua-dist-prune-20260515
bash scripts/smoke-dist-wheel.sh /tmp/gua-dist-prune-20260515/gpu_usage_audit-0.4.1-py3-none-any.whl
uv build --out-dir /tmp/gua-dist-1.0.0-prep
bash scripts/smoke-dist-wheel.sh /tmp/gua-dist-1.0.0-prep/gpu_usage_audit-1.0.0-py3-none-any.whl
env GITHUB_REF_NAME=v1.0.0 uv run python scripts/check-tag-version.py
```

cleanup 후 결과는 `pytest` 107 passed, `mypy` 25 source files, `ruff format`
26 files 기준이다. `/tmp/gua-dist-prune-20260515`로 build와 wheel smoke도
통과했다.
26 files 기준이다. release prep에서는 `/tmp/gua-dist-1.0.0-prep`로 build와
wheel smoke를 확인한다.

## 주의할 점

Expand All @@ -61,18 +62,16 @@ cleanup 후 결과는 `pytest` 107 passed, `mypy` 25 source files, `ruff format`
container/k8s runtime 감지를 하지 않는다.
- PR C를 닫기 전에 문서만 보고 끝내지 말고, 기존 DB 존재/부재 error UX가 README와
CLI 출력에서 서로 같은 메시지를 주는지 확인한다.
- PR D에서 tag를 만들기 전에는 `scripts/check-tag-version.py`가 tag와
`pyproject.toml` version을 강하게 비교한다.
- PR D에서 tag를 만들기 전에는 `env GITHUB_REF_NAME=v1.0.0 uv run python
scripts/check-tag-version.py`가 통과해야 한다.

## 다음 세션 추천 순서

1. `git status --short`로 사용자 변경 여부를 먼저 확인한다.
2. `projects/bare-metal-1.0/status.ko.md`를 읽고 마지막 검증 이후 차이를 확인한다.
3. PR C deliverable을 README/CLI와 대조한다.
4. PR C가 충분하면 `plan.ko.md`와 `status.ko.md`를 갱신한다.
5. PR D로 넘어가면 version bump, README status 문구, release notes 정책을 먼저
확정한다.
6. 릴리스 전에는 아래를 다시 실행한다.
3. NVIDIA host acceptance를 실행한다.
4. release prep PR을 main에 머지한다.
5. `v1.0.0` tag를 push하기 전 아래를 다시 실행한다.

```sh
uv run ruff check
Expand All @@ -81,4 +80,5 @@ uv run mypy
uv run pytest
uv build
bash scripts/smoke-dist-wheel.sh
env GITHUB_REF_NAME=v1.0.0 uv run python scripts/check-tag-version.py
```
14 changes: 9 additions & 5 deletions projects/bare-metal-1.0/plan.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,8 @@ Working state:

### PR C: Bare Metal Runbook Hardening

Status: implemented in release prep.

Deliver:

- `/tmp/gua.db` 기본 flow 문서 강화.
Expand All @@ -280,13 +282,15 @@ Working state:

### PR D: 1.0 Release Prep

Status: in progress.

Deliver:

- version bump.
- README status 갱신.
- changelog/release notes.
- build + wheel smoke.
- GitHub Release + PyPI publish.
- [x] version bump.
- [x] README status 갱신.
- [x] changelog/release notes.
- [x] build + wheel smoke.
- [ ] GitHub Release + PyPI publish.

Working state:

Expand Down
40 changes: 20 additions & 20 deletions projects/bare-metal-1.0/status.ko.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
## 요약

Bare Metal 1.0은 단일 NVIDIA 베어메탈 호스트만 대상으로 하는 방향으로 정리되어
있다. PR A/B 범위는 구현 완료 상태이고, 이번 cleanup에서 1.0 이후 확장을 위한
auto-runtime 문서와 코드 잔재를 제거했다. 다음으로는 PR C runbook hardening을
닫을지 확인한 뒤 PR D release prep으로 넘어가면 된다.
있다. PR A/B/C와 post-1.0 cleanup은 완료됐고, 현재는 PR D release prep을
진행 중이다.

cleanup 시작 시 워크트리는 깨끗했다.

Expand All @@ -19,37 +18,43 @@ cleanup 시작 시 워크트리는 깨끗했다.
| `gua doctor` | 완료 | 현재 머신의 `/dev/nvidia*`, `nvidia-smi -L`, NVML, DB path만 진단. |
| Packaging UX | 완료 | `nvidia-ml-py`가 기본 dependency이고 `nvml` extra는 빈 compatibility alias. |
| `daemon`/`report` DB UX | 구현됨 | 기본 DB는 `/tmp/gua.db`; daemon은 기존 DB를 거부하고 report는 없는 DB를 거부. |
| README bare-metal 문서 | 대부분 완료 | 2-shell flow, systemd 예시, 운영 notes가 들어가 있음. |
| README bare-metal 문서 | 완료 | 2-shell flow, systemd 예시, 운영 notes가 들어가 있음. |
| Post-1.0 cleanup | 완료 | auto-runtime proposal/project 문서, k8s/docker env 감지, `RuntimePlan` 잔재 제거. |
| PR C closure | 미확정 | 계획서에는 아직 완료 표시가 없다. README와 CLI UX를 기준으로 닫을지 최종 확인 필요. |
| PR D release prep | 대기 | 현재 package version은 `0.4.1`; 1.0 릴리스 버전 bump와 릴리스 노트 정리가 남음. |
| PR C closure | 완료 | runbook과 기존 DB 존재/부재 UX가 README/CLI에 반영됨. |
| PR D release prep | 진행 중 | package version은 `1.0.0`; local build/wheel smoke 완료, tag publish가 남음. |
| NVIDIA host acceptance | 미검증 | 현재 로컬 머신에는 NVIDIA device/driver가 없어 실제 host 수집 loop는 확인하지 못함. |

## 검증 결과

2026-05-15 cleanup 후 로컬 검증:
2026-05-15 release prep 로컬 검증:

```sh
git status --short
uv run ruff check
uv run ruff format --check
uv run mypy
uv run pytest
uv build --out-dir /tmp/gua-dist-prune-20260515
bash scripts/smoke-dist-wheel.sh /tmp/gua-dist-prune-20260515/gpu_usage_audit-0.4.1-py3-none-any.whl
env GITHUB_REF_NAME=v0.4.1 uv run python scripts/check-tag-version.py
uv build --out-dir /tmp/gua-dist-1.0.0-prep
bash scripts/smoke-dist-wheel.sh /tmp/gua-dist-1.0.0-prep/gpu_usage_audit-1.0.0-py3-none-any.whl
env GITHUB_REF_NAME=v1.0.0 uv run python scripts/check-tag-version.py
```

결과:

- `git status --short`: cleanup 변경분만 존재.
- `git status --short`: release prep 변경분만 존재.
- `ruff check`: pass.
- `ruff format --check`: 26 files already formatted.
- `mypy`: no issues in 25 source files.
- `pytest`: 107 passed.
- `uv build`: sdist/wheel build 성공.
- wheel smoke: 성공.
- tag-version check: `v0.4.1`과 `pyproject.toml` version 일치.
- tag-version check: `v1.0.0`과 `pyproject.toml` version 일치.

2026-05-15 release prep 변경:

- `pyproject.toml` / `uv.lock` package version을 `1.0.0`으로 갱신.
- README status와 GitHub Release asset 예시를 `v1.0.0` 기준으로 갱신.
- `CHANGELOG.md`에 1.0.0 release notes 추가.

## 이번 cleanup 변경

Expand Down Expand Up @@ -79,14 +84,9 @@ NVIDIA 베어메탈 호스트에서 다시 실행해야 한다.

## 다음 작업

1. PR C를 닫기 전에 README의 runbook 내용이 `plan.ko.md`의 PR C deliverable을
모두 만족하는지 확인한다.
2. PR C가 이미 충분하면 `plan.ko.md`에 `Status: implemented`와 체크박스를 반영한다.
3. PR D에서 release target version을 확정한다. 1.0 GA라면 `pyproject.toml`을
`1.0.0`으로 올리고 README release asset 예시도 맞춘다.
4. 필요하면 `CHANGELOG.md` 또는 수동 release notes를 추가한다. 현재 GitHub Actions는
tag push 때 git log 기반 release notes를 자동 생성한다.
5. NVIDIA host에서 acceptance command를 실행한다.
1. NVIDIA host에서 acceptance command를 실행한다.
2. release prep PR을 main에 머지한다.
3. `v1.0.0` tag를 push해서 GitHub Release와 PyPI publish workflow를 실행한다.

```sh
uv tool install gpu-usage-audit
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "gpu-usage-audit"
version = "0.4.1"
version = "1.0.0"
description = "Single-host daemon that surfaces 'idle-held' NVIDIA GPU memory — the embarrassing category conventional dashboards miss."
readme = "README.md"
license = { file = "LICENSE" }
Expand Down
2 changes: 1 addition & 1 deletion uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading