[SYSTEMDS-273] Refactor Matrix Compression Package

Major refactoring of compressed Matrix Block to "simplify"
responsibilities. The main goal of the refactoring was to reduce the
amount of bindings to CompressedMatrixBlock from the different types of
ColGroups, to enable easy addition of new types of groups. (without
reducing performance!)

A list of new groups and other tasks associated with this is added to
/docs/tasks.txt .

Furthermore, the tests added for the compression work based on an
estimation tolerance, allowing the estimations inside the system to be
off by a set factor. In the tests, this has to be expanded upon to
enable better precision in how the estimations are calculated.

Bellow is an extract of the different changes:

- Separated sub-parts of compression into different packages.
- Array memory footprint worst case calculations.
- Moved Compressed Size Estimation Calculation to specific ColGroups

- Extensive testing of size Estimation of ColGroups and compression
  - Jol Memory Estimate tests for compression blocks
  - Using worst case Jol Estimate JVM using uncompressed 64-bit JVM
  - Ideal input generator for testing Col groups compression.

- Factory pattern added for selected constructors
  - ColGroups
    - NameChange from ColGroupCompressor to ColGroupFactory
  - CompressedMatrixBlock

- Enable the parallel execution of the ColGrouping (previously disabled)

- Settings File added for Compression to enable selection of specific
  compression types. This can be extended with settings loaded from
  DMLConfig
  - This is constructed using a builder pattern such that invocation is
  private.

- Added abstract compressed block for overwriting default MatrixBlock

- Add Test Libs to pom.xml
  - Memory estimator framework JOL from OpenJDK to measure object sizes

Closes #872.
77 files changed
tree: 9e68aa0c1cdea72c1ec50bbf5d06c87ed7d26f64
  1. .github/
  2. bin/
  3. conf/
  4. dev/
  5. docker/
  6. docs/
  7. scripts/
  8. src/
  9. .gitattributes
  10. .gitignore
  11. CONTRIBUTING.md
  12. LICENSE
  13. NOTICE
  14. pom.xml
  15. README.md
README.md

SystemDS

Overview: SystemDS is a versatile system for the end-to-end data science lifecycle from data integration, cleaning, and feature engineering, over efficient, local and distributed ML model training, to deployment and serving. To this end, we aim to provide a stack of declarative languages with R-like syntax for (1) the different tasks of the data-science lifecycle, and (2) users with different expertise. These high-level scripts are compiled into hybrid execution plans of local, in-memory CPU and GPU operations, as well as distributed operations on Apache Spark. In contrast to existing systems - that either provide homogeneous tensors or 2D Datasets - and in order to serve the entire data science lifecycle, the underlying data model are DataTensors, i.e., tensors (multi-dimensional arrays) whose first dimension may have a heterogeneous and nested schema.

Quick Start Install, Quick Start and Hello World

Documentation: SystemDS Documentation

Python Documentation Python SystemDS Documentation

Status and Build: SystemDS is still in pre-alpha status. The original code base was forked from Apache SystemML 1.2 in September 2018. We will continue to support linear algebra programs over matrices, while replacing the underlying data model and compiler, as well as substantially extending the supported functionalities. Until the first release, you can build your own snapshot via Apache Maven: mvn -DskipTests clean package.

License Build Documentation Component Test Application Test Function Test Python Test Federated Python Test