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

Uploaded Python 3Windows x86-64

weed_loader_cpu-0.7.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.7.1-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.7.1-py3-none-macosx_15_0_arm64.whl (2.0 MB view details)

Uploaded Python 3macOS 15.0+ ARM64

weed_loader_cpu-0.7.1-py3-none-macosx_14_0_arm64.whl (2.0 MB view details)

Uploaded Python 3macOS 14.0+ ARM64

File details

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

File metadata

  • Download URL: weed_loader_cpu-0.7.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.7.1.tar.gz
Algorithm Hash digest
SHA256 ad3afe6efc7d29a438db821d92eec8f8efe5a8a408fcb65496d1b0b18b1c5138
MD5 c24121ac51224dee0f50bf41147e23ff
BLAKE2b-256 2da2d3eb8e660ba45f2cbec9d4c89b3a296fe85fcfbdfac21b0f1caeb917ba05

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.7.1-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 cfd934cd0ea4cd29458787704670a6af95d76936146408300175472672e6008b
MD5 982aeda1a2601b23f34b6a5f358c7fe9
BLAKE2b-256 629cbcac1190ae3327b9d43d9d623038c961e651f211f1c2d81d28eb5a218556

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.7.1-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 0e82289ddf398b63f0c31821f67f4cd2eb981b07b4470581ece1a22910abfb4f
MD5 6bc0e75296d9b870d89ada703df0776a
BLAKE2b-256 0f268eaea2940f8dbd4f493e4f508239aa765c2171a6c4e099514a0eac838dce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.7.1-py3-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 70ce56a0215cc1ff83e467fcf62812a6ffea701c9712ea27537589c39acf9c19
MD5 34386487285781f91f21806d33137726
BLAKE2b-256 25f09a7b0d4d043d2a9a66e9317e6392a6f39c6f91c1391375403b2fbf786834

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.7.1-py3-none-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 2f58cb6c42abf94fc66acfce64a47bc3290576e9341fdcf0a3ac28b8c1e169d2
MD5 2b33e17cf7c7c6519b462dc78a4065bb
BLAKE2b-256 3625fa6482465df140a3abfeaadbbc0b52efd0764a4fb900fc971af7d7f7345c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.7.1-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 6ede3d8c5c22651dd68b4552c2dc167b1d18cbbdeca3321de158050fc27617be
MD5 d9dc1d5d93795b2e1eeae758c2100208
BLAKE2b-256 7fc3609c54ddfb4108d341db4112ec9c583a088b3719952f8f6ce7244ecd5a51

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