Chisel4ml
Chisel4ml is an open-source library for generating highly-parallel dataflow style hardware implementations of Deeply Quantized Neural Networks. These types of networks are trained using frameworks such as Brevitas and QKeras. However, any training framework is supported as long as it export QONNX.
Instalation: from pip
- pip install chisel4ml.
- Download a matching jar from github relases.
- To test first run
java -jar chisel4ml.jar(You can change the port and temporary directory using -p and -d (use --help for info) - Paste the Python code bellow into a file and run
python script.py
import numpy as np
import qkeras
import tensorflow as tf
from chisel4ml import optimize, generate
w1 = np.array([[1, 2, 3, 4], [-4, -3, -2, -1], [2, -1, 1, 1]])
b1 = np.array([1, 2, 0, 1])
w2 = np.array([-1, 4, -3, -1]).reshape(4, 1)
b2 = np.array([2])
x = x_in = tf.keras.layers.Input(shape=3)
x = qkeras.QActivation(
qkeras.quantized_bits(bits=4, integer=3, keep_negative=True)
)(x)
x = qkeras.QDense(
4,
kernel_quantizer=qkeras.quantized_bits(
bits=4, integer=3, keep_negative=True, alpha=np.array([0.5, 0.25, 1, 0.25])
),
)(x)
x = qkeras.QActivation(qkeras.quantized_relu(bits=3, integer=3))(x)
x = qkeras.QDense(
1,
kernel_quantizer=qkeras.quantized_bits(
bits=4, integer=3, keep_negative=True, alpha=np.array([0.125])
),
)(x)
x = qkeras.QActivation(qkeras.quantized_relu(bits=3, integer=3))(x)
model = tf.keras.Model(inputs=[x_in], outputs=[x])
model.compile()
model.layers[2].set_weights([w1, b1])
model.layers[4].set_weights([w2, b2])
data = np.array(
[
[0.0, 0.0, 0.0],
[0.0, 1.0, 2.0],
[2.0, 1.0, 0.0],
[4.0, 4.0, 4.0],
[7.0, 7.0, 7.0],
[6.0, 0.0, 7.0],
[3.0, 3.0, 3.0],
[7.0, 0.0, 0.0],
[0.0, 7.0, 0.0],
[0.0, 0.0, 7.0],
]
)
opt_model = optimize.qkeras_model(model)
accelerators, lbir_model = generate.accelerators(
model,
minimize="delay"
)
circuit = generate.circuit(opt_model)
for x in data:
sw_res = opt_model.predict(np.expand_dims(x, axis=0))
hw_res = circuit(x)
assert np.array_equal(sw_res.flatten(), hw_res.flatten())
circuit.delete_from_server()
This will generate a circuit of a simple two layer fully-connected neural network, and store it in /tmp/.chisel4ml/circuit0.
If you have verilator installed you can also add the argument: use_verilator=True in the generate.circuit function. In the first case only a firrtl file be generated (this can be converted to verilog using firtool), if you use verilator, however, a SystemVerilog file will also be created.
chisel4ml also supports convolutional layers and maxpool layers. It also has some support for calculating FFTs and log-mel feature energy (audio features) in hardware.
Installation: from source
- Install mill build tool.
- Install python 3.8-3.10
- Create environment
python -m venv venv/ - Activate environment (Linux)
source venv/bin/activate- Windows
.\venv\Scripts\activate
- Windows
- Upgrade pip
python -m pip install --upgrade pip - Install chisel4ml
pip install -ve .[dev] - Build Python protobuf code
make - Build Scala code
mill chisel4ml.assembly - In another terminal run tests
pytest --use-verilator -n auto- The
--use-verilatorflag is optional if you have verilator installed, however it is highly recommended, since it is much faster.
- The
ScalaDocs
To create ScalaDocs run mill chisel4ml.docJar and they will be generated to out/chisel4ml/docJar.dest/javadoc.
Metadata
Release files for chisel4ml 0.3.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| chisel4ml-0.3.6.tar.gz | 11.7 MB | With provenance | Details for chisel4ml-0.3.6.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| chisel4ml-0.3.6-py3-none-any.whl | Python 3 | none | any | Details for chisel4ml-0.3.6-py3-none-any.whl |
Total release size: 11.8 MB
Release files / chisel4ml-0.3.6.tar.gz
| Download URL | chisel4ml-0.3.6.tar.gz |
|---|---|
| Size | 11.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d1b117309118f8c8ab05746f86b115cfefaa5303117d2ef52e99e1ffd53916a7
|
|
BLAKE2b-256 checksum How to use checksums |
62bf8eea2f0b786b108e32b087013d41810e0929afb34e6714969ff8f38bb3fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.0.1 CPython/3.12.8
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 22, 2025.
Transparency logRelease files / chisel4ml-0.3.6-py3-none-any.whl
| Download URL | chisel4ml-0.3.6-py3-none-any.whl |
|---|---|
| Size | 53.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a30f9e57cdd15f3088f32b7d9f6f12b6135dd3c6edcd66c46d90778f09773e3c
|
|
BLAKE2b-256 checksum How to use checksums |
3d2041aab7654c210fe09906ce9a5584c061f50613a3d1a2dca7cc8dba76a984
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.0.1 CPython/3.12.8
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 22, 2025.
Transparency logSecurity for chisel4ml 0.3.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for chisel4ml-0.3.6.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jan 22, 2025.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.