가이드

실행 모델

TypeNN은 Tensor 그래프와 의미를 소유합니다. TypeShade는 커널 컴파일과 프로그램 실행을 맡습니다.

Tensor 호출은 지연 그래프를 만듭니다

matmul(), add(), relu() 같은 연산은 값을 계산하지 않습니다. 각 연산은 TypeShade 커널 함수, 입력 Tensor, 값으로 넘기는 스칼라, 기울기 규칙을 담은 노드를 기록합니다.

간단한 Tensor 그래프model.ts
const input = device.tensor(values, { shape: [batch, features] });
const logits = input.matmul(weights).add(bias);
const output = logits.relu();

// 여기에서 그래프 결과를 구체화합니다.
const result = await output.data();

data() 호출마다 fuse 범위 하나가 실행됩니다

data()를 호출하면 TypeNN은 Tensor 아래에서 아직 배열이 없는 노드를 모아 노드마다 Resident 배열을 만들고 잎 노드를 업로드합니다. 그다음 노드의 커널 함수를 그래프 순서로 호출하는 본문으로 TypeShade fuse를 호출하고, Tensor를 한 번만 읽어옵니다.

TypeNN

Shape 검사 · 그래프 노드 · 자동 미분 · 커널 함수

TypeShade

fuse 범위 계획 · 디스패치 · Backend 계층 · Runtime 자원

백엔드와 제약

계층선택현재 참고사항
CPU자동 폴백 또는 명시같은 커널 함수를 호출 단위로 차례로 실행합니다. 정확도 확인과 폴백에 적합합니다.
WebGPU자동 또는 명시브라우저가 어댑터를 제공하면 GPU compute를 사용합니다. elementwise 연쇄는 디스패치 하나로 퓨전됩니다.
WebGL2명시같은 커널 함수를 호출 단위로 따로 실행합니다. 실행할 수 없는 호출은 CPU 계층이 맡습니다.

TypeShade Call-layer 설정이 프로세스 전역이어서 JavaScript 컨텍스트마다 TypeNN Device 하나만 활성화할 수 있습니다.

계획은 device.lastReport에서 확인합니다

TypeShade의 퓨전 규칙이 성립하면 컴파일러가 연속한 커널 호출을 디스패치 하나에 담습니다. WebGPU에서 a.add(b).mul(c).relu()는 디스패치 하나로 실행됩니다. 리덕션, 다른 인덱스 읽기, 저장소 버퍼 한도 초과가 있으면 새 디스패치가 시작됩니다. 읽은 뒤 device.lastReport에서 계층, 디스패치, 제출, 호출 그룹을 볼 수 있습니다. CPU 계층의 보고서에는 디스패치가 없고 호출마다 그룹이 하나씩 있습니다.

읽기 실행 방식 보기 ↗