borch

Workbench

이미지 폴더 하나를 한 번의 호출로

torch.workbench 는 레시피이지 torch 의 이름이 아니다 — 그게 보이도록 한 단계 안쪽에 둔다. 폴더를 건네면 파일 이름에서 라벨을 읽고, 학습하고, 모델이 각 라벨을 얼마나 의심하는지로 점수를 매기고, ONNX 파일을 돌려준다. 이미지는 탭 밖으로 나가지 않는다. 마리모 노트북이 부르는 것이 이것이고, 두 노트북 어느 쪽에서든 직접 부를 수 있다.

내 폴더로 열기 → 먼저 따라 해 보기 →

내 폴더로 따라 하기

다섯 걸음이고, 어느 걸음에도 Python 은 필요 없다. 필요한 건 답을 이미 아는 이미지 폴더 하나다. 기본값인 동결 백본 경로는 수백 장이면 되고, 천 장이면 넉넉하다.

  1. 라벨이 앞에 오도록 파일 이름을 짓는다. 첫 _ 앞이 전부 라벨이다: ok_001.jpg, ng_002.jpg, crack_017.jpg. 폴더를 담은 zip 도 되고, 그때는 폴더 이름이 라벨이다. 이름의 나머지는 아무 상관 없다.
  2. 페이지를 열고 10초쯤 기다린다. Python 과 노트북이 탭으로 내려받아지는 시간이다. 설치할 것도, 만들 계정도 없다.
  3. 폴더를 넣고 실행을 누른다(오른쪽 아래). 이미지는 탭 안에서 읽히고 탭에 남는다 — 아무것도 올라가지 않으며, 브라우저의 네트워크 패널에서 직접 확인할 수 있다.
  4. 검수 표를 위에서부터 읽는다. 내가 준 라벨과 모델이 얼마나 어긋나는지로 정렬돼 있다. 오라벨은 거기 있다: 라벨의 9 % 가 틀린 공개 데이터셋에서 첫 스무 줄의 3분의 2 가량이 오라벨이었다 — 아무 순서로 읽었다면 100 장에 9 장이다.
  5. 모델을 가져간다. 내보내기 버튼이 ONNX 파일을 쓴다. 휴대폰·서버·PC 에서 ONNX Runtime 이 읽는 형식이고, 그 뒤로는 borch 도 브라우저도 필요 없다.

2번부터 시작하기 →

위의 어느 것도 잘 된 실행의 스크린샷이 아니다: 같은 다섯 걸음을 tests/browser/marimo_probe.py 가 매일 밤 실제 GPU 에서 누르고, 그 검사는 연 탭에 GPU 가 없으면 아예 보고를 거부한다.

같은 것을 직접 부르면

코드로 쓰는 편이 낫다면, 위의 다섯 걸음은 네 줄이다. 이 사이트의 두 노트북 어느 쪽에서든, 그리고 어느 Pyodide 에서든 돈다.

import borch_webgpu as torch
s = torch.workbench.setup(files).fit()   # 폴더로 학습
s.suspects()                             # 의심하는 라벨부터
s.onnx()                                 # 모델을 들고 나간다

아래는 전부 그 네 줄에서 무엇을 바꿀 수 있는지, 그리고 검수 순서가 얼마나 믿을 만한지다. API 레퍼런스 →

한 번의 호출

import borch_webgpu as torch          # 또는 borch_cpu — 철자가 같고, 장치가 없다
wb = torch.workbench

s = wb.setup(files, val=0.2)         # 5분의 1을 떼어 두고 학습
print(s.accuracy, s.held_out)        # 그리고 무엇 위에서 잰 값인지
s.suspects()                         # 의심하는 라벨부터
s.onnx()                             # 모델을 들고 나간다

그 앞의 질문 — 어느 백본이냐 — 에는 호출 둘이 답한다. wb.compare(files, budget_mb=60) 는 예산에 드는 후보를 전부 학습해 판을 보여 주고, wb.pick(files, at_least=0.9) 는 기준을 넘는 것 중 가장 작은 것을 돌려준다. 둘 다 가를 수 없는 행을 표시한다: 홀드아웃이 백 개면 4점 차이 나는 두 백본은 같은 결과이고, wb.resolution(held_out) 이 얼마나 벌어져야 진짜 차이인지 말해 준다. 그걸 감추는 판은 데이터가 받쳐 주지 않는 결정을 부른다.

두 문에서 이름이 같다. borch_cpu 에는 nn 도 autograd 도 없어서 동결 백본 경로는 거기서 돌고, 처음부터 학습하는 CNN 과 ONNX 내보내기는 안 된다 — 표면에 "무슨 이름이냐"가 아니라 "무엇을 할 수 있느냐"를 묻고, 다른 경로를 원하는 호출자에게는 어느 문을 열어야 하는지 알려 준다.

무엇을 읽고, 무엇이 돌아오나

검수 순서는 믿을 만한가

위의 숫자는 모두 매일 밤 도는 검사가 붙들고 있다 — 순서는 tests/review_eval.py 와 tests/seg_eval.py, 레시피의 불변식 39개는 tests/test_workbench.py, 실제 탭을 통과하는 전 구간은 tests/browser/marimo_probe.py 가 맡는다. 마지막 것은 그 탭에 GPU 가 없으면 아예 보고를 거부한다.