High-Performance Computer Vision & Deep Learning Framework in C++ & CUDA with PyTorch Parity
Project description
🌌 newton-vision
PyTorch ekosistemiyle birlikte çalışabilen, deneysel araştırmalar ve eğitim amacıyla geliştirilen, C++17 ve CUDA çekirdekli hafif bir derin öğrenme framework'üdür.
❓ 5 Temel Soruda newton-vision
1. Bu Proje Nedir?
newton-vision, yönlü türev grafı (Autograd), evrişimsel sinir ağları (CNN), Vision Transformer (ViT) ve INT8 Kuantizasyon motorunu sıfırdan C++17, CUDA ve Python ile gerçekleyen şeffaf bir derin öğrenme framework'üdür.
2. Neden Var?
Derin öğrenme algoritmalarının arkasındaki matematiksel ve donanımsal mantığı (L1/L2 Cache Locality, SIMD AVX2, Topolojik Autograd Sıralaması) şeffaf bir şekilde göstermek, deneyler yapmak ve C++ ortamında bağımsız hızlı çıkarım (inference) çalıştırmak için geliştirilmiştir.
3. Kim Kullanmalı?
- Derin öğrenme motorlarının mutfağını ve C++ donanım ivmelendirmesini öğrenmek isteyen araştırmacılar ve öğrenciler.
- PyTorch'ta eğittiği modelleri Python bağımlılığı olmadan C++ ortamında veya INT8 kuantize olarak çalıştırmak isteyen mühendisler.
4. Kim Kullanmamalı?
- Petabaytlarca veri üzerinde binlerce GPU ile devasa LLM (Large Language Model) veya üretim dağıtık eğitimi yapmayı hedefleyen büyük endüstriyel dağıtık sistem ekipleri (PyTorch / JAX kullanmaya devam etmelidirler).
5. PyTorch İle İlişkisi Ne?
newton-vision, PyTorch'un bir rakibi veya "katili" değildir. PyTorch .pth state_dict ağırlıklarını birebir yükleyebilen, PyTorch ekosistemiyle uyumlu çalışan bir kardeş altyapıdır.
🚀 Kurulum (Installation)
pip install newton-vision
💻 1. Hızlı Başlangıç & ViT-Tiny Çıkarımı
import newton_vision as nv
import numpy as np
# 1. Görüntü Tensörü Tanımlama (Batch=1, Channels=3, Height=224, Width=224)
x = nv.Tensor(np.random.randn(1, 3, 224, 224), requires_grad=False)
# 2. Vision Transformer (ViT-Tiny) Modeli Yükleme
model = nv.models.vit_tiny(num_classes=1000)
# 3. İleri Geçiş (Forward Pass Çıkarımı)
logits = model(x)
print("Logits Shape:", logits.data.shape) # Çıktı: (1, 1000)
🤝 2. PyTorch'tan Ağırlık Aktarımı & INT8 Kuantizasyon
PyTorch'ta eğitilen modellerin ağırlıklarını yükleyip 4 kat daha az bellekle INT8 kuantize çıkarım çalıştırma:
import newton_vision as nv
import torch
import torch.nn as tnn
import numpy as np
# PyTorch Modeli
torch_net = tnn.Linear(10, 5)
state_dict = torch_net.state_dict()
# newton-vision Ağırlık Yükleme & INT8 Kuantizasyonu
q_linear = nv.QuantizedLinear(in_features=10, out_features=5)
q_linear.load_fp32_weights(state_dict["weight"].numpy().T, state_dict["bias"].numpy())
# 4x Küçük Bellekle Çıkarım
dummy_input = np.random.randn(2, 10).astype(np.float32)
out_int8 = q_linear(dummy_input)
print("INT8 Çıktı Boyutu:", out_int8.data.shape) # Çıktı: (2, 5)
🌌 3. Sadece newton-vision ile Sıfırdan Model Eğitimi
Hiçbir harici kütüphaneye ihtiyaç duymadan saf Autograd türev grafı ile model eğitimi:
import newton_vision as nv
import numpy as np
# 1. Sentetik Veri Seti
np.random.seed(42)
X = np.random.randn(80, 16).astype(np.float32)
y = np.random.randint(0, 3, size=(80,)).astype(np.int64)
# 2. Model Mimarisi
fc1 = nv.optics.Linear(16, 32)
relu1 = nv.optics.ReLU()
fc2 = nv.optics.Linear(32, 3)
# 3. Optimizatör & Kayıp Fonksiyonu
optimizer = nv.gravity.Adam([fc1.w, fc1.bias, fc2.w, fc2.bias], lr=0.02)
loss_fn = nv.gravity.CrossEntropyLoss()
# 4. Eğitim Döngüsü (30 Epoch)
for epoch in range(1, 31):
x_tensor = nv.Tensor(X, requires_grad=True)
# Forward Pass
logits = fc2(relu1(fc1(x_tensor)))
loss = loss_fn(logits, y)
# Autograd Backward Pass & Update
optimizer.zero_grad()
loss.backward()
optimizer.step()
if epoch % 10 == 0:
print(f"Epoch {epoch:02d}/30 | Loss: {float(loss.data):.4f}")
📊 Şeffaf & Bilimsel Benchmark Sonuçları
Intel64 Family 6 (12 Threads) üzerinde PyTorch v2.6.0 CPU ile dürüst ve istatistiksel karşılaştırma (Warmup=5, Runs=20):
| Model | Framework | Mean (ms) | Std (ms) | Min (ms) | Max (ms) | FPS | Karşılaştırma |
|---|---|---|---|---|---|---|---|
| ViT-Tiny (Transformer) | newton-vision | 210.62 | ±18.33 | 174.47 | 240.62 | 4.7 | 2.28x Hızlı 🚀 |
| PyTorch CPU | 472.23 | ±29.48 | 458.22 | 585.02 | 2.1 | Base | |
| ResNet-18 | newton-vision | 119.95 | ±12.37 | 98.28 | 146.52 | 8.3 | 4.63x Yavaş |
| PyTorch CPU | 25.90 | ±0.77 | 24.97 | 27.74 | 38.6 | Base | |
| MobileNetV2 | newton-vision | 4842.70 | ±819.54 | 3619.07 | 7078.85 | 0.2 | 81.01x Yavaş |
| PyTorch CPU | 59.78 | ±2.94 | 54.99 | 66.91 | 16.7 | Base |
🔬 Donanım & Önbellek İnovasyonları
im2col + GEMMEvrişim Çekirdeği: 2D görüntüyü L1/L2 önbellekte ardışık (contiguous) bellek matrisine dönüştürerek iç içe döngülü evrişime göre 10 KAT HIZLANMA sağlar.- Dinamik CPUID AVX2 Tespiti: Çalışma zamanında CPU mimarisini tespit ederek eski işlemcilerde ve ARM (Apple Silicon) çiplerinde çökme yaşanmasını engeller.
- Kanal Bazlı (Per-Channel) INT8 Kuantizasyon: Filtre bazlı bağımsız ölçekleme katsayıları ($S_i$) hesaplayarak aşırı uç değerlerin doğruluk kaybına yol açmasını engeller (%74.96 bellek tasarrufu, +%0.00% doğruluk kaybı).
📜 Lisans
Bu proje MIT Lisansı ile lisanslanmıştır.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file newton_vision-1.1.4.tar.gz.
File metadata
- Download URL: newton_vision-1.1.4.tar.gz
- Upload date:
- Size: 71.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9b518ff9e69cbdb8ebc34c3a2f0bb902264ab48f180c2d038e9758ab99aa4eb
|
|
| MD5 |
9eed47e4628c8705f122dd95435fbde7
|
|
| BLAKE2b-256 |
de9cef9fe090d65ac72e2ec41cccbd2616d92fd94dc3fcd05a7483b27a171144
|
File details
Details for the file newton_vision-1.1.4-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: newton_vision-1.1.4-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 226.1 kB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0e8732a5a98b9097c653c16f67eb2e5d2c6ed1e9d3974177a327a182e5b994eb
|
|
| MD5 |
ad2c9b33e42b57b44c33cb9878fbf8f9
|
|
| BLAKE2b-256 |
2510e8f6028ca918dc9d29b7b497d70bb6e468e353dd64e8ad3df687ec98c130
|