Giter Club home page Giter Club logo

amalanpsiog / covalent Goto Github PK

View Code? Open in Web Editor NEW

This project forked from agnostiqhq/covalent

0.0 0.0 0.0 81.68 MB

Pythonic tool for running data-science/high performance/quantum workflows on advanced computing hardware. Make your complex workflows modular, scalable and reproducible.

Home Page: https://agnostiq.ai/covalent

License: GNU Affero General Public License v3.0

JavaScript 34.88% Python 57.73% CSS 0.23% Makefile 0.01% HTML 0.49% Jupyter Notebook 6.42% Dockerfile 0.24%

covalent's Introduction

ย 

version python tests publish docs codecov agpl

๐Ÿค” What is Covalent?

Covalent is a Pythonic workflow tool used to execute HPC and quantum tasks in heterogenous environments. Computational scientists and engineers use Covalent to...

  • rapidly iterate prototypes and exploratory research models
  • automate, manage, and share reproducible experiments
  • visualize data and task dependencies in an interactive user interface
  • run code in heterogenous compute environments, including in hybrid-cloud and hybrid-quantum configurations
  • understand where time and money is spent across a project

Covalent may be deployed locally or as a set of containers. Covalent is rapidly expanding to include support for a variety of cloud interfaces, including HPC infrastructure tools developed by major cloud providers and emerging quantum APIs. It has never been easier to deploy your code on the world's most advanced computing hardware with Covalent.

Read more in the official documentation.

โœจ Features

  • Purely Pythonic: No need to learn any new syntax or mess around with YAML. Construct your complex workflow programmatically with native Python functions. By just adding one-line decorators to your functions, you can supercharge your experiments.
  • Native parallelization: Covalent natively parallelizes mutually independent parts of your workflow.
  • Monitor with UI: Covalent provides an intuitive and aesthetically beautiful browser-based user interface to monitor and manage your workflows.
  • Abstracted dataflow: No need to worry about the details of the underlying data structures. Covalent takes care of data dependencies in the background while you concentrate on understanding the big picture.
  • Result management: Covalent manages the results of your workflows. Whenever you need to modify parts of your workflow, from inputs to components, Covalent stores and saves the run of every experiment in a reproducible format.
  • Containerized services: Covalent's microservices can be run as containers locally, on the cloud, on a supercomputer, or any hybrid combination of these.
  • Little-to-no overhead: Covalent is designed to be as lightweight as possible and is optimized for the most common use cases. Covalent's overhead is less than 0.1% of the total runtime for typical high compute applications and often has a constant overhead of ~ 10-100ฮผs -- and this is constantly being optimized.
  • Interactive: Unlike other workflow tools, Covalent is interactive. You can view, modify, and re-submit workflows directly within a Jupyter notebook.

covalent user interface

For a more in-depth description of Covalent's features and how they work, refer to the Concepts page in the documentation.

๐Ÿ“– Example

Begin by starting the Covalent servers:

covalent start

As an alternative, Covalent can be run using Docker:

# Run the containers locally using docker after cloning this repository
docker-compose -f docker-compose.yml up -d

Navigate to the user interface at http://localhost:8000 to monitor workflow execution progress.

In your Python code, it's as simple as adding a few decorators! Consider the following example which uses a support vector machine (SVM) to classify types of iris flowers.

Without Covalent With Covalent
from numpy.random import permutation
from sklearn import svm, datasets

def load_data():
    iris = datasets.load_iris()
    perm = permutation(iris.target.size)
    iris.data = iris.data[perm]
    iris.target = iris.target[perm]
    return iris.data, iris.target

def train_svm(data, C, gamma):
    X, y = data
    clf = svm.SVC(C=C, gamma=gamma)
    clf.fit(X[90:], y[90:])
    return clf

def score_svm(data, clf):
    X_test, y_test = data
    return clf.score(
    	X_test[:90],
	y_test[:90]
    )

def run_experiment(C=1.0, gamma=0.7):
    data = load_data()
    clf = train_svm(
    	data=data,
	C=C,
	gamma=gamma
    )
    score = score_svm(data=data, clf=clf)
    return score

result=run_experiment(C=1.0, gamma=0.7)
from numpy.random import permutation
from sklearn import svm, datasets
import covalent as ct

@ct.electron
def load_data():
    iris = datasets.load_iris()
    perm = permutation(iris.target.size)
    iris.data = iris.data[perm]
    iris.target = iris.target[perm]
    return iris.data, iris.target

@ct.electron
def train_svm(data, C, gamma):
    X, y = data
    clf = svm.SVC(C=C, gamma=gamma)
    clf.fit(X[90:], y[90:])
    return clf

@ct.electron
def score_svm(data, clf):
    X_test, y_test = data
    return clf.score(
    	X_test[:90],
	y_test[:90]
    )

@ct.lattice
def run_experiment(C=1.0, gamma=0.7):
    data = load_data()
    clf = train_svm(
    	data=data,
	C=C,
	gamma=gamma
    )
    score = score_svm(
    	data=data,
	clf=clf
    )
    return score

dispatchable_func = ct.dispatch(run_experiment)

dispatch_id = dispatchable_func(
    	C=1.0,
    	gamma=0.7
    )
result = ct.get_result(dispatch_id)
>>> print(result)
0.988888888
>>> print(f"""
... status     = {result.status}
... input      = {result.inputs}
... result     = {result.result}
... """)
status     = Status(STATUS='COMPLETED')
input      = {'C': 1.0, 'gamma': 0.7}
result     = 0.988888888

For more examples, please refer to the Covalent tutorials.

๐Ÿ“ฆ Installation

Covalent is developed using Python versions 3.8 and 3.9 on Linux and macOS. The easiest way to install Covalent is using the PyPI package manager:

pip install cova

Refer to the Getting Started guide for more details on setting up. For a full list of supported platforms, consult the Covalent compatibility matrix. Read this guide if you are migrating from cova version 0.3x.

๐Ÿ”ง How it Works

Covalent uses a containerized microservice architecture consisting of eight core services which consume and process workflows. Workflows are submitted to a queue service, which forwards them to a NATS message queue. A consumer service processes workflows one-by-one (or in parallel, on some systems) by forwarding them to a dispatcher service. The dispatcher analyzes task and data dependencies and submits execution requests to a runner service, which runs tasks in parallel, either locally or on a remote device, according to hardware capabilities and task requirements. Results are managed by the results and data services, and a user interface service provides an interactive dashboard where users can monitor and organize experiments.

covalent architecture

To learn more about how Covalent's microservices communicate with each other, check out the Covalent API spec on SwaggerHub.

๐Ÿ“š Documentation

The official documentation includes tips on getting started, some high level concepts, a handful of tutorials, and the API documentation. To learn more, please refer to the Covalent documentation.

โœ”๏ธ Contributing

To contribute to Covalent, refer to the Contribution Guidelines. We use GitHub's issue tracking to manage known issues, bugs, and pull requests. Get started by forking the develop branch and submitting a pull request with your contributions. Improvements to the documentation, including tutorials and how-to guides, are also welcome from the community. Participation in the Covalent community is governed by the Code of Conduct.

๐Ÿ“ Release Notes

Release notes are available in the Changelog.

๐Ÿ’ฅ Known Issues

โš“ Citation

Please use the following citation in any publications:

W. J. Cunningham, S. K. Radha, F. Hasan, J. Kanem, S. W. Neagle, and S. Sanand. Covalent. Zenodo, 2022. https://doi.org/10.5281/zenodo.5903364

๐Ÿ“ƒ License

Covalent is licensed under the GNU Affero GPL 3.0 License. Covalent may be distributed under other licenses upon request. See the LICENSE file or contact the support team for more details.

covalent's People

Contributors

wjcunningham7 avatar kessler-frost avatar jkanem avatar fyzhsn avatar haimhorowitzagnostiq avatar cjao avatar valkostadinov avatar sayandipdutta avatar alejandroesquivel avatar scottwn avatar udayan853 avatar aobasi4 avatar emmanuel289 avatar rachana-uniyal avatar venkatbala avatar

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.