Coder Social home page Coder Social logo

golem-unlimited's Introduction

Golem Unlimited

Build Status

Golem Unlimited utilizes trusted heterogeneous computing resources which are part time idle. It is meant for data center-like setup (e.g., render farms, or desktops within organisation LAN) where network participants trust each other, but it will also support trusted P2P subnetworks (e.g., distributed team machines).

It features the hub acting as a requestor and additional worker nodes in the hub’s trusted network acting as providers.

Trust within Golem Unlimited subnetwork allows simplifying its design and taking care of only the computation layer. Other components such as economic layers, reputation systems, verification algorithms, and sandboxing (in contrast to the public Golem Network) can be skipped altogether or implemented optionally.

Golem Unlimited joint resources can be used to perform tasks for internal requestor - the hub operator - with no fee. At the same time the hub will be able to expose its subordinate trusted providers to the public Golem Network. In such a setting hub will act as a provider and earn GNTs.

The latter broadens Golem Network reach, because it currently supports just single machine nodes. With Golem Unlimited it would allow more complex components, such as a whole subnetworks.

Golem Unlimited offers three execution environments:

  • host direct -- which does not provide any sandboxing, and requires application integrator to prepare binaries for every operating system
  • docker -- integrator needs to prepare single docker image with application
  • gWASM -- integrator needs to compile desired app to WASM target and conform to gWASM format

Use cases

Most current integration for Golem Unlimited is gwasm-runner which utlise gWASM execution environment and provides simplistic API that resembles map-reduce paradigm. It enables developers to easily implement simple applications and run them on top of the Golem Unlimited and also on Brass Golem 0.21 and later.

There are more integrations being prepared (outside Golem Unlimited team by with our support). To list a few:

  • gumpi - MPI implemented on top of Golem Unlimited, utilising docker execution environment
  • Hoard Compiler - Distributed C++ compiler for Visual Studio 2017 and 2019, which supports host direct mode only for Windows 10.

Initially we have prepared plugins for two use cases:

  • Integer factorization - a "Hello World" for Golem Unlimited
  • Mining - just to showcase the Golem Unlimited, not a industry grade minig solution

Here you can watch a short demo with above two: https://youtu.be/J0LBdg2j6Tk They are not maitained any more.

Installing and testing

Please bear in mind that Golem Unlimited is in its Alpha stage.

Hub

Currently we support Hub only on Ubuntu 16.04 LTS and later.

To install Hub you can use the released Ubuntu deb.

from source

To run Hub on other OS Plaforms refer the Hub README.

Provider

To install Provider you can use the released MacOs dmg, Windows msi or Ubuntu deb packages.

from source

See the Provider README for build instructions.

Usage

Both hub and provider can be configured via CLI. Invoke them with help command to see what's possible.

The hub comes also with web UI at:

http://<hub-ip>:61622/app/index.html

Project layout

  • ethkey: Ethereum keys management
  • gu-actix: small util crate defining flatten trait for ActixWeb future
  • gu-base: implementation of common parts of Provider and Hub servers
  • gu-event-bus: event-bus implementation - publish-subscribe communication between components
  • gu-hardware: discovery of hardware resources - GPU, disk space, RAM
  • gu-hub: binary of Hub server
  • gu-lan: mDNS services discovery
  • gu-net: network layer of the application
  • gu-persist: filesystem, persistent storage of files
  • gu-provider: binary of Provider service
  • gu-envman-api: data structures used in communication with execution enviroment component on provider side.

How to Contribute to Unlimited

Here you can find information in order to give us feedback and contribute to the project.

golem-unlimited's People

Contributors

badb avatar filipgolem avatar marmistrz avatar mdtanrikulu avatar mplebanski avatar prekucki avatar quilir avatar tworec avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

golem-unlimited's Issues

UI Plugin Manager

UI Plugin package format

ZIP file:

 [ / ]
  +-- gu-plugin.json
  +-- <plugin-name>
        +- app.js
        + .... other js and html files

gu-plugin.json

{
  "name": "Mining", // plugin name
  "version": "0.1.0", // plugin version
  "author": "...", // plugin version
  "description": "", // plugin description
  "gu-version-req": "*", // required golem unlimited app version
  "load": [ "app.js" ] // scripts to load on startup
}

Other fields should be ignored.

Role of the plugin manager

UC1: Plugin installation

with running server

$ gu-hub plugin install Mining.zip

  1. Validate plugin package format.
  2. Copy package to <work_dir>/plugins/
  3. (optional) Add plugin to app config

UC2: List installed plugins

$ gu-hub plugin list

Expected result is table with columns:

  • plugin - plugin name
  • version - plugin version
  • status - active, installed, error

UC3: Uninstall a plugin

$ gu-hub plugin uninstall Mining

Serving metadata

GET /app/plug -> should return array or plugin metadata

GET /app/plug/<plugin-name>/<any-file-name>
Should return contents of file / in plugin package.

Suported mime-types:

  • *.js application/json
  • *.html text/html

Rendering App

  • simple GU UI plugin
  • blender plugin
  • blender on hostdirect
    • for windows
    • for linux
    • for macos

[hub] rights & permission management

Creating new unlimited group

$ gu-hub group create [-n name]

Exporting importing keys

$ gu-hub group export [id/or-name]

Adding node to group

$ gu-hub group add [id/or-name] [node id]

[provider] rights & permission management

  • TUI joining group
gu-provider configure
  • It should show a list of visible HUB-s. A user should be able to select trusted ones from the list.
gu-provider join [groupId] [optional ip-addr:port]

[GU-PROVIDER] session blob support

Implement part of Session API for provider:

PUT /sessions/{session-id}/blob/{blob-id}

  • uploads blob

GET /sessions/{session-id}/blob/{blob-id}

  • downloads blob
  • etag = sha1:<...>

related to #52

[GU-HUB] Session support

Session API:

GET /sessions

  • etag: version-hash
  • returns hub sessions

POST /sessions

  • params: session-type (eg. "gu-mining"), environment (eg. "hd" for host direct)
  • (201 Created + Location: /sessions/{session-id})

GET /sessions/{session-id}

  • returns basic session info

PUT /sessions/{session-id}/config

  • stores any json as session state

GET /sessions/{session-id}/config

  • gets current session state

POST /sessions/{session-id}/blob

  • creates a slot to updalod blob to HUB. Creates blob-id

PUT /sessions/{session-id}/blob/{blob-id}

  • uploads blob

GET /sessions/{session-id}/blob/{blob-id}

  • downloads blob
  • etag = sha1:<...>

DELETE /sessions/{session-id}

DELETE /sessions/{session-id}/blob/{blob-id}

[README]

  • installing
  • running
  • Golem Network integration
  • contributing

UI - HUB API

  • document UI plugin API
  • add template for manual managed tasks
  • add a template for auto assign tasks

Hardware resources discovery

A solution of this task in a version has to provide methods that allow getting following information about the system:

  • free RAM space
  • free disk space in the working directory
  • information of available GPUs' vendors
    • linux
    • windows
    • macOS

[GU-HUB] Peer session managment

New REST API:

  • Adding peers to HUB session
    POST /sessions/{session-id}/peers

  • Adding peer HostDirect session to HUB session
    POST /sessions/{session-id}/peers/{node-id}/deployments

  • Removing peer:
    DELETE /sessions/{session-id}/peers/{node-id}

it should remove Host Direct sessions created during HUB session.

  • Delete on HUB session should delete peer sessions.

EDGE Case

If a provider is offline and we destroy his sessions. HUB should remove allocated sessions if it becomes online

Option to run as a daemon

New feature for gu-hub and gu-provider

Running in the foreground

$ gu-hub server run
...runs the server in the foreground...

Running in the background

$ gu-hub server start
...starts the server in the background...

or

$ gu-hub server start
gu-hub already running (pid 1260)

Stopping server

$ gu-hub server stop
stopping server ... done

Continuous mDNS querier

Currently, golem unlimited uses hardcoded addresses for provider-hub connection. It should be replaced by dynamically connecting with available services in the local network.

To achieve this, mDNS continuous querier will be implemented (description). It will be possible to have real-time services collection.

Consider task abstraction limitations

We need to consider if and to what degree proposed Task abstraction will limit communication between tasks/processes and potential platform utilisation.

For example will it limit usage of distributed file systems? Lets say requestor sends task, but result is big, and must be transferred via HyperG or IPFS. Who will initiate the transfer and on what level (protocol/app)?

reanimate vega

vega has some issues with AMD drivers under Ubuntu 18.04
try to reinstall system

gu-provider

gu-provider features:

  • identity via gu-ethkey (with empty passwd)
  • communication via gu-p2p
  • configuration via gu-persist
  • host direct executor
    • local miner setup
      • downloading binaries
      • deployment
      • initialisation (ie. DAG generation for ETH)
    • start miner with requested configuration
    • miner API polling for status reporting (on demand)
    • stop miner
    • tags add / del
    • cleanup

Better gu-hub webapp bundling

The released version of gu-hub UI should be compiled inside binary.
We want to have one file for HUB and one file for PROVIDER.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.