Concrete ML
WebsiteLibrariesProducts & ServicesDevelopersSupport
1.2
1.2
  • What is Concrete ML?
  • Getting Started
    • Installation
    • Key Concepts
    • Inference in the Cloud
    • Demos and Tutorials
  • Built-in Models
    • Linear Models
    • Tree-based Models
    • Neural Networks
    • Nearest Neighbors
    • Pandas
    • Built-in Model Examples
  • Deep Learning
    • Using Torch
    • Using ONNX
    • Step-by-step Guide
    • Deep Learning Examples
    • Debugging Models
    • Optimizing Inference
  • Deployment
    • Prediction with FHE
    • Hybrid models
    • Production Deployment
    • Serialization
  • Advanced topics
    • Quantization
    • Pruning
    • Compilation
    • Advanced Features
  • Developer Guide
    • Workflow
      • Set Up the Project
      • Set Up Docker
      • Documentation
      • Support and Issues
      • Contributing
    • Inner Workings
      • Importing ONNX
      • Quantization Tools
      • FHE Op-graph Design
      • External Libraries
    • API
      • concrete.ml.common.check_inputs.md
      • concrete.ml.common.debugging.custom_assert.md
      • concrete.ml.common.debugging.md
      • concrete.ml.common.md
      • concrete.ml.common.serialization.decoder.md
      • concrete.ml.common.serialization.dumpers.md
      • concrete.ml.common.serialization.encoder.md
      • concrete.ml.common.serialization.loaders.md
      • concrete.ml.common.serialization.md
      • concrete.ml.common.utils.md
      • concrete.ml.deployment.deploy_to_aws.md
      • concrete.ml.deployment.deploy_to_docker.md
      • concrete.ml.deployment.fhe_client_server.md
      • concrete.ml.deployment.md
      • concrete.ml.deployment.server.md
      • concrete.ml.deployment.utils.md
      • concrete.ml.onnx.convert.md
      • concrete.ml.onnx.md
      • concrete.ml.onnx.onnx_impl_utils.md
      • concrete.ml.onnx.onnx_model_manipulations.md
      • concrete.ml.onnx.onnx_utils.md
      • concrete.ml.onnx.ops_impl.md
      • concrete.ml.pytest.md
      • concrete.ml.pytest.torch_models.md
      • concrete.ml.pytest.utils.md
      • concrete.ml.quantization.base_quantized_op.md
      • concrete.ml.quantization.md
      • concrete.ml.quantization.post_training.md
      • concrete.ml.quantization.quantized_module.md
      • concrete.ml.quantization.quantized_module_passes.md
      • concrete.ml.quantization.quantized_ops.md
      • concrete.ml.quantization.quantizers.md
      • concrete.ml.search_parameters.md
      • concrete.ml.search_parameters.p_error_search.md
      • concrete.ml.sklearn.base.md
      • concrete.ml.sklearn.glm.md
      • concrete.ml.sklearn.linear_model.md
      • concrete.ml.sklearn.md
      • concrete.ml.sklearn.neighbors.md
      • concrete.ml.sklearn.qnn.md
      • concrete.ml.sklearn.qnn_module.md
      • concrete.ml.sklearn.rf.md
      • concrete.ml.sklearn.svm.md
      • concrete.ml.sklearn.tree.md
      • concrete.ml.sklearn.tree_to_numpy.md
      • concrete.ml.sklearn.xgb.md
      • concrete.ml.torch.compile.md
      • concrete.ml.torch.hybrid_model.md
      • concrete.ml.torch.md
      • concrete.ml.torch.numpy_module.md
      • concrete.ml.version.md
Powered by GitBook
On this page
  • module concrete.ml.pytest.torch_models
  • class SimpleNet
  • class FCSmall
  • class FC
  • class CNN
  • class CNNMaxPool
  • class CNNOther
  • class CNNInvalid
  • class CNNGrouped
  • class NetWithLoops
  • class MultiInputNN
  • class MultiInputNNConfigurable
  • class MultiInputNNDifferentSize
  • class BranchingModule
  • class BranchingGemmModule
  • class UnivariateModule
  • class StepActivationModule
  • class NetWithConcatUnsqueeze
  • class MultiOpOnSingleInputConvNN
  • class FCSeq
  • class FCSeqAddBiasVec
  • class TinyCNN
  • class TinyQATCNN
  • class SimpleQAT
  • class QATTestModule
  • class SingleMixNet
  • class DoubleQuantQATMixNet
  • class TorchSum
  • class TorchSumMod
  • class NetWithConstantsFoldedBeforeOps
  • class ShapeOperationsNet
  • class PaddingNet
  • class QuantCustomModel
  • class TorchCustomModel
  • class ConcatFancyIndexing
  • class PartialQATModel

Was this helpful?

Export as PDF
  1. Developer Guide
  2. API

concrete.ml.pytest.torch_models.md

Previousconcrete.ml.pytest.mdNextconcrete.ml.pytest.utils.md

Last updated 1 year ago

Was this helpful?

Libraries

  • TFHE-rs
  • Concrete
  • Concrete ML
  • fhEVM

Developers

  • Blog
  • Documentation
  • Github
  • FHE resources

Company

  • About
  • Introduction to FHE
  • Media
  • Careers

module concrete.ml.pytest.torch_models

Torch modules for our pytests.


class SimpleNet

Fake torch model used to generate some onnx.

method __init__

__init__() → None

method forward

forward(inputs)

Forward function.

Arguments:

  • inputs: the inputs of the model.

Returns:

  • torch.Tensor: the result of the computation


class FCSmall

Torch model for the tests.

method __init__

__init__(input_output, activation_function)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class FC

Torch model for the tests.

method __init__

__init__(activation_function, input_output=3072)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class CNN

Torch CNN model for the tests.

method __init__

__init__(input_output, activation_function)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class CNNMaxPool

Torch CNN model for the tests with a max pool.

method __init__

__init__(input_output, activation_function)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class CNNOther

Torch CNN model for the tests.

method __init__

__init__(input_output, activation_function)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class CNNInvalid

Torch CNN model for the tests.

method __init__

__init__(activation_function, groups)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class CNNGrouped

Torch CNN model with grouped convolution for compile torch tests.

method __init__

__init__(input_output, activation_function, groups)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class NetWithLoops

Torch model, where we reuse some elements in a loop.

Torch model, where we reuse some elements in a loop in the forward and don't expect the user to define these elements in a particular order.

method __init__

__init__(activation_function, input_output, n_fc_layers)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class MultiInputNN

Torch model to test multiple inputs forward.

method __init__

__init__(input_output, activation_function)

method forward

forward(x, y)

Forward pass.

Args:

  • x: the first input of the NN

  • y: the second input of the NN

Returns: the output of the NN


class MultiInputNNConfigurable

Torch model to test multiple inputs forward.

method __init__

__init__(use_conv, use_qat, input_output, n_bits)

method forward

forward(x, y)

Forward pass.

Args:

  • x: the first input of the NN

  • y: the second input of the NN

Returns: the output of the NN


class MultiInputNNDifferentSize

Torch model to test multiple inputs with different shape in the forward pass.

method __init__

__init__(
    input_output,
    activation_function=None,
    is_brevitas_qat=False,
    n_bits=3
)

method forward

forward(x, y)

Forward pass.

Args:

  • x: The first input of the NN.

  • y: The second input of the NN.

Returns: The output of the NN.


class BranchingModule

Torch model with some branching and skip connections.

method __init__

__init__(input_output, activation_function)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class BranchingGemmModule

Torch model with some branching and skip connections.

method __init__

__init__(input_output, activation_function)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class UnivariateModule

Torch model that calls univariate and shape functions of torch.

method __init__

__init__(input_output, activation_function)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class StepActivationModule

Torch model implements a step function that needs Greater, Cast and Where.

method __init__

__init__(input_output, activation_function)

method forward

forward(x)

Forward pass with a quantizer built into the computation graph.

Args:

  • x: the input of the NN

Returns: the output of the NN


class NetWithConcatUnsqueeze

Torch model to test the concat and unsqueeze operators.

method __init__

__init__(activation_function, input_output, n_fc_layers)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class MultiOpOnSingleInputConvNN

Network that applies two quantized operations on a single input.

method __init__

__init__(can_remove_input_tlu: bool)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class FCSeq

Torch model that should generate MatMul->Add ONNX patterns.

This network generates additions with a constant scalar

method __init__

__init__(input_output, act)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class FCSeqAddBiasVec

Torch model that should generate MatMul->Add ONNX patterns.

This network tests the addition with a constant vector

method __init__

__init__(input_output, act)

method forward

forward(x)

Forward pass.

Args:

  • x: the input of the NN

Returns: the output of the NN


class TinyCNN

A very small CNN.

method __init__

__init__(n_classes, act) → None

Create the tiny CNN with two conv layers.

Args:

  • n_classes: number of classes

  • act: the activation


method forward

forward(x)

Forward the two layers with the chosen activation function.

Args:

  • x: the input of the NN

Returns: the output of the NN


class TinyQATCNN

A very small QAT CNN to classify the sklearn digits data-set.

This class also allows pruning to a maximum of 10 active neurons, which should help keep the accumulator bit-width low.

method __init__

__init__(
    n_classes,
    n_bits,
    n_active,
    signed,
    narrow,
    power_of_two_scaling
) → None

Construct the CNN with a configurable number of classes.

Args:

  • n_classes (int): number of outputs of the neural net

  • n_bits (int): number of weight and activation bits for quantization

  • n_active (int): number of active (non-zero weight) neurons to keep

  • signed (bool): whether quantized integer values are signed

  • narrow (bool): whether the range of quantized integer values is narrow/symmetric

  • power_of_two_scaling (bool): whether to use power-of-two scaling quantizers which allows to test the round PBS optimization when the scales are power-of-two


method forward

forward(x)

Run inference on the tiny CNN, apply the decision layer on the reshaped conv output.

Args:

  • x: the input to the NN

Returns: the output of the NN


method toggle_pruning

toggle_pruning(enable)

Enable or remove pruning.

Args:

  • enable: if we enable the pruning or not


class SimpleQAT

Torch model implements a step function that needs Greater, Cast and Where.

method __init__

__init__(input_output, activation_function, n_bits=2, disable_bit_check=False)

method forward

forward(x)

Forward pass with a quantizer built into the computation graph.

Args:

  • x: the input of the NN

Returns: the output of the NN


class QATTestModule

Torch model that implements a simple non-uniform quantizer.

method __init__

__init__(activation_function)

method forward

forward(x)

Forward pass with a quantizer built into the computation graph.

Args:

  • x: the input of the NN

Returns: the output of the NN


class SingleMixNet

Torch model that with a single conv layer that produces the output, e.g., a blur filter.

method __init__

__init__(use_conv, use_qat, inp_size, n_bits)

method forward

forward(x)

Execute the single convolution.

Args:

  • x: the input of the NN

Returns: the output of the NN


class DoubleQuantQATMixNet

Torch model that with two different quantizers on the input.

Used to test that it keeps the input TLU.

method __init__

__init__(use_conv, use_qat, inp_size, n_bits)

method forward

forward(x)

Execute the single convolution.

Args:

  • x: the input of the NN

Returns: the output of the NN


class TorchSum

Torch model to test the ReduceSum ONNX operator in a leveled circuit.

method __init__

__init__(dim=(0,), keepdim=True)

Initialize the module.

Args:

  • dim (Tuple[int]): The axis along which the sum should be executed

  • keepdim (bool): If the output should keep the same dimension as the input or not


method forward

forward(x)

Forward pass.

Args:

  • x (torch.tensor): The input of the model

Returns:

  • torch_sum (torch.tensor): The sum of the input's tensor elements along the given axis


class TorchSumMod

Torch model to test the ReduceSum ONNX operator in a circuit containing a PBS.

method __init__

__init__(dim=(0,), keepdim=True)

Initialize the module.

Args:

  • dim (Tuple[int]): The axis along which the sum should be executed

  • keepdim (bool): If the output should keep the same dimension as the input or not


method forward

forward(x)

Forward pass.

Args:

  • x (torch.tensor): The input of the model

Returns:

  • torch_sum (torch.tensor): The sum of the input's tensor elements along the given axis


class NetWithConstantsFoldedBeforeOps

Torch QAT model that does not quantize the inputs.

method __init__

__init__(
    hparams: dict,
    bits: int,
    act_quant=<class 'brevitas.quant.scaled_int.Int8ActPerTensorFloat'>,
    weight_quant=<class 'brevitas.quant.scaled_int.Int8WeightPerTensorFloat'>
)

method forward

forward(x)

Forward pass.

Args:

  • x (torch.tensor): The input of the model

Returns:

  • torch.tensor: Output of the network


class ShapeOperationsNet

Torch QAT model that reshapes the input.

method __init__

__init__(is_qat)

method forward

forward(x)

Forward pass.

Args:

  • x (torch.tensor): The input of the model

Returns:

  • torch.tensor: Output of the network


class PaddingNet

Torch QAT model that applies various padding patterns.

method __init__

__init__()

method forward

forward(x)

Forward pass.

Args:

  • x (torch.tensor): The input of the model

Returns:

  • torch.tensor: Output of the network


class QuantCustomModel

A small quantized network with Brevitas, trained on make_classification.

method __init__

__init__(
    input_shape: int,
    output_shape: int,
    hidden_shape: int = 100,
    n_bits: int = 5,
    act_quant=<class 'brevitas.quant.scaled_int.Int8ActPerTensorFloat'>,
    weight_quant=<class 'brevitas.quant.scaled_int.Int8WeightPerTensorFloat'>,
    bias_quant=None
)

Quantized Torch Model with Brevitas.

Args:

  • input_shape (int): Input size

  • output_shape (int): Output size

  • hidden_shape (int): Hidden size

  • n_bits (int): Bit of quantization

  • weight_quant (brevitas.quant): Quantization protocol of weights

  • act_quant (brevitas.quant): Quantization protocol of activations.

  • bias_quant (brevitas.quant): Quantizer for the linear layer bias


method forward

forward(x)

Forward pass.

Args:

  • x (torch.tensor): The input of the model.

Returns:

  • torch.tensor: Output of the network.


class TorchCustomModel

A small network with Brevitas, trained on make_classification.

method __init__

__init__(input_shape, hidden_shape, output_shape)

Torch Model.

Args:

  • input_shape (int): Input size

  • output_shape (int): Output size

  • hidden_shape (int): Hidden size


method forward

forward(x)

Forward pass.

Args:

  • x (torch.tensor): The input of the model.

Returns:

  • torch.tensor: Output of the network.


class ConcatFancyIndexing

Concat with fancy indexing.

method __init__

__init__(
    input_shape,
    hidden_shape,
    output_shape,
    n_bits: int = 4,
    n_blocks: int = 3
) → None

Torch Model.

Args:

  • input_shape (int): Input size

  • output_shape (int): Output size

  • hidden_shape (int): Hidden size

  • n_bits (int): Number of bits

  • n_blocks (int): Number of blocks


method forward

forward(x)

Forward pass.

Args:

  • x (torch.tensor): The input of the model.

Returns:

  • torch.tensor: Output of the network.


class PartialQATModel

A model with a QAT Module.

method __init__

__init__(input_shape: int, output_shape: int, n_bits: int)

method forward

forward(x)

Forward pass.

Args:

  • x (torch.tensor): The input of the model.

Returns:

  • torch.tensor: Output of the network.