kitsudaiki / Hanami

A custom developed artificial neural network, which can grow over time and doesn't require normalization of input-values, within an as-a-Service structure.
https://docs.hanami-ai.com
Apache License 2.0
8 stars 0 forks source link
ai ai-as-a-service cpp dashboard energy-efficiency experimental gpu-computing kubernetes-deployment multi-tenants neural-network openapi-documentation

Hanami

Github workfloat status GitHub release GitHub Platform

IMPORTANT: This project is still an experimental prototype and NOT ready for any productive usage.

Intro

Hanami contains in its core a custom concept for neural networks, which are very flexible in their behavior and structure, which is packed in an as-a-Service backend. The backend is completely written from scratch in C++.

Initial goal

I started this project without a specific use-case in mind. The only goal was to create a neural network, which is much more dynamic, compared to other classical networks, in regard of learning behavior and structure. It should behave more like the human brain. So it was basically a private research project. But it also shouldn't be only a simple PoC. I also wanted a good performance, so I written it in C++, optimized the data-structure many time and added multi-threading and CUDA-support. Mostly it was tested so far with the MNIST-test, because this is the Hello-world of neural networks, but also other little constructed examples.

Despite the missing goal of the concept, this entire project was and still is a very good base for me to improve my developer skills and learn new technologies.

Current state of the project

Like already written above, it is still a prototype. There are still many missing tests, input-validations, comments and so on. This project is currently only written by a single person beside a 40h/week job.

Current prototypically implemented features

Known disadvantages (so far)

Possible use-case (maybe)

Because the normalization of input is not necessary, together with the good performance of training single inputs (based on the benchmark) and the direct interaction remotely over websockets, could make this project useful for processing measurement-data of sensors of different machines, especially for new sensors, where the exact maximum output-values are unknown. So continuous training of the network right from the beginning would be possible, without collecting a bunch of data at first.

Summary important links

https://docs.hanami-ai.com

If you need help to setup things, have a question or something like this, feel free to contact me by eMail or use the Question-template in the issues.

Issue-Overview

Hanami-Project

This repository

Required packages for development:

sudo apt-get install -y git ssh gcc g++ clang-15 clang-format-15 make cmake bison flex libssl-dev libcrypto++-dev libboost1.74-dev uuid-dev  libsqlite3-dev protobuf-compiler nvidia-cuda-toolkit

Clone repo with:

git clone --recurse-submodules https://github.com/kitsudaiki/Hanami.git
cd Hanami

# load pre-commit hook
git config core.hooksPath .git-hooks

In case the repo was cloned without submodules initially:

git submodule init
git submodule update --recursive

Mkdocs and plugins:

pip3 install mkdocs-material mkdocs-swagger-ui-tag mkdocs-drawio-exporter

(to build the documentation Draw.io also has to be installed on the system)

Build

For the build of the docker-images, earthly is used.

Build Hanami

The code can be build as image like this:

earthly +image --image_name=<DOCKER_IMAGE_NAME>

Example:

earthly +image --image_name=hanami:test

Build Hanami-docs

The documenation can be build as image like this:

earthly +docs --image_name=<DOCKER_IMAGE_NAME>

Example:

earthly +docs --image_name=hanami_docs:test

The documentation listen on port 8000 within the docker-container. So the port has to be forwarded into the container:

docker run -p 127.0.0.1:8080:8000 hanami_docs:test

After this within the browser the addess 127.0.0.1:8080 can be entered to call the documenation within the browser.

Contributing

If you want to help the project by contributing things, you can check the Contributing guide.

Author

Tobias Anker

eMail: tobias.anker@kitsunemimi.moe

License

The complete project is under Apache 2 license.