{"slug": "i-was-tired-of-configuring-every-llm-parameter-so-i-built-tensorless", "title": "I Was Tired of Configuring Every LLM Parameter, So I Built Tensorless 🤯", "summary": "A developer built Tensorless, a PyTorch-based package that automates configuration of language model training, allowing users to train text-generation models with minimal parameter setup. The tool automatically derives settings like model size and tokenization from the input data, while still permitting manual overrides. It is available on PyPI as tensorless-pytorch.", "body_md": "About a year ago, I was learning PyTorch.\n\nI was learning about model training, transformers, language models, tokenization, architectures, and all the other things that come with building models.\n\nAnd honestly?\n\n**There were a LOT of parameters.**\n\n`d_model`\n\n`hidden_size`\n\n`layers`\n\n`heads`\n\n`max_seq_len`\n\n`top_k`\n\n`top_p`\n\nsampling parameters...\n\nAnd then there was tokenization.\n\nAnd then the dataset.\n\nAnd then training.\n\nAnd then the hardware.\n\nAnd then CUDA.\n\nAnd then multi-GPU.\n\nAnd then...\n\nYou get the idea. 😭\n\nAt some point I started thinking:\n\nWhat if I could just give the system my data and let it figure most of this stuff out?\n\nThat thought eventually became **Tensorless**.\n\nI wasn't starting completely from zero.\n\nWhile learning PyTorch and experimenting with language models, I eventually built two models myself.\n\nOne was around **91M parameters**.\n\nAnother was around **35M parameters**.\n\nThat experience was actually what pushed me toward Tensorless.\n\nBecause once you build a model yourself, you start seeing just how many decisions are involved.\n\nAnd I started wondering:\n\nWhat if someone just wants to experiment with a small or medium-sized language model without having to become an expert in every single configuration option first?\n\nThat was the problem I wanted to solve.\n\nThe original Tensorless idea was much more extreme.\n\nI wanted Tensorless to have its own neural-network components, its own processing, its own structure, and its own training system.\n\nBasically, I was trying to build a lot of the stack myself.\n\nIt sounded cool.\n\nIt also caused **a ridiculous number of problems.**\n\nGPU support had issues.\n\nMulti-GPU had issues.\n\nTPU setup had issues.\n\nThere were bugs I had to chase because I was trying to control things that frameworks like PyTorch already handle extremely well.\n\nEventually I realized:\n\nI don't need to reinvent PyTorch to simplify model training.\n\nSo I changed the direction.\n\nThe current version uses **PyTorch underneath**.\n\nTensorless becomes the higher-level layer that tries to automate the annoying parts.\n\nThe package is available on PyPI:\n\nInstall it:\n\n```\npip install tensorless-pytorch\n```\n\nThen:\n\n``` python\nimport tensorless as tl\n\nmodel = tl.train(\"./corpus.txt\", task=\"text-generation\")\n\nprint(model.generate(\"The\", max_new_tokens=40))\n```\n\nThat's an actual example from the package's current PyPI documentation.\n\nAnd that's basically the philosophy of Tensorless:\n\n**Give it data. Train. Generate.**\n\nWhen you train a text-generation model, Tensorless can derive a number of settings from the data instead of making you configure everything manually.\n\nThe current package automatically derives things such as:\n\nThe model size is automatically scaled according to corpus size across several tiers.\n\nAnd if you *do* want control, you can override the automatically selected settings.\n\nSo you can start simple:\n\n```\nmodel = tl.train(\n    \"./corpus.txt\",\n    task=\"text-generation\"\n)\n```\n\nOr start taking control of the configuration:\n\n```\nmodel = tl.train(\n    \"./corpus.txt\",\n    task=\"text-generation\",\n    epochs=20,\n    max_seq_len=128\n)\n```\n\nThe idea isn't:\n\n\"You are never allowed to configure anything.\"\n\nIt's:\n\n\"You shouldn't have to configure everything just to get started.\"\n\nFor text training, Tensorless currently uses **BPE as the default tokenizer**.\n\nYou can also explicitly choose character-level tokenization:\n\n```\nmodel = tl.train(\n    \"./corpus.txt\",\n    task=\"text-generation\",\n    tokenizer=\"char\"\n)\n```\n\nThe text is tokenized once up front and then streamed through PyTorch in fixed-size batches.\n\nThat means the user doesn't have to manually build an entire tokenization → batching → training pipeline before experimenting.\n\nThere is also a starter English pretraining workflow.\n\nFor example:\n\n``` python\nimport tensorless as tl\n\nmodel = tl.pretrain(\n    out=\"english.tl\",\n    epochs=20,\n    max_seq_len=128\n)\n\nprint(\n    model.generate(\n        \"A complete sentence\",\n        max_new_tokens=30\n    )\n)\n```\n\nTensorless includes an offline starter corpus for demonstrations and smoke tests.\n\nBut it's important to say this clearly:\n\n**That starter corpus isn't supposed to magically produce a powerful LLM.**\n\nIt's there to demonstrate the pipeline.\n\nFor actual pretraining, you should provide your own substantially larger corpus.\n\nThis is one of the things I wanted to support beyond just:\n\n\"Here's a dataset, train from scratch.\"\n\nYou can train a base model:\n\n```\nbase = tl.train(\n    \"./big_corpus.txt\",\n    task=\"text-generation\",\n    out=\"base.tl\",\n    epochs=20\n)\n```\n\nThen fine-tune it:\n\n```\ntuned = tl.train(\n    \"./my_conversations.json\",\n    task=\"text-generation\",\n    out=\"tuned.tl\",\n    pretrained=\"base.tl\",\n    epochs=5\n)\n```\n\nThe current implementation keeps the architecture and tokenizer aligned with the pretrained model when using `pretrained=`\n\n, rather than silently accepting incompatible overrides.\n\nThat's useful because the whole point of fine-tuning is to build on what the base model already learned.\n\nTensorless isn't limited to language models.\n\nThe current package also exposes other training tasks.\n\nFor example:\n\n```\ntl.train(\n    \"reviews/\",\n    task=\"text-classification\"\n)\n```\n\nAnd tabular regression:\n\n```\ntl.train(\n    \"housing.csv\",\n    task=\"regression\"\n)\n```\n\nThe package also supports tabular classification, with preprocessing for things such as numeric values, ISO dates, and high-cardinality categories.\n\nSo the broader idea became:\n\n**Don't make every experiment start with a giant configuration file.**\n\nThis was one of the reasons the original from-scratch version became difficult.\n\nIn the current PyTorch-based implementation, CUDA training can automatically use mixed precision where supported.\n\nThe current version also supports TPU training through:\n\n```\ndevice=\"tpu\"\n```\n\nAnd larger automatically sized models can enable gradient checkpointing to reduce memory usage.\n\nThat's one of the big lessons I learned from the original Tensorless:\n\n**Sometimes the best engineering decision is not to rebuild something that already works.**\n\nAfter building a framework for training models, I needed an actual project to play with it.\n\nSo obviously...\n\nI made a chatbot that talks like a dramatic cat.\n\nIntroducing:\n\nCatTongue is a tiny Tensorless-powered chatbot trained on human messages and cat responses.\n\nThe repository is intentionally simple.\n\nIts structure looks roughly like:\n\n```\nCatTongue/\n├── data/\n│   └── conversations.json\n├── train.py\n├── chat.py\n├── README.md\n└── .gitignore\n```\n\nThe actual repository also contains trained `.tl`\n\nmodel files and the training/chat scripts.\n\nFirst install Tensorless:\n\n```\npip install tensorless-pytorch\n```\n\nThen train:\n\n```\npython train.py\n```\n\nThat produces:\n\n```\ncat.tl\n```\n\nThen:\n\n```\npython chat.py\n```\n\nAnd you can talk to the cat.\n\nThat's the actual workflow documented in the CatTongue repository.\n\nThe training data lives in:\n\n```\ndata/conversations.json\n```\n\nAn individual example looks like:\n\n```\n{\n  \"user\": \"what are you doing?\",\n  \"cat\": \"mrrp... watching the wall. the wall is suspicious.\"\n}\n```\n\nSo if you want to experiment with the personality, you can literally add more conversations.\n\nMore data.\n\nDifferent responses.\n\nDifferent personality.\n\nThen train again.\n\nThat's one of the things I like most about this experiment: **the entire pipeline is accessible enough to mess with.**\n\nSome of the CatTongue outputs are genuinely funny.\n\nOthers are completely broken.\n\nAnd that's expected.\n\nThis isn't a massive pretrained language model.\n\nIt's a small experiment trained on a small dataset.\n\nThe repository even has examples where the model produces grammatically broken or nonsensical responses.\n\nBut that's actually useful.\n\nBecause you can see the relationship between:\n\n**data → training → model behavior.**\n\nChange the dataset and train again.\n\nThe behavior changes.\n\nThat's exactly the kind of experimentation I wanted Tensorless to make easier.\n\nThe name came from the original idea.\n\nI wanted the user to think less about the underlying tensor/model configuration and more about:\n\nWhat data do I want to train on?\n\nIt's not literally \"tensor-free.\"\n\nPyTorch is underneath it.\n\nThe name is more about the abstraction.\n\nYou don't need to manually deal with every underlying detail before you can start experimenting.\n\nIt's kind of funny looking back.\n\nI started this because I was learning PyTorch and getting confused by all the configuration.\n\nThen I tried building basically everything myself.\n\nThat caused problems.\n\nThen I realized I could use PyTorch instead of fighting it.\n\nAnd now Tensorless is an actual Python package.\n\nThe current PyPI release is **0.8.0**, published on **August 27, 2026**, and the package is MIT licensed.\n\nThe project is still evolving.\n\nThere are things I want to improve.\n\nThere will definitely be bugs.\n\nAnd there are probably design decisions I'll change later.\n\nBut that's what makes open source interesting.\n\nYou can start ridiculously simply:\n\n``` python\nimport tensorless as tl\n\nmodel = tl.train(\n    \"./my_data.txt\",\n    task=\"text-generation\"\n)\n```\n\nOr you can go deeper and configure the training yourself.\n\nYou can pretrain.\n\nYou can fine-tune.\n\nYou can do text classification.\n\nYou can work with tabular data.\n\nYou can save models as `.tl`\n\n.\n\nYou can load them later:\n\n```\nmodel = tl.load(\"model.tl\")\n\nprint(model.info())\n```\n\nAll of these are part of the current package API.\n\nTensorless isn't meant to replace PyTorch.\n\nActually, **it uses PyTorch.**\n\nThat's intentional.\n\nPyTorch already gives us an enormous amount of mature infrastructure.\n\nTensorless sits above it and tries to make certain workflows more automated.\n\nThink of it as:\n\n```\nYour data\n   ↓\nTensorless\n   ↓\nautomatic configuration\n   ↓\ntokenization / preprocessing\n   ↓\nmodel + training setup\n   ↓\nPyTorch\n   ↓\ntrained model\n```\n\nThe goal is to reduce the amount of boilerplate between:\n\n**\"I have some data\"**\n\nand\n\n**\"I have a model I can experiment with.\"**\n\nI don't know exactly.\n\nThat's part of the fun.\n\nI want to keep improving the automation, hardware support, training behavior, documentation, and model capabilities.\n\nAnd I want people to actually use it.\n\nBreak it.\n\nExperiment with it.\n\nBuild weird projects with it.\n\nFind bugs I didn't find.\n\nSend pull requests.\n\nMaybe someone will build something genuinely useful with it.\n\nMaybe someone will build another ridiculous chatbot.\n\nBoth are fine. 😂\n\n**PyPI:**\n\n[tensorless-pytorch](https://pypi.org/project/tensorless-pytorch/?utm_source=chatgpt.com)\n\n**CatTongue:**\n\n[DeveloperPuneet/CatTongue](https://github.com/DeveloperPuneet/CatTongue?utm_source=chatgpt.com)\n\nInstall:\n\n```\npip install tensorless-pytorch\n```\n\nThen try:\n\n``` python\nimport tensorless as tl\n\nmodel = tl.train(\n    \"./corpus.txt\",\n    task=\"text-generation\"\n)\n\nprint(\n    model.generate(\n        \"The\",\n        max_new_tokens=40\n    )\n)\n```\n\nAnd if you want something more entertaining, clone CatTongue and train the dramatic cat. 🐈\n\nTensorless started because I thought:\n\n\"Why are there so many things I have to configure just to train a model?\"\n\nA year later, I ended up publishing the answer I came up with.\n\nIt's not perfect.\n\nIt's not some revolutionary new architecture.\n\nIt's not going to train a frontier model on your laptop.\n\nIt's simply an attempt to make model training **less annoying to start with**.\n\nAnd honestly?\n\nI'm pretty happy that the idea that started with me being confused about PyTorch eventually became a package people can actually `pip install`\n\n.\n\n**Now I want to see what other people do with it.** 🚀", "url": "https://wpnews.pro/news/i-was-tired-of-configuring-every-llm-parameter-so-i-built-tensorless", "canonical_source": "https://dev.to/puneetkumar2010/i-was-tired-of-configuring-every-llm-parameter-so-i-built-tensorless-12oh", "published_at": "2026-08-27 10:39:12+00:00", "updated_at": "2026-08-27 10:48:22.067088+00:00", "lang": "en", "topics": ["developer-tools", "machine-learning", "large-language-models"], "entities": ["Tensorless", "PyTorch", "PyPI"], "alternates": {"html": "https://wpnews.pro/news/i-was-tired-of-configuring-every-llm-parameter-so-i-built-tensorless", "markdown": "https://wpnews.pro/news/i-was-tired-of-configuring-every-llm-parameter-so-i-built-tensorless.md", "text": "https://wpnews.pro/news/i-was-tired-of-configuring-every-llm-parameter-so-i-built-tensorless.txt", "jsonld": "https://wpnews.pro/news/i-was-tired-of-configuring-every-llm-parameter-so-i-built-tensorless.jsonld"}}