cd /news/machine-learning/i-was-learning-pytorch-then-i-accide… · home topics machine-learning article
[ARTICLE · art-107729] src=dev.to ↗ pub= topic=machine-learning verified=true sentiment=· neutral

I Was Learning PyTorch, Then I Accidentally Started Building My Own AI Training Framework

A developer building Tensorless, an AI training framework, started with two PyTorch models to learn the basics, then created a lightweight framework that automates training setup. The project evolved from a PyTorch wrapper into a custom neural/training system with CUDA optimization, TPU support, and automatic configuration, tested with a cat chatbot named CatTongue.

read10 min views1 publishedAug 23, 2026

Honestly, Tensorless was not supposed to become this big.

I was learning PyTorch.

I wanted to understand how neural networks and model training actually worked, so before starting Tensorless, I built two AI models with PyTorch.

Those two projects were mainly for learning. I wanted to understand the basics by actually building things instead of only reading tutorials.

And after doing that, I started thinking about something pretty simple:

Why does training a model have to involve so much setup every time?

If I already have the training data, why can't I just give it to a framework and let it figure out most of the boring stuff? That was the beginning of Tensorless.

Before Tensorless existed, I spent time learning PyTorch by actually building two AI models.

That gave me a basic understanding of how the whole process worked:

Building those two models was important because I wasn't starting Tensorless completely blind.

I had already experienced the process myself.

And after doing it twice, I started noticing how much of the setup was repetitive.

Sometimes I don't want to spend a huge amount of time configuring everything.

Sometimes I just want to get a result quickly.

So I started thinking:

What if most of this could just happen automatically?

My initial goal wasn't to create another huge machine-learning framework.

I wanted something more like:

Give Tensorless your training data

Tensorless figures out the setup

Train

Get your model

The idea was basically:

Put data in → go.

If you're a beginner, you shouldn't need to understand every training parameter before you can train a model. But if you're an advanced programmer, you should still be able to configure everything yourself.

So the philosophy became:

Simple by default. Configurable when you need it.

The First Tensorless Version Used PyTorch

The first version of Tensorless actually used PyTorch underneath.

I wasn't trying to reinvent neural networks at that point.

I was trying to automate the training process.

The configuration was mostly determined automatically using fixed conditions in the code.

So instead of manually deciding every parameter, Tensorless would make those decisions for you.

That was the first version.

And honestly, it worked surprisingly well for what I wanted.

But then I ran into another problem.

I Wanted It To Be Small

One of the reasons I started thinking differently about the architecture was the amount of stuff involved in a PyTorch-based workflow.

When I was experimenting with the project, the dependencies and modules could become 500+ MB.

And I started thinking:

"I'm trying to make training simpler and lightweight, but I'm bringing in a huge stack just to do it."

I didn't want Tensorless to become a massive package full of components that users might never need.

I wanted the package to contain the things actually required for its own workflow.

So I decided to go much further.

Then I Made A Slightly Insane Decision

I started building more of the system myself.

Instead of keeping Tensorless as a PyTorch wrapper forever, I started working toward my own neural/training system.

That meant getting into things I originally hadn't planned to touch.

I started working on:

Neural network components

Training

CUDA optimization

Data optimization

Data pipelines

TPU support

Automatic configuration

Tokenization

BPE

Model saving/

And other training infrastructure

At this point, Tensorless had changed completely.

It wasn't just:

"PyTorch, but with easier configuration."

It was becoming an attempt to build a lightweight training system around the workflow I wanted.

Then I Needed Something Real To Test It On

So I built a small chatbot.

A cat chatbot.

I called it CatTongue. 🐈

The model was trained on CPU, and with the PyTorch-based version of my training system, I was getting results that were honestly pretty fun.

For example:

You: "Do you trust me?"

Cat: "only if you walk toward the kitchen. 😼🐾"

You: "Who is your enemy?"

Cat: "empty boxes. 📦😾 they are useful for exactly zero seconds."

You: "Who is your favorite human?"

Cat: "are you holding food? 🤨🍗"

You: "Do you have a best friend?"

Cat: "the vacuum cleaner. 😾🧹 we have unfinished business."

It wasn't perfect.

But it was understandable.

The model was actually producing responses that made sense.

And I thought:

Okay. This is working.

Then I Changed The Training System Again

I continued developing my own training implementation.

And then I trained again.

This time...

OH MY GOD.

The results were terrible. 😭

I started getting things like:

You: Hello

Cat: yes. � I understand the ancient languagnacke.

You: do you want food?

Cat: food. �� � I have interrupt the sound forctinking.

You: fish?

Cat: food. � � � suspicious.

You: who is your enemy?

Cat: yes. � I amain but jobs.

You: meow

Cat: okay. � I superiore your fish.

You: kitchen

Cat: fish. � They are you mrrp.

And my reaction was basically:

FAAAAAAAAAAAAAAAAAAAAH.

😂

There were recognizable words.

There were sometimes recognizable meanings.

But the language wasn't behaving properly.

And this was actually one of the most important moments in the project.

Running a Neural Network Isn't The Same As Making It Learn Properly

I had already learned how to make the system train.

I had a model.

I had data.

I had a training loop.

I had the infrastructure.

But getting something to actually learn useful language representations is a completely different problem.

That experiment showed me that my implementation still had a lot to improve.

And that's where I started understanding the difference between:

"The code runs."

and

"The model works well."

Those are VERY different things.

But The API Was Becoming What I Wanted

Even while the underlying system still needed work, the interface was becoming extremely simple.

For example, pretraining and fine-tuning can look like:

import tensorless as tl

print("Pretraining base model...")

base_model = tl.pretrain(

out="pretrained_base.tl",

max_seq_len=30

)

print("Base model pretrained -> pretrained_base.tl")

print("Fine-tuning on cat conversations...")

model = tl.train(

"data/conversations.json",

pretrained="pretrained_base.tl",

out="cat.tl",

) print("CatTongue trained successfully!")

That's basically the experience I'm trying to create.

You don't need to write a massive training script.

You don't need thousands of lines just to get started.

You provide your data.

Tensorless handles the setup.

And if you want to customize things, you can.

Beginner vs Advanced User

This is something I really want Tensorless to get right.

If you're a beginner You shouldn't have to understand every parameter.

You should be able to do something like:

model = tl.train("data/") and get started.

If you're an advanced programmer You should be able to configure the training yourself.

I want all the important configuration to be accessible in one place rather than making someone jump through a huge project just to change one setting.

So the idea is:

One simple function for beginners. Deep configuration for advanced users.

I Also Wanted It To Stay Lightweight

Another thing I'm trying to maintain is the overall package size.

Tensorless is currently under roughly 30–40 MB overall, rather than pulling in a huge collection of unnecessary components.

That's important to me because the original reason for this project was partly:

I want to experiment without needing a giant stack just to get started.

I don't want someone to install Tensorless for a small experiment and feel like they installed an entire operating system. 😭

Tensorless Is Now Actually Open Source

The project is available on GitHub and PyPI.

GitHub: [https://github.com/DeveloperPuneet/Tensorless](https://github.com/DeveloperPuneet/Tensorless)

PyPI: [https://pypi.org/project/tensorless/](https://pypi.org/project/tensorless/)

And CatTongue is also open source:

CatTongue: https://github.com/DeveloperPuneet/CatTongue The CatTongue experiment is one of the things I'm using to test whether the training system is actually improving.

And Now I'm Stuck On The Hard Stuff

This is where the project is today.

The basic system works.

The API works.

Training works to a certain extent.

The automatic setup works.

But now I'm running into problems that aren't as easy as writing another Python function.

CUDA

I've been working on CUDA support and optimization.

The system can detect the GPU and show GPU-related activity, but I'm having problems getting the actual training workload to behave properly on the GPU.

Basically:

The GPU is detected, but it doesn't always mean the training is actually being accelerated the way it should be.

That's something I really want to fix.

TPU

I've also started working toward TPU support.

Again, detection is one thing.

Actually getting the training workload to execute correctly on the TPU is another.

So TPU support is currently something I want to improve substantially.

Multi-GPU

I've also been working on multi-GPU support.

The problem is that detecting multiple GPUs doesn't automatically mean the training workload is correctly distributed across them.

I want multi-GPU training to actually make use of the available devices rather than simply detecting them.

Training Results

This is probably the biggest issue.

The same training data can behave differently depending on the implementation.

My current training implementation doesn't always produce results comparable to established training frameworks.

The CatTongue experiment made that very obvious.

The model can learn words.

It can sometimes learn relationships between words.

But getting consistently good results is another level.

Automatic Configuration

The automatic configuration is also something I want to improve.

Right now, some decisions are based on predefined logic.

That's useful, but it isn't flexible enough for every dataset or model.

I want the system to become smarter about determining what configuration makes sense.

This Is Where I Need Help

And honestly, this is the main reason I'm writing this article.

I'm still learning.

I started this entire project because I was learning PyTorch.

I built two models with PyTorch.

Then I started automating the process.

Then I started building my own system.

And now I've reached areas where there are people who know way more than I do.

If you have experience with: CUDA

GPU optimization

TPU/XLA

multi-GPU training

neural network implementation

training stability

data pipelines

model optimization

BPE/tokenization

machine-learning infrastructure

I'd genuinely love feedback.

You don't have to write code.

Even finding a problem and explaining why something is wrong would help.

And if you want to contribute code, even better.

The project is open source and the issues are there for exactly this reason.

What I Want To Build Next

I have a pretty ambitious list of things I'd like to experiment with.

Some of the ideas currently on my roadmap are:

Better CUDA optimization

Proper TPU training

Reliable multi-GPU training

Smarter automatic configuration

Improved data pipelines

More training/data formats

Additional model architectures

Game integration

CLI-based AI interaction

UI-based AI interaction

User-vs-AI experiences Reinforcement learning

Q-learning

Deep Q-learning

And more

The goal isn't necessarily to implement everything immediately.

I want to keep expanding the system as I learn.

From Two PyTorch Models To Tensorless Looking back, the progression is kind of funny.

I started with:

"I want to learn PyTorch."

Then I built two models with PyTorch.

Then:

"Why do I have to configure all this stuff every time?"

So I started automating it.

Then:

"Why is this getting so heavy?"

So I started trying to make it lightweight.

Then:

"What if I build more of the system myself?"

Then came:

CUDA.

TPUs.

Data pipelines.

BPE.

Multi-GPU.

And then eventually:

"Why does my cat suddenly speak ancient alien language?" 💀

That's basically how Tensorless happened.

I didn't start this project because I thought I could build something better than PyTorch.

I started it because I wanted to make one specific thing easier:

Take training data → configure as little as possible → train a model.

I wanted something where beginners could just give it their data and go, while advanced users could still control the system when they needed to.

And now I'm trying to figure out how far I can actually take that idea.

If You Want To Check It Out Tensorless

[https://github.com/DeveloperPuneet/Tensorless](https://github.com/DeveloperPuneet/Tensorless)

[https://pypi.org/project/tensorless/](https://pypi.org/project/tensorless/)

CatTongue

[https://github.com/DeveloperPuneet/CatTongue](https://github.com/DeveloperPuneet/CatTongue)

If you're interested in the project, try it, break it, report something, suggest something, or contribute.

Especially if you understand the parts I'm currently struggling with.

I'm still learning.

That's kind of the whole reason this project exists.

I started by learning PyTorch.

Now I'm learning what it actually takes to build the stuff underneath it.

And honestly?

I'm curious to see where this goes. 🚀

── more in #machine-learning 4 stories · sorted by recency
── more on @tensorless 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/i-was-learning-pytor…] indexed:0 read:10min 2026-08-23 ·