I'll allot intentional time to attack these in the days following this post.
I'll need some sort of yardstick to measure myself against. I'll work problem sets involving system design.
I'll also focus on seeing more design decisions, systems and implementation details.
Day 4/? Inference engine.
Since my main goal of doing this was to improve my overall skills, I've identified two bottlenecks.
1. I design inefficient systems/modules under uncertainty.
2. My programming knowledge is very basic/rudimental albeit I complete projects with it.
@probnstat What kind of data?
And what are the inductive biases of deep net?
What's our measure of performance?
I think further questions would need to be asked no?
Training Frameworks: Ops are API functions called by tensors. Tensors track what tensors created them and the ops used.
This took me some time to figure out.
Got frustrated;
- re-read attention is all you need
- Revised Inner product spaces
- studied for fluid mechanics test
Day 3: ML inference engine
Op kernels for inference engines e.g ggml, are different from ML frameworks e.g tinygrad & pytorch.
Here's the difference:
inf. Engines: build a static graph of predefined ops, some libs abstract away tensors and ops to a "layer", no grad tracking.
day2: CPU inference engine
1d and 2d tensors working, but it's kind hacky;
1. Custom allocator but just a wrapper around malloc and free with some attachments.
2. implementation now allocates contiguous memory based on sizeof(dtype) * w for a 1d tensor. Tensors are row-major
@dogecahedron lemme my understanding; stride will allow me to traverse along one dim, and then subsequent rows/cols along that same dim so I store it as a contiguous array in memory?
3. For 2d tensors I figured out how to map to a contiguous array with;
(i * n_cols) + j. Tensors can be randomly filled or with a specific number
This won't scale to n-D tensors so I'll probably redesign this in the future.
My aim for now is to write all ops.