CPU-first NumPy deep learning toolkit for tiny language-model workflows
Project description
znap
A CPU-first deep learning library built on NumPy for learning, prototyping, and tiny language-model workflows.
Why znap
- Minimal and readable codebase for understanding core ML building blocks
- End-to-end NLP workflow: tokenization, training, generation, fine-tuning, benchmarking
- Designed to run on CPU laptops for experiments and education
- Includes a simple autograd engine, neural layers, optimizers, and training utilities
Features
- Core framework:
Tensor+ reverse-mode autograd- Layers:
Linear, activations, normalization, dropout, embeddings - Optimizers:
SGD,Adam,AdamW,RMSprop,Adagrad - Losses:
CrossEntropy,MSE, BCE variants, etc.
- Text/tokenization:
whitespace,bpe, andbyteleveltokenizers- Data loaders for
.txt,.jsonl,.json,.csv,.tsv(+.gzvariants)
- Modeling and CLI:
train-mlm,train-causal,train-transformertrain-vlm(tiny vision-language model from image-text JSONL)finetune(full fine-tune)train-lora(LoRA adapters for causal model)generate,chat,generate-vlm,chat-vlm,benchmark,import-hf,make-dataset
Installation
pip install znap
For local development:
pip install -e .[dev]
CLI check:
znap -h
Quickstart
1) Create a toy dataset
python -m znap.cli make-dataset \
--output generated_datasets \
--name znap_chat_train \
--samples 2000
2) Train a tiny causal model
python -m znap.cli train-causal \
--data generated_datasets/znap_chat_train.txt \
--output runs/my_causal \
--tokenizer bpe \
--context-size 32 \
--d-model 64 \
--hidden-size 128 \
--batch-size 64 \
--epochs 5
3) Generate text
python -m znap.cli generate \
--model-dir runs/my_causal \
--prompt "hello, who are you?" \
--max-new-tokens 80
4) Chat (interactive)
python -m znap.cli chat --model-dir runs/my_causal --max-new-tokens 80
5) Fine-tune
python -m znap.cli finetune \
--base-model-dir runs/my_causal \
--data generated_datasets/znap_chat_train.jsonl \
--output runs/my_causal_ft \
--epochs 3 \
--batch-size 32
Transformer Training
python -m znap.cli train-transformer \
--data generated_datasets/znap_chat_train.txt \
--output runs/tf_phase2 \
--tokenizer bytelevel \
--preset tiny \
--epochs 5 \
--batch-size 16
LoRA and Quantized Inference
LoRA fine-tuning:
python -m znap.cli train-lora \
--base-model-dir runs/my_causal \
--data generated_datasets/znap_chat_train.jsonl \
--output runs/my_lora \
--rank 4 --alpha 8 --epochs 3
Use LoRA adapters:
python -m znap.cli generate \
--model-dir runs/my_causal \
--lora-path runs/my_lora/lora_adapters.npz \
--prompt "hello"
Quantized generation:
python -m znap.cli generate --model-dir runs/my_causal --prompt "hello" --quantize int8
python -m znap.cli generate --model-dir runs/my_causal --prompt "hello" --quantize int4
Vision-Language Training (Scaffold)
Install image extras:
pip install -e .[image]
Dataset format (.jsonl):
{"image":"path/to/image1.jpg","text":"describe this scene"}
{"image":"path/to/image2.png","text":"what object is visible?"}
Train:
python -m znap.cli train-vlm \
--data data/vision_text.jsonl \
--output runs/my_vlm \
--context-size 32 \
--image-size 32 \
--epochs 5
Generate with image:
python -m znap.cli generate-vlm \
--model-dir runs/my_vlm \
--image path/to/image1.jpg \
--prompt "answer:"
Import HF-like Local Checkpoints
import-hf supports local .npz + config.json sources and converts them to znap transformer artifacts.
python -m znap.cli import-hf --source path/to/local_hf_npz_dir --output runs/imported_tf
Project Layout
znap/
core/ # tensor + autograd engine
nn/ # layers/modules
optim/ # optimizers
losses/ # losses
data/ # dataset loading and batching
tokenizers/ # whitespace, bpe, byte-level
train/ # training/eval helpers
models/ # tiny MLM and causal models
transformer.py # decoder-only transformer
cli.py # command-line interface
Development
Run tests:
python -m pytest -q
Build package:
python -m pip install --upgrade build twine
python -m build
python -m twine check dist/*
Roadmap
- Better checkpoint compatibility and broader external model import support
- Improved docs with more practical fine-tuning recipes
- Expanded benchmarks and profiling outputs
License
MIT License. See LICENSE.
Project details
Release history Release notifications | RSS feed
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 znap-1.2.0.tar.gz.
File metadata
- Download URL: znap-1.2.0.tar.gz
- Upload date:
- Size: 58.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8152a0fbc1ebd173e0f4bacfcc70cfd81b2d63fb109b62d3cb39e4daf44e58eb
|
|
| MD5 |
723d161d2da84687c11b90a314c54506
|
|
| BLAKE2b-256 |
0f9d642c8435d2b1aedc776f2e4fbae6983e0ccbe8884920bd85494cad39e709
|
File details
Details for the file znap-1.2.0-py3-none-any.whl.
File metadata
- Download URL: znap-1.2.0-py3-none-any.whl
- Upload date:
- Size: 58.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1dd458daf4f9ecd8595cd9869da91ff2191e101c75fc962d5add90bf372939a1
|
|
| MD5 |
a8665018b93f1c1abf3b498ddd8fe853
|
|
| BLAKE2b-256 |
100b41330fdab80f8ffeb245bdc2344441b3eb0a97720f79fa51ee2001bee519
|