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.0.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.0-py3-none-win_amd64.whl (830.0 kB view details)

Uploaded Python 3Windows x86-64

weed_loader_cpu-0.6.0-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.0-py3-none-manylinux_2_35_x86_64.whl (2.8 MB view details)

Uploaded Python 3manylinux: glibc 2.35+ x86-64

weed_loader_cpu-0.6.0-py3-none-macosx_15_0_arm64.whl (1.9 MB view details)

Uploaded Python 3macOS 15.0+ ARM64

weed_loader_cpu-0.6.0-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.0.tar.gz.

File metadata

  • Download URL: weed_loader_cpu-0.6.0.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.0.tar.gz
Algorithm Hash digest
SHA256 9b96c8a063cf290dc62e89256c4af4eda74d98739a23398c311bc9d6bc834df3
MD5 fd9ef8a9eee6a350b98b61f0d2a3ed47
BLAKE2b-256 ffcb3d8a5388108887b0d0de30032a783e6a5b1f04fb3ba9469b29f6694124aa

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 acbe9db2dfd7fc96f3d065848ae72ad951903553995551f733455f46db24d647
MD5 c1962f944641ff1134321fe05da67f08
BLAKE2b-256 c72a8372d6cdd463f5f1ae5c872bda3ea1afadf24c6a1963d98f5d9f5327b6df

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.0-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 3e7cc3b95453cbd45084a989325afba92fdf1fb8b3f6e368b70eea8adf3fa69b
MD5 5ea0e3cbd25796c3894b074aa036c320
BLAKE2b-256 ffbca95ae8faf89ea2ce000833bfe4ee1b176536ffab93500391acbe47fc1db0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.0-py3-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 b2efe647668ad38f8fd62fae845333442fb4f49dd1e21a16802baf52d76b9557
MD5 a63bc2479cb47e2ef9b97a43cd8a510d
BLAKE2b-256 4f750b02b34a3d0b68915a30dbae886024fe9704880b596fec48aeaa1b907dc1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.0-py3-none-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 fb582542e77b186e1e875dc0f3840486a0bd792674cc8f3b90561cba3dcd2fe9
MD5 2784d671a997fe6f4e7e03246477cb34
BLAKE2b-256 2ef897bbc90fc9d14643d49fd5980bcae6e3aa4afbb690a0fc8ad19225e116c4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.0-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 33cfdf12b6a044b72f188d5747a7513cafe3be052db57076edc52ae822d8e575
MD5 46d52fe42706fa0b81e347122a87a6a3
BLAKE2b-256 e4a678f386cfefd7531c33ab2a2f9a045ff18444a571d0b74b75ff64fe1a77ee

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