DaCeML - Machine learning powered by data-centric parallel programming.

Overview

CPU CI GPU CI codecov Documentation Status

DaCeML

Machine learning powered by data-centric parallel programming.

This project adds PyTorch and ONNX model loading support to DaCe, and adds ONNX operator library nodes to the SDFG IR. With access to DaCe's rich transformation library and productive development environment, DaCeML can generate highly efficient implementations that can be executed on CPUs, GPUs and FPGAs.

The white box approach allows us to see computation at all levels of granularity: from coarse operators, to kernel implementations, and even down to every scalar operation and memory access.

IR visual example

Read more: Library Nodes

Integration

Converting PyTorch modules is as easy as adding a decorator...

@dace_module
class Model(nn.Module):
    def __init__(self, kernel_size):
        super().__init__()
        self.conv1 = nn.Conv2d(1, 4, kernel_size)
        self.conv2 = nn.Conv2d(4, 4, kernel_size)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        return F.relu(self.conv2(x))

... and ONNX models can also be directly imported using the model loader:

model = onnx.load(model_path)
dace_model = ONNXModel("mymodel", model)

Read more: PyTorch Integration and Importing ONNX models.

Training

DaCeML modules support training using a symbolic automatic differentiation engine:

import torch.nn.functional as F
from daceml.pytorch import dace_module

@dace_module(backward=True)
class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1 = nn.Linear(784, 120)
        self.fc2 = nn.Linear(120, 32)
        self.fc3 = nn.Linear(32, 10)
        self.ls = nn.LogSoftmax(dim=-1)

    def forward(self, x):
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        x = self.ls(x)
        return x

x = torch.randn(8, 784)
y = torch.tensor([0, 1, 2, 3, 4, 5, 6, 7], dtype=torch.long)

model = Net()

criterion = nn.NLLLoss()
prediction = model(x)
loss = criterion(prediction, y)
# gradients can flow through model!
loss.backward()

Read more: Automatic Differentiation.

Library Nodes

DaCeML extends the DaCe IR with machine learning operators. The added nodes perform computation as specificed by the ONNX specification. DaCeML leverages high performance kernels from ONNXRuntime, as well as pure SDFG implementations that are introspectable and transformable with data centric transformations.

The nodes can be used from the DaCe python frontend.

import dace
import daceml.onnx as donnx
import numpy as np

@dace.program
def conv_program(X_arr: dace.float32[5, 3, 10, 10],
                 W_arr: dace.float32[16, 3, 3, 3]):
    output = dace.define_local([5, 16, 4, 4], dace.float32)
    donnx.ONNXConv(X=X_arr, W=W_arr, Y=output, strides=[2, 2])
    return output

X = np.random.rand(5, 3, 10, 10).astype(np.float32)
W = np.random.rand(16, 3, 3, 3).astype(np.float32)

result = conv_program(X_arr=X, W_arr=W)

Setup

The easiest way to get started is to run

make install

This will setup DaCeML in a newly created virtual environment.

For more detailed instructions, including ONNXRuntime installation, see Installation.

Development

Common development tasks are automated using the Makefile. See Development for more information.

Comments
  • Docs + Doctest

    Docs + Doctest

    Mainly ported over the existing documentation from the readme into sphinx.

    • autogenerate documentation for all supported ONNX nodes
    • add examples and test them with doctest

    TODO:

    • [x] make readme long again
    • [x] rg [^`]`[^`]
    • [x] move setup code to before doctest
    • [x] remove ORT install from RTD build
    opened by orausch 4
  • Re-add pure implementations ops

    Re-add pure implementations ops

    TODO:

    • [x] disable the pure expansions for the test_input_outputs test
    • [x] ~~MKL expansion doesn't work correctly for the einsums, so the tests on travis are slow for now. I think we can merge without this~~ -> #18
    • [x] ~~I also have a more general matmul queued up, but I would like to fix the MKL matmul first before adding that~~ -> #19
    • [x] investigate the GPU crashes
    • [x] Documentation for default_implementation
    • [x] ~~TODO in test_bert_full~~ -> #24
    • [x] Docstring for ONNXForward
    opened by orausch 4
  • FPGA Convolution (Im2col with aligned vectors and tiling)

    FPGA Convolution (Im2col with aligned vectors and tiling)

    Im2Col Convolution Implementation:

    • 1D systolic array for GEMM
    • reads/writes aligned vectors
    • supports tiling
    • supports arbitrary number of PEs for the systolic array
    • buffers tile data to perform computation on unaligned vectors
    • supports in-place relu activation

    Xilinx:

    • prefetch bias values to achieve II=1 pipelining in the writer processing element.
    opened by manuelburger 2
  • Backprop

    Backprop

    Remaining tasks:

    • [x] Test BERT encoder
    • [x] Crash on non-float edges in subgraph
    • [x] ~~Test jacobi~~
    • [x] ~~Intersection checks on when adding WCR add (and maybe set atomic=false)~~
    • [x] ~~Rewrite initialization state detection~~ (will do this as required)
    • [x] fix documentation links for ONNXForward
    opened by orausch 2
  • Support inplace updates in distributed lowering

    Support inplace updates in distributed lowering

    Reductions are tricky because they require inplace updates since the reduction buffer are always initialized somewhere else.

    This is supported now by tying the schedule of the initialization map to the schedule of the reduction map. The user should only specify one of the schedules, and the system will then automatically derive the other. Doing it this way means that we don't need any communication on the initialization states for these simple cases (although this will get trickier with WCR)

    opened by orausch 1
  • Add autodiff library node usable in DacePrograms

    Add autodiff library node usable in DacePrograms

    This adds support for the torch.autograd.backward function, as well as access to .grad of an array.

    Calls to torch.autograd.backward inserts a new BackwardPass library node.

    Calls to .grad allocate gradient buffers and write to them via these library nodes.

    Example:

    dace_module = DaceModule(dace_module, auto_optimize=False)
    
    @dace
    def train_step(x):
        output = dace_module(x)
        loss = np.add.reduce(output, axis=[0, 1])
        loss.backward()
        return loss
    

    Outputs: Screenshot 2022-08-03 at 21 25 54 Which expands to: Screenshot 2022-08-03 at 21 27 22

    opened by orausch 1
  • Promote return value scalars in ONNXModel

    Promote return value scalars in ONNXModel

    Dace doesn't support returning CPU scalars from SDFGs. To overcome this, we promote scalars to arrays, and then demote them again before returning to the user.

    opened by orausch 1
  • Add ONNX node tests to CI, cleanup more pure ops

    Add ONNX node tests to CI, cleanup more pure ops

    With the new decorator feature, we can simplify a whole bunch of ops.

    Also added the test cases ONNX ships with to our CI, this is quite useful for development. For now, we are still skipping quite a few, especially on the more complex ops.

    opened by orausch 1
  • Add grid-mapped-array communication nodes

    Add grid-mapped-array communication nodes

    These nodes abstract mapping an array onto a process grid. They fill a similar role to BlockScatter and BlockGather in dace, but with a more array-programming focused API. This means that they are less flexible; for example, the user cannot pass arbitrary process grids for reduction and scattering.

    opened by orausch 1
  • Support nested SDFGs in distributed lowering

    Support nested SDFGs in distributed lowering

    This allows us to support reductions with their intialization states. The idea is that nested SDFG are required to be schedule such that there is no communication within them. The user passes the schedules for each map, and the implied communication constraints are then checked for consistency.

    Keeping communication out of the Nested SDFGs means that there is no communication between things like reduction buffer initialization, and also means that all global communication is kept top-level, where it is easier to optimize

    opened by orausch 1
  • Add DistributedMemlet node and scheduling function

    Add DistributedMemlet node and scheduling function

    This change adds the DistributedMemlet library node and the scheduling function for distributed computation.

    This allows you to distribute the work in the top-level map of the SDFG by specifying block sizes. The lowering function will analyze the SDFG and try to find MPI nodes that implement the required communication.

    opened by orausch 1
  • Implement a node module replacements for GNN support.

    Implement a node module replacements for GNN support.

    Implementing module replacements:

    • torch.Module becomes a placeholder torch fn, then a placeholder op in ONNX graph, which gets expanded to a replacement implementation.
    • main replacement mechanism in daceml/onnx/nodes/replacement.py and daceml/pytorch/module_replacement.py
    • implementations of GAT and GCN layers in daceml/onnx/nodes/replacement_entries.py, along with appropriate tests comparing to Pytorch Geometric implementations
    • Simple benchmarking code in examples
    opened by lamyiowce 1
  • Issues with plot_fpga_lenet.py

    Issues with plot_fpga_lenet.py

    I am getting the following errors when I run the example/plot_fpga_lenet.py using the current master branch:

    $ python examples/plot_fpga_lenet.py
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/validation.py:321: UserWarning: WARNING: Use of uninitialized transient "onnxCOLONCOLONRelu_11" in state TestLeNet
      warnings.warn('WARNING: Use of uninitialized transient "%s" in state %s' %
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/validation.py:321: UserWarning: WARNING: Use of uninitialized transient "onnxCOLONCOLONMaxPool_12" in state TestLeNet
      warnings.warn('WARNING: Use of uninitialized transient "%s" in state %s' %
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/validation.py:321: UserWarning: WARNING: Use of uninitialized transient "input" in state TestLeNet
      warnings.warn('WARNING: Use of uninitialized transient "%s" in state %s' %
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/validation.py:321: UserWarning: WARNING: Use of uninitialized transient "onnxCOLONCOLONRelu_14" in state TestLeNet
      warnings.warn('WARNING: Use of uninitialized transient "%s" in state %s' %
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/validation.py:321: UserWarning: WARNING: Use of uninitialized transient "onnxCOLONCOLONMaxPool_15" in state TestLeNet
      warnings.warn('WARNING: Use of uninitialized transient "%s" in state %s' %
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/validation.py:321: UserWarning: WARNING: Use of uninitialized transient "onnxCOLONCOLONReshape_16" in state TestLeNet
      warnings.warn('WARNING: Use of uninitialized transient "%s" in state %s' %
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/validation.py:321: UserWarning: WARNING: Use of uninitialized transient "onnxCOLONCOLONGemm_18" in state TestLeNet
      warnings.warn('WARNING: Use of uninitialized transient "%s" in state %s' %
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/validation.py:321: UserWarning: WARNING: Use of uninitialized transient "onnxCOLONCOLONRelu_19" in state TestLeNet
      warnings.warn('WARNING: Use of uninitialized transient "%s" in state %s' %
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/validation.py:321: UserWarning: WARNING: Use of uninitialized transient "onnxCOLONCOLONGemm_20" in state TestLeNet
      warnings.warn('WARNING: Use of uninitialized transient "%s" in state %s' %
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/validation.py:321: UserWarning: WARNING: Use of uninitialized transient "onnxCOLONCOLONRelu_21" in state TestLeNet
      warnings.warn('WARNING: Use of uninitialized transient "%s" in state %s' %
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/validation.py:321: UserWarning: WARNING: Use of uninitialized transient "onnxCOLONCOLONGemm_22" in state TestLeNet
      warnings.warn('WARNING: Use of uninitialized transient "%s" in state %s' %
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/validation.py:321: UserWarning: WARNING: Use of uninitialized transient "x" in state TestLeNet
      warnings.warn('WARNING: Use of uninitialized transient "%s" in state %s' %
    Traceback (most recent call last):
      File "/u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/codegen/compiler.py", line 222, in configure_and_compile
        _run_liveoutput("cmake --build . --config %s" % (Config.get('compiler', 'build_type')),
      File "/u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/codegen/compiler.py", line 405, in _run_liveoutput
        raise subprocess.CalledProcessError(process.returncode, command, output.getvalue())
    subprocess.CalledProcessError: Command 'cmake --build . --config RelWithDebInfo' returned non-zero exit status 2.
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "/afs/slac.stanford.edu/u/re/ruckman/projects/daceml-dev/software/scripts/plot_fpga_lenet.py", line 76, in <module>
        daceml_result = daceml_module(x)
      File "/u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/torch/nn/modules/module.py", line 1130, in _call_impl
        return forward_call(*input, **kwargs)
      File "/u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/daceml/torch/module.py", line 385, in forward
        self.function = self._initialize_sdfg(actual_inputs)
      File "/u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/daceml/torch/module.py", line 355, in _initialize_sdfg
        self.compiled_function = function_generator(self, dummy_inputs)
      File "/u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/daceml/torch/dispatchers/cpp_torch_extension.py", line 498, in register_and_compile_torch_extension
        compiled, handle_ptr = compile_and_init_sdfgs(module, dummy_inputs)
      File "/u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/daceml/torch/dispatchers/common.py", line 47, in compile_and_init_sdfgs
        compiled: CompiledSDFG = module.dace_model.compile_and_init()
      File "/u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/daceml/onnx/onnx_importer.py", line 452, in compile_and_init
        compiled_sdfg = self.sdfg.compile()
      File "/u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/sdfg/sdfg.py", line 2140, in compile
        shared_library = compiler.configure_and_compile(program_folder, sdfg.name)
      File "/u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/codegen/compiler.py", line 231, in configure_and_compile
        raise cgx.CompilationError('Compiler failure:\n' + ex.output)
    dace.codegen.exceptions.CompilationError: Compiler failure:
    Consolidate compiler generated dependencies of target TestLeNet_1
    [ 16%] Building CXX object CMakeFiles/TestLeNet_1.dir/afs/slac.stanford.edu/u/re/ruckman/projects/daceml-dev/software/.dacecache/TestLeNet_1/src/cpu/TestLeNet_1.cpp.o
    In file included from /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/codegen/../runtime/include/dace/dace.h:14,
                     from /afs/slac.stanford.edu/u/re/ruckman/projects/daceml-dev/software/.dacecache/TestLeNet_1/src/cpu/TestLeNet_1.cpp:2:
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/codegen/../runtime/include/dace/types.h: In constructor ‘dace::half::half(float)’:
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/codegen/../runtime/include/dace/types.h:94:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
       94 |             uint32_t x = *((uint32_t*)&f);
          |                           ~^~~~~~~~~~~~~~
    [ 33%] Building CXX object CMakeFiles/TestLeNet_1.dir/afs/slac.stanford.edu/u/re/ruckman/projects/daceml-dev/software/.dacecache/TestLeNet_1/src/xilinx/device/TestLeNet_0_0.cpp.o
    In file included from /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/codegen/../runtime/include/dace/copy.h:5,
                     from /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/codegen/../runtime/include/dace/xilinx/device.h:8,
                     from /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/codegen/../runtime/include/dace/fpga_device.h:5,
                     from /afs/slac.stanford.edu/u/re/ruckman/projects/daceml-dev/software/.dacecache/TestLeNet_1/src/xilinx/device/TestLeNet_0_0.cpp:1:
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/codegen/../runtime/include/dace/types.h: In constructor ‘dace::half::half(float)’:
    /u1/ruckman/anaconda3/envs/dace-ml-dev/lib/python3.9/site-packages/dace/codegen/../runtime/include/dace/types.h:94:28: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]
       94 |             uint32_t x = *((uint32_t*)&f);
          |                           ~^~~~~~~~~~~~~~
    /afs/slac.stanford.edu/u/re/ruckman/projects/daceml-dev/software/.dacecache/TestLeNet_1/src/xilinx/device/TestLeNet_0_0.cpp: In function ‘void TestLeNet_0_0_0(const float*, const float*, const float*, const float*, const float*, const float*, const float*, const float*, const float*, const float*, const float*, const float*, const long long int*, float*, float*, float*, float*, float*, float*, float*, float*, float*, float*, float*, float*, float*)’:
    /afs/slac.stanford.edu/u/re/ruckman/projects/daceml-dev/software/.dacecache/TestLeNet_1/src/xilinx/device/TestLeNet_0_0.cpp:575:243: error: ‘y_out’ was not declared in this scope
      575 |                             if (((((b > 0) || (n0 > 0)) && (k_drain < p) && (m_drain < 576)) || ((k == (25 - 1)) && (m >= 0)) || (__bn0km_drain && (k_drain < p)))) {Y_pipe[p].push((((p == 0) || ((k_drain == (25 - 1)) && (! __bn0km_drain))) ? y_out[0] : forward_in.pop()));
          |                                                                                                                                                                                                                                                   ^~~~~
    /afs/slac.stanford.edu/u/re/ruckman/projects/daceml-dev/software/.dacecache/TestLeNet_1/src/xilinx/device/TestLeNet_0_0.cpp:843:263: error: ‘y_out’ was not declared in this scope
      843 |                             if (((((b > 0) || (n0 > 0)) && (k_drain < p) && (m_drain < 64)) || ((k == (150 - 1)) && (m >= 0)) || (__bn0km_drain && (k_drain < p)))) {fpga_im2col_conv_1_Y_pipe[p].push((((p == 0) || ((k_drain == (150 - 1)) && (! __bn0km_drain))) ? y_out[0] : forward_in.pop()));
          |                                                                                                                                                                                                                                                                       ^~~~~
    /afs/slac.stanford.edu/u/re/ruckman/projects/daceml-dev/software/.dacecache/TestLeNet_1/src/xilinx/device/TestLeNet_0_0.cpp:1086:248: error: ‘c_out’ was not declared in this scope; did you mean ‘b_out’?
     1086 |                             if (((((n0 > 0) || (tm > 0)) && (k_drain < p) && (m_drain < 120)) || ((k == (256 - 1)) && (m >= 0)) || (__n0tmkm_drain && (k_drain < p)))) {C_pipe[p].push((((p == 0) || ((k_drain == (256 - 1)) && (! __n0tmkm_drain))) ? c_out[0] : forward_in.pop()));
          |                                                                                                                                                                                                                                                        ^~~~~
          |                                                                                                                                                                                                                                                        b_out
    /afs/slac.stanford.edu/u/re/ruckman/projects/daceml-dev/software/.dacecache/TestLeNet_1/src/xilinx/device/TestLeNet_0_0.cpp:1199:259: error: ‘c_out’ was not declared in this scope; did you mean ‘b_out’?
     1199 |                             if (((((n0 > 0) || (tm > 0)) && (k_drain < p) && (m_drain < 84)) || ((k == (120 - 1)) && (m >= 0)) || (__n0tmkm_drain && (k_drain < p)))) {fpga_gemm_1_C_pipe[p].push((((p == 0) || ((k_drain == (120 - 1)) && (! __n0tmkm_drain))) ? c_out[0] : forward_in.pop()));
          |                                                                                                                                                                                                                                                                   ^~~~~
          |                                                                                                                                                                                                                                                                   b_out
    /afs/slac.stanford.edu/u/re/ruckman/projects/daceml-dev/software/.dacecache/TestLeNet_1/src/xilinx/device/TestLeNet_0_0.cpp:1312:257: error: ‘c_out’ was not declared in this scope; did you mean ‘b_out’?
     1312 |                             if (((((n0 > 0) || (tm > 0)) && (k_drain < p) && (m_drain < 10)) || ((k == (84 - 1)) && (m >= 0)) || (__n0tmkm_drain && (k_drain < p)))) {fpga_gemm_2_C_pipe[p].push((((p == 0) || ((k_drain == (84 - 1)) && (! __n0tmkm_drain))) ? c_out[0] : forward_in.pop()));
          |                                                                                                                                                                                                                                                                 ^~~~~
          |                                                                                                                                                                                                                                                                 b_out
    gmake[2]: *** [CMakeFiles/TestLeNet_1.dir/build.make:90: CMakeFiles/TestLeNet_1.dir/afs/slac.stanford.edu/u/re/ruckman/projects/daceml-dev/software/.dacecache/TestLeNet_1/src/xilinx/device/TestLeNet_0_0.cpp.o] Error 1
    gmake[1]: *** [CMakeFiles/Makefile2:630: CMakeFiles/TestLeNet_1.dir/all] Error 2
    gmake: *** [Makefile:91: all] Error 2
    
    opened by ruck314 1
A data preprocessing package for time series data. Design for machine learning and deep learning.

A data preprocessing package for time series data. Design for machine learning and deep learning.

Allen Chiang 152 Jan 7, 2023
Python Extreme Learning Machine (ELM) is a machine learning technique used for classification/regression tasks.

Python Extreme Learning Machine (ELM) Python Extreme Learning Machine (ELM) is a machine learning technique used for classification/regression tasks.

Augusto Almeida 84 Nov 25, 2022
Vowpal Wabbit is a machine learning system which pushes the frontier of machine learning with techniques

Vowpal Wabbit is a machine learning system which pushes the frontier of machine learning with techniques such as online, hashing, allreduce, reductions, learning2search, active, and interactive learning.

Vowpal Wabbit 8.1k Dec 30, 2022
CD) in machine learning projectsImplementing continuous integration & delivery (CI/CD) in machine learning projects

CML with cloud compute This repository contains a sample project using CML with Terraform (via the cml-runner function) to launch an AWS EC2 instance

Iterative 19 Oct 3, 2022
Interactive Parallel Computing in Python

Interactive Parallel Computing with IPython ipyparallel is the new home of IPython.parallel. ipyparallel is a Python package and collection of CLI scr

IPython 2.3k Dec 30, 2022
Massively parallel self-organizing maps: accelerate training on multicore CPUs, GPUs, and clusters

Somoclu Somoclu is a massively parallel implementation of self-organizing maps. It exploits multicore CPUs, it is able to rely on MPI for distributing

Peter Wittek 239 Nov 10, 2022
monolish: MONOlithic Liner equation Solvers for Highly-parallel architecture

monolish is a linear equation solver library that monolithically fuses variable data type, matrix structures, matrix data format, vendor specific data transfer APIs, and vendor specific numerical algebra libraries.

RICOS Co. Ltd. 179 Dec 21, 2022
Data science, Data manipulation and Machine learning package.

duality Data science, Data manipulation and Machine learning package. Use permitted according to the terms of use and conditions set by the attached l

David Kundih 3 Oct 19, 2022
Data Version Control or DVC is an open-source tool for data science and machine learning projects

Continuous Machine Learning project integration with DVC Data Version Control or DVC is an open-source tool for data science and machine learning proj

Azaria Gebremichael 2 Jul 29, 2021
ML-powered Loan-Marketer Customer Filtering Engine

In Loan-Marketing business employees are required to call the user's to buy loans of several fields and in several magnitudes. If employees are calling everybody in the network it is also very lengthy and uncertain that most of the customers will buy it. So, there is a very need for a filtering system that segregates the customers who are unlikely to buy loans and the opposite. Loan-Web is visualized and made up on that context.

Sagnik Roy 13 Jul 2, 2022
A mindmap summarising Machine Learning concepts, from Data Analysis to Deep Learning.

A mindmap summarising Machine Learning concepts, from Data Analysis to Deep Learning.

Daniel Formoso 5.7k Dec 30, 2022
A toolkit for making real world machine learning and data analysis applications in C++

dlib C++ library Dlib is a modern C++ toolkit containing machine learning algorithms and tools for creating complex software in C++ to solve real worl

Davis E. King 11.6k Jan 2, 2023
A library of extension and helper modules for Python's data analysis and machine learning libraries.

Mlxtend (machine learning extensions) is a Python library of useful tools for the day-to-day data science tasks. Sebastian Raschka 2014-2021 Links Doc

Sebastian Raschka 4.2k Dec 29, 2022
A machine learning toolkit dedicated to time-series data

tslearn The machine learning toolkit for time series analysis in Python Section Description Installation Installing the dependencies and tslearn Getti

null 2.3k Jan 5, 2023
A machine learning toolkit dedicated to time-series data

tslearn The machine learning toolkit for time series analysis in Python Section Description Installation Installing the dependencies and tslearn Getti

null 2.3k Dec 29, 2022
Apache Liminal is an end-to-end platform for data engineers & scientists, allowing them to build, train and deploy machine learning models in a robust and agile way

Apache Liminals goal is to operationalise the machine learning process, allowing data scientists to quickly transition from a successful experiment to an automated pipeline of model training, validation, deployment and inference in production. Liminal provides a Domain Specific Language to build ML workflows on top of Apache Airflow.

The Apache Software Foundation 121 Dec 28, 2022
Meerkat provides fast and flexible data structures for working with complex machine learning datasets.

Meerkat makes it easier for ML practitioners to interact with high-dimensional, multi-modal data. It provides simple abstractions for data inspection, model evaluation and model training supported by efficient and robust IO under the hood.

Robustness Gym 115 Dec 12, 2022
This machine-learning algorithm takes in data from the last 60 days and tries to predict tomorrow's price of any crypto you ask it.

Crypto-Currency-Predictor This machine-learning algorithm takes in data from the last 60 days and tries to predict tomorrow's price of any crypto you

Hazim Arafa 6 Dec 4, 2022
Python package for machine learning for healthcare using a OMOP common data model

This library was developed in order to facilitate rapid prototyping in Python of predictive machine-learning models using longitudinal medical data from an OMOP CDM-standard database.

Sontag Lab 75 Jan 3, 2023