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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3macOS 15.0+ ARM64

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

File metadata

  • Download URL: weed_loader_cpu-0.7.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.7.0.tar.gz
Algorithm Hash digest
SHA256 d4938c0a6c6833f576b062c17bb405843d2be036a379f7870bb630b2f3bbb260
MD5 edcabcd6becf0561a56b610c49ddd871
BLAKE2b-256 8267c9bd932289faeda37b7f5e850406a1b4c43efc38fb7ad3c3669e292e9216

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.7.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c589ae961510416989af6844e3b99fd9f06d7471587a5a44e5c2578feed22668
MD5 ac318dea536f1d6a86eb398a31c2cfcc
BLAKE2b-256 332582a3ab2358574bdb73018814193b58cbf654e20db5cbec71a7dd11f11012

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.7.0-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 cecb39531292704146c4bf72096392ca7993fb14f1835aa1b9c3cfbea9fc4974
MD5 2d3785779f2c31ea166172ef33c33449
BLAKE2b-256 157fd2811c0bf4b704b339ab79d537dea05db963e930d7a1ed71981e593d9ab6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.7.0-py3-none-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 ec68ad6d3d08cfbf3b98be67bb381b4478f6880bec3377fafd0021255c49d88b
MD5 f72bf87d90622865aea1f5eddf074a9f
BLAKE2b-256 dd1de4fc01e581f6c2f58ecdbed485e35d43ca39a2c0f2ea0c77ca70533a9757

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.7.0-py3-none-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 3066c89c86cf40b609f129ca65c3efdd5fea9a304c0f2cd501a743b1fb0ab7ee
MD5 af1d125c2b6522274abdc53398ebeeb0
BLAKE2b-256 f92eb501c4f92a759cbd5f13bb5672633d909094954e9951325f40e3854e95e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for weed_loader_cpu-0.7.0-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 5357d97622d12c282355fb31f23f07e69fb2025047a670ca8ce14900411e62de
MD5 fc962f170ad882d58d1b51fd400400e5
BLAKE2b-256 a938b75af51e187abf1247ca34fb3f039fc993df2873162c1db9ccdf99ad4960

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