newch¶
저사양 기기에서도 학습까지 할 수 있는 작은 머신러닝 라이브러리입니다.
- PyTorch와 같은 코드: 텐서, autograd,
nn모듈, 옵티마이저,DataLoader를 PyTorch와 같은 이름과 인수로 씁니다. import 줄만 바꾸면 PyTorch 모델 코드가 그대로 돌아갑니다. - 작은 엔진: 계산은 C11 엔진이 합니다. 네이티브 라이브러리는 수백 KB이고, Python 쪽 필수 의존성은 없습니다 (numpy는 있으면 함께 씁니다).
- 적은 메모리: 한 학습 스텝의 임시 텐서를 한 번에 돌려주는 스텝 아레나, 역전파가 다 쓴 값을 바로 해제하는 구조,
디스크에서 배치 단위로 읽는
FileArray, int8 양자화가 있습니다. - 어디서나: Windows, Linux, macOS와 ARM·RISC-V 싱글보드 컴퓨터에서 돌아갑니다. x86은 AVX2, ARM은 NEON 커널을 씁니다.
설치¶
pip install newch # Windows x86-64는 바로 설치, 그 밖의 플랫폼은 설치 중에 엔진을 컴파일합니다
pip install "newch[numpy]" # numpy 연동까지
소스에서 설치할 때도 시스템 C 컴파일러는 필요 없습니다. pip 패키지 ziglang이 컴파일러 역할을 합니다.
30초 예제¶
import newch as torch
import newch.net as nn
import newch.net.functional as F
torch.manual_seed(0)
with torch.persistent(): # 학습 내내 쓸 데이터는 영구 텐서로
x = torch.randn(256, 2)
y = (x[:, 0] * x[:, 1] > 0).long() # 1, 3사분면이면 1
model = nn.Sequential(nn.Linear(2, 32), nn.ReLU(), nn.Linear(32, 2))
opt = torch.optim.Adam(model.parameters(), lr=0.01)
for step in range(300):
opt.zero_grad()
loss = F.cross_entropy(model(x), y)
loss.backward()
opt.step()
torch.step_end() # newch만의 한 줄: 이 스텝의 임시 텐서를 한 번에 해제
accuracy = (model(x).argmax(1) == y).float().mean().item()
print(f"정확도 {accuracy:.2f}")
torch.step_end() 한 줄을 빼면 PyTorch 코드와 같습니다. 이 줄이 하는 일은 메모리 모델에서 설명합니다.
다음으로 읽을 것¶
| 하고 싶은 일 | 페이지 |
|---|---|
| 처음 써 본다 | 시작하기 |
| 텐서 연산, 인덱싱, numpy 연동 | 텐서 |
step_end(), 영구 텐서, 메모리 측정 |
메모리 모델 |
| CNN, RNN, 트랜스포머 만들기 | 모델 만들기 |
옵티마이저, 스케줄러, fit(), 체크포인트 |
학습 |
| 큰 데이터셋, 디스크 스트리밍 | 데이터 |
| 저장, 양자화, 다른 기기로 옮기기, C API | 배포와 추론 |
| PyTorch 코드를 옮길 때 주의할 점 | PyTorch와 다른 점 |