Skip to main content

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

  1. pip install chisel4ml.
  2. Download a matching jar from github relases.
  3. To test first run java -jar chisel4ml.jar (You can change the port and temporary directory using -p and -d (use --help for info)
  4. 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

  1. Install mill build tool.
  2. Install python 3.8-3.10
  3. Create environment python -m venv venv/
  4. Activate environment (Linux)source venv/bin/activate
    • Windows .\venv\Scripts\activate
  5. Upgrade pip python -m pip install --upgrade pip
  6. Install chisel4ml pip install -ve .[dev]
  7. Build Python protobuf code make
  8. Build Scala code mill chisel4ml.assembly
  9. Start a chisel4ml server java -jar ./out/chisel4ml/assembly.dest/out.jar
  10. In another terminal run tests pytest -svv

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chisel4ml-0.3.2.tar.gz (11.7 MB view details)

Uploaded Source

Built Distribution

chisel4ml-0.3.2-py3-none-any.whl (55.8 kB view details)

Uploaded Python 3

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

Hashes for chisel4ml-0.3.2.tar.gz
Algorithm Hash digest
SHA256 48ccacc9a8e825f1a0139593b72a6ea33bedda3d746684eb24a9f3d08bae498d
MD5 a7b981cbd5b5869ac5b4b405beab15a2
BLAKE2b-256 8ecdb6708a440ee22a8abf207800ca7a786397a864500a982f49107964fac3e0

See more details on using hashes here.

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

Hashes for chisel4ml-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 bc372e1116c4c5ac2469667244d48b18133410f913e7050eec4385f81870cb64
MD5 9099f4fb346d08e823504fcf253cf931
BLAKE2b-256 8fa969dae703a967dd13f96ff5f6fab1fbd87a2da7aaec1f2d53c6173f019f72

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page