A Chisel based hardware generation library for highly quantized neural networks.
Project description
Chisel4ml
Chisel4ml is an open-source library for generating dataflow architectures inspired by the hls4ml library.
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)
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.
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
- Start a chisel4ml server
java -jar ./out/chisel4ml/assembly.dest/out.jar
- In another terminal run tests
pytest -svv
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file chisel4ml-0.3.2.tar.gz
.
File metadata
- Download URL: chisel4ml-0.3.2.tar.gz
- Upload date:
- Size: 11.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 48ccacc9a8e825f1a0139593b72a6ea33bedda3d746684eb24a9f3d08bae498d |
|
MD5 | a7b981cbd5b5869ac5b4b405beab15a2 |
|
BLAKE2b-256 | 8ecdb6708a440ee22a8abf207800ca7a786397a864500a982f49107964fac3e0 |
File details
Details for the file chisel4ml-0.3.2-py3-none-any.whl
.
File metadata
- Download URL: chisel4ml-0.3.2-py3-none-any.whl
- Upload date:
- Size: 55.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bc372e1116c4c5ac2469667244d48b18133410f913e7050eec4385f81870cb64 |
|
MD5 | 9099f4fb346d08e823504fcf253cf931 |
|
BLAKE2b-256 | 8fa969dae703a967dd13f96ff5f6fab1fbd87a2da7aaec1f2d53c6173f019f72 |