SDK Katmanları
SIDRA Software Development Kit — yazılımcının arayüzü.
Önkoşul
Bu bölümde öğreneceklerin
- SIDRA SDK'nın 3 katmanını (low-level C, high-level C++, Python) say
- API tasarım prensiplerini ve örneklerini oku
- PyTorch ve TensorFlow plugin yapısını özetle
- Versiyonlama, ABI stabilitesi ve dokumentasyon stratejilerini söyle
- Geliştirici ekosistemini (sample apps, demo) tanı
Açılış: Driver Direkt Kullanmak Cefakar
Driver IOCTL’lar düşük seviye C, hata-yaratan. SDK bunları sarar:
- Low-level C API: her IOCTL için fonksiyon.
- High-level C++ API: Model, Tensor, Inference sınıfları.
- Python API:
import sidraile her şey.
Geliştirici %95 oranında Python kullanır. SDK altta iş yapar.
Sezgi: 3 Katman Soyutlama
[App: PyTorch model + birkaç çağrı]
↓
[Python sidra package]
↓
[C++ libsidra (SDK)]
↓
[C aether-driver (kernel)]
↓
[Donanım]Her katman bir önceki için soyutlama. Geliştirici en üstte yaşar; içerideki karmaşıklık görünmez.
Formalizm: SDK API Tasarımı
Python API (en yaygın):
import sidra
import numpy as np
# Çipi aç
chip = sidra.Chip(device_id=0)
print(f"SIDRA {chip.version}, {chip.memristor_count}M memristors")
# Model yükle (PyTorch state_dict'ten)
import torch
model_pt = torch.load("my_model.pt")
model = sidra.Model.from_pytorch(model_pt)
chip.load_model(model)
# Inference
input_tensor = np.random.randn(1, 784).astype(np.float32)
output = chip.infer(input_tensor)
print(output.shape, output) # (1, 10) MNIST sınıfC++ API (performans kritik için):
#include <sidra/sidra.h>
int main() {
sidra::Chip chip(0);
sidra::Model model = sidra::Model::load("model.bin");
chip.load_model(model);
std::vector<float> input(784);
auto output = chip.infer(input);
return 0;
}C low-level (driver doğrudan):
int fd = open("/dev/sidra0", O_RDWR);
struct inference_req req = {.input = ..., .output = ...};
ioctl(fd, SIDRA_IOCTL_INFER, &req); Tensor sınıfı:
class Tensor {
DType dtype; // FP32, INT8, INT4
Shape shape; // dimension'lar
DeviceMem data; // SIDRA bellekte
Tensor reshape(Shape new_shape);
Tensor quantize(DType target);
Tensor copy_to_host();
};GPU’larda CUDA tensor benzeri. Veri GPU/SIDRA bellekte; host’a kopyalama açıkça istenir.
Model sınıfı:
class Model {
std::vector<Layer> layers;
Quantization q;
static Model from_pytorch(const PyTorchModel&);
static Model from_onnx(const std::string& path);
void quantize(QuantConfig cfg); // FP32 → INT8
void compile_for(Chip& chip); // crossbar mapping
};ONNX (Open Neural Network Exchange) standart format, framework-agnostic.
Inference workflow:
chip = sidra.Chip(0)
# Bir kerelik
model = sidra.Model.from_onnx("yolov8.onnx")
model.quantize(sidra.INT8)
model.compile_for(chip)
chip.load_model(model)
# Tekrar tekrar
for image in stream:
output = chip.infer(image)
process(output) ABI stabilite:
C++ ABI değişebilir → her SDK upgrade’da app rebuild gerekebilir. Çözüm:
- C ABI sabit (libsidra_c.so).
- C++ wrapper inline (header’da).
- Python pure-Python wrapper.
Strateji: C ABI minimal + Python rich. C++ orta yol.
Versiyonlama:
libsidra.so.1.0.0. SemVer:
- Major (1.x): breaking changes.
- Minor (1.1): new features, backward-compatible.
- Patch (1.0.1): bug fixes.
App’ler libsidra.so.1 link → 1.x güncellemeleri otomatik kabul.
Dokümantasyon:
- API reference (Doxygen + Sphinx).
- Tutorial notebooks (Jupyter).
- Sample apps GitHub’da.
- Stack Overflow tag.
PyTorch / TensorFlow plugin:
# PyTorch
import torch
import sidra
# SIDRA backend register
torch.backends.sidra.enabled = True
# Normal PyTorch model SIDRA'da çalışır
model = torch.load("model.pt").to("sidra:0")
output = model(input) # transparent SIDRA inferenceNVIDIA CUDA backend gibi. Custom backend register protokolü PyTorch 2.0+.
TensorFlow XLA:
XLA (Accelerated Linear Algebra) backend. tf.config.set_visible_devices(["sidra:0"]). Sınırlı kapsamda, geliştirme aşamasında.
SDK boyutu:
- libsidra.so: ~5 MB.
- Python sidra package: ~10 MB (compiled extension dahil).
- Headers: ~500 KB.
App boyutuna minimal etki.
Sample apps:
sidra-examples/ repo:
mnist_classifier.py(101 satır).imagenet_resnet50.py.bert_qa.py.speech_whisper.py.gpt2_chat.py.
Geliştiricinin başlangıç noktası.
Deney: 10 Satırda MNIST Inference
import sidra
import torch
import torchvision
# Model yükle (PyTorch standart)
model = torchvision.models.simple_mlp()
model.load_state_dict(torch.load("mnist_mlp.pth"))
# SIDRA'ya geçir
chip = sidra.Chip(0)
sidra_model = sidra.Model.from_pytorch(model).quantize(sidra.INT8)
chip.load_model(sidra_model)
# Inference
import torchvision.transforms as T
mnist_test = torchvision.datasets.MNIST("/data", train=False, transform=T.ToTensor())
img, label = mnist_test[0]
prediction = chip.infer(img.numpy().reshape(1, 784))
print(f"Predicted: {prediction.argmax()}, True: {label}") # 7, 710 satırlık kod. SDK altta:
- PyTorch state_dict’i parse.
- Model graph oluştur.
- INT8 quantize.
- Crossbar mapping.
- ISPP ile programla.
- Driver IOCTL ile inference.
Süre:
- Kod yazma + setup: 5 dakika.
- Model yükleme (640 ms ISPP): 1 saniye.
- Inference: 25 µs/MNIST.
Kısa Sınav
Laboratuvar Görevi
SIDRA SDK kullanıcı eğitimi materyalleri planı.
Hedef kitleler:
- Akademik araştırmacı (Python, PyTorch).
- Üretim mühendisi (C++, performance).
- Embedded developer (C, kernel).
Kaynaklar (önerilen):
- Quick start (15 dk): Python + MNIST.
- Tutorial notebook serisi (10 adım).
- C++ API rehberi.
- Performance optimization rehberi.
- Sample apps GitHub.
Topluluk:
- Discord/Slack soru-cevap.
- Aylık webinar.
- Türkiye’de yıllık konferans.
Özet Kart
- SDK 3 katman: C low-level, C++ high-level, Python.
- Python en kolay: 10 satırla MNIST.
- ONNX import: framework-agnostic.
- PyTorch backend: model.to(‘sidra:0’).
- ABI stabilite: C sabit, C++ wrapped.
- SDK boyutu: ~10 MB.
- Sample apps: GitHub repo.
Vizyon: SIDRA Geliştirici Ekosistemi
- Y1: Python + PyTorch destek.
- Y3: TensorFlow + JAX backend.
- Y10: Mobil SDK (Android/iOS).
- Y100: SIDRA-native AI framework.
- Y1000: Quantum-AI hibrit SDK.
Türkiye için: SDK Türkçe doküman, Türk üniversitelerde dersler, akademik camiada kullanım yaygınlaşma.
Daha İleri
- Bir sonraki bölüm: 6.6 — PyTorch Backend Yazmak
- Önceki: 6.4 — ISPP Algoritması
- PyTorch backend: pytorch.org “PrivateUse1 backend”.
- ONNX: onnx.ai dokümantasyon.
- API tasarım: Bloch, Effective Java (general API design).