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

Uploaded Python 3Windows x86-64

weed_loader_cpu-0.6.1-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.1-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.1-py3-none-macosx_15_0_arm64.whl (1.9 MB view details)

Uploaded Python 3macOS 15.0+ ARM64

weed_loader_cpu-0.6.1-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.1.tar.gz.

File metadata

  • Download URL: weed_loader_cpu-0.6.1.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.1.tar.gz
Algorithm Hash digest
SHA256 18a55ae4c038c895b5176d2ef1a7225ce5e1812d744b405b3a1962b0506ad65e
MD5 90d3ac2b644d5b1cda0b295601d432ef
BLAKE2b-256 7dfb93584dae01edd0e9adc16cf344938b1ee7a06e1db34eeeb043df426f3674

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c0c204e57dc27f0e8a74dea96e548fddbd2fa1960c0aaad9beb0786d18f41713
MD5 2e0e5d1183c9ba34b811e8656063e7d4
BLAKE2b-256 898fb84833b1d0a9e4b28209939aa361728e3d4278f131871aa056e26bbd1202

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.1-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 5727d21b281670f28fc8692332d59c74a06450a1bd120c8bb892ecb45fdc9712
MD5 332c4048360f77d4824c93ee376d92a7
BLAKE2b-256 a277dfe9340d1882c9e9d8c78f9693649044621f580858315e544fef729a62b1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.1-py3-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 13e19095ba304140f399bab64a88c42291335c976a1d204226a8f5cc279543b6
MD5 648e1ef9b064a7117d4ccd5978552011
BLAKE2b-256 32fa5167e8ac75fd01751fd5512447c63fa9d0d758785e23510d49e368cb4f2b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.1-py3-none-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 3384820db37fefedd29bc7dac10ce8ceafb3bb0279e8087fbe24a465e3acf3ba
MD5 53a0d032858cb9bc37e41ac31dbca610
BLAKE2b-256 b1b06217de7cdb2b4326c5d57569122599acbb0525859561a5532338fae23efc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.6.1-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 46711008d5b2d3b9bb4da18c2c0b126318901ea9e8bc7262a4b07779042ce97f
MD5 28754b1be9a7bed7a999f984141d0a0a
BLAKE2b-256 3a158415940196a61b2eb49fb0e1285cef091defca7d5520fdc5e2bfde6e25ad

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