Skip to main content

Weed (Loader) - Minimalist AI/ML inference and backprogation

Project description

weed_logo

Weed

Minimalist AI/ML inference and backprogation in the style of Qrack

Weed Loader

This repository is for the Python loader for (C++) Weed models. Once you have trained models in C++, you can load them for use by Python with this project. See the Weed repository for more information.

Development Status

Weed is a rapidly-developing work-in-progress. Its ABI may change drastically and without notice.

The project provides a set of essential CPU and GPU kernels, used by Tensor instances that perform autograd. We also provide stochastic gradient descent (SGD) and Adam optimizer implementations. (Build and check the API reference to get started.)

GPT-2, BERT, and Qwen loading is experimental and mostly provided as proof-of-concept, also of the fine-tuning pipeline. Implementation was from published literature design, rather than direct analysis of any open source, to implement these model architectures. Their outputs, in Weed, are not yet coherent English, as a result.

Why try Weed?

With the growing popularity of AI/ML tools and workflows (including LLMs), legacy frameworks often carry "code debt" from over a decade of rapidly developing research history. This has led them to "bolt on" new features and advancements to design principles decided before the latest research. Popular frameworks also commonly started based in Python (maybe to capture early adoption), only later potentially "tacking on" a C++ library for special-case deployment needs. These conditions have produced libraries and frameworks with complicated dependency trees that occupy upward of a GB of disk footprint. This entire ecosystem might be due for a "refresh."

Weed does not seek to fully replace or supplant established frameworks. However, it aims for minimalist complete closure on the primitives necessary for high-performance AI/ML inference and back-propagation. Chiefly, this includes kernels, and a Tensor interface that immediately produces an autograd graph appropriate for training. Allowing optional OpenCL for hardware acceleration, it will remain free of required dependencies outside of C++(11) language standard.

Rethinking AI/ML library design this way, Weed has realized a rather unique and powerful form of sparsification of Tensor storage. Sparseness should not be a Tensor interface concern, but rather a Storage concern. Inspired by the design of the Qrack quantum computer simulation framework, the Tensor interface treats sparse and dense tensors as functionally equivalent. Sparse optimization is so "transparently streamlined," this way, that it defaults to enabled for CPU-based tensors, and we recommend you leave it enabled at all times.

Much like Qrack, Weed is designed to make the correct thing the default—and the expensive thing explicit.

Useful environment variables

If a transformer model you load or train runs into an OpenCL "out-of-resources" error (code -5), try setting environment variable WEED_TELESCOPE_TRANSFORMERS to any truthy value (like 1) so that Weed will "telescope" transformer encoder layers, by migrating each parameter in each layer to CPU (off of GPU memory) once its immediate usefulness is done.

Copyright, License, and Acknowledgments

Copyright (c) Daniel Strano and the Qrack contributors 2017-2026. All rights reserved.

In its include/common folder, Weed bundles a copy of rapidcsv by Kristofer Berggren, reused under a BSD 3-Clause License. (This is a convenience and suggestion to Weed's users, for loading CSVs.)

The Weed logo was produced with assistance from "Elara," an OpenAI custom GPT, and it is in the public domain. Elara has also been responsible for a huge amount of coaching and implementation drafts for Dan Strano to review and bring into line with standards, so she should be credited with coauthorship in any capacity that can be allowed. (Anthropic) Claude has also helped mostly with debugging, as well as developing an LLM front-end, fine-tuning interface, and modules for popular transformer model architectures, so they should rightly be credited similarly as a coauthor.

Licensed under the GNU Lesser General Public License V3.

See LICENSE.md in the project root or https://www.gnu.org/licenses/lgpl-3.0.en.html for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

weed_loader_cpu-0.6.2.tar.gz (11.7 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

weed_loader_cpu-0.6.2-py3-none-win_amd64.whl (832.0 kB view details)

Uploaded Python 3Windows x86-64

weed_loader_cpu-0.6.2-py3-none-manylinux_2_39_x86_64.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.39+ x86-64

weed_loader_cpu-0.6.2-py3-none-manylinux_2_35_x86_64.whl (2.9 MB view details)

Uploaded Python 3manylinux: glibc 2.35+ x86-64

weed_loader_cpu-0.6.2-py3-none-macosx_15_0_arm64.whl (2.0 MB view details)

Uploaded Python 3macOS 15.0+ ARM64

weed_loader_cpu-0.6.2-py3-none-macosx_14_0_arm64.whl (1.9 MB view details)

Uploaded Python 3macOS 14.0+ ARM64

File details

Details for the file weed_loader_cpu-0.6.2.tar.gz.

File metadata

  • Download URL: weed_loader_cpu-0.6.2.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for weed_loader_cpu-0.6.2.tar.gz
Algorithm Hash digest
SHA256 67736c501cade5d5ceb548f825642e8cf5116b6a7ddde5b5faa613155ea42cf8
MD5 cc8f5399464b02f174028af85dae0e34
BLAKE2b-256 03979171ce40bd309a9aa0cb47c250a294b1a046104408e11516a98448c1d218

See more details on using hashes here.

File details

Details for the file weed_loader_cpu-0.6.2-py3-none-win_amd64.whl.

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 4a265751ca8769e101702653fdad11040a1740b2123f0362971fcce20a0ab87c
MD5 a0e4fc418f0ed1821b11600b2a0c5deb
BLAKE2b-256 b7bbd1f420e74614318ff161b34b7623367bfaa46c4aa42ab355aabc2868ef95

See more details on using hashes here.

File details

Details for the file weed_loader_cpu-0.6.2-py3-none-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.2-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 bba780be910e0a22f93c11c1725af28c1f52e1c761910e6fb01ee3c35695e3a9
MD5 c9f64266dc6323b5054feb008aa7631e
BLAKE2b-256 2082ecf7a98d5a9ca2d3197df6c9cebb2ca344ddb052b4b8a39145021beac58c

See more details on using hashes here.

File details

Details for the file weed_loader_cpu-0.6.2-py3-none-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.2-py3-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 76e2ab84e639f59a6e916cb605027fc7bce3abd1f090e33c4e88b8eb459fb134
MD5 ef07b960c77c3df0a2e02ffcfae0f44c
BLAKE2b-256 5ea7e4332f1aa9226c5d84f0890c363fe3a7bb881f767ca02ca87c0986cd2c97

See more details on using hashes here.

File details

Details for the file weed_loader_cpu-0.6.2-py3-none-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.2-py3-none-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 39f4ab102134b6192a113c5c5867a922956688ee11826e22a894b27a3be7998f
MD5 6f0c9b60a299390b5a9ef67483ca7e37
BLAKE2b-256 b7cfb0f00469715c2070b8c5cd928d802155a23a0d9e35a6d02baec470300d4d

See more details on using hashes here.

File details

Details for the file weed_loader_cpu-0.6.2-py3-none-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.2-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 c83d6df56003b7e4de2fec0f4e75f048157eabe469f6154069ed7cdd87330aa3
MD5 3006aec5890d109171c91b807460d079
BLAKE2b-256 631fab644f0887ee0a7f6ece5571379b4667b81fd6d4e95d08da361d510b0a88

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page