Coder Social home page Coder Social logo

shinmorino / sqaod Goto Github PK

View Code? Open in Web Editor NEW
77.0 11.0 22.0 65.27 MB

Solvers/annealers for simulated quantum annealing on CPU and CUDA(NVIDIA GPU).

Home Page: https://github.com/shinmorino/sqaod/wiki

License: Other

Python 26.72% Shell 0.14% C++ 53.48% Makefile 1.06% M4 0.46% Cuda 18.03% C 0.02% Batchfile 0.09%
cuda accelearated monte-carlo-simulation linux windows cplusplus-11 quantum-computing python nvidia-gpu quantum-annealing

sqaod's Introduction

Sqaod

Latest version : v1.0.3 (deb), 1.0.2 (python). (Nov. 11, 2018)

Collections of solvers/annealers for simulated quantum annealing on CPU and CUDA(NVIDIA GPU).
Please visit sqaod wiki for more details.

Here's a list of useful links for starters:

Project status

Version 1.0.3 Released (2018/11/17)

Version 1.0.3 includes one bug fix that was not fixed in 1.0.2. Please update to 1.0.3 if you're using older versions.

  • Fix: QUBO energy was not correctly calculated and in SA algorithms in CUDA-based solver.

Version 1.0.2 Released (2018/11/11)

  • getSystemE() is added to solvers to calculate system energy during annealing. [#60]
  • sqaod.algorithm.sa_default is added to select default SA algorithms in annealers. [#61]
  • calculate_E() and make_solutions() are not required to get QUBO energy and solutions. These functions are for caching energies and solutions. [#63]
  • Python solvers return copies of objects.[#62]
  • Fix: anneal_one_step() for SA algorithm did not work, since parameters are not correctly passed. [#65]
  • Fix: QUBO energy was not correctly calculated and beta was not correctly applied in SQA algorithms. [#64]
  • Fix: symmetrize() was not correctly handled. [#66]

Please visit the 'Release history' page for changes and updates.

Future plan

Installation

If you're using Ubuntu 16.04/18.04 or CentOS(RHEL) 7, please visit Installation page at sqaod wiki.

If you want to use other Linux distribution, you need to build from source. See wiki, Build from source. Please file a request to Issues if you need binary distribution for your linux distro. Windows version and/or docker images are possible as well.

Here's a quick instruction to install sqaod v1.0 to Ubuntu 16.04/18.04.

1. Cleaning environment.

If you installed sqaod from source, clean up native libraries at first.

find /usr/lib | grep libsqaodc
# if you find libraries, remove them.
find /usr/lib | grep libsqaodc | sudo xargs rm -f

If you installed alpha versions (alpha1, alpha2) of libsqaod, uninstall them first, and remove apt-repository setting.

# removing older packages if you instsalled.
sudo apt-get remove libsqaodc-cuda-9-0
sudo apt-get remove libsqaodc-avx2
sudo apt-get remove libsqaodc

# remove apt-repository setting.
sudo rm -f /etc/sources.list.d/sqaod.list

2. Installing native libraries

sudo apt-get update
sudo apt-get install apt-transport-https apt-utils

# adding apt repository setting.
 
. /etc/lsb-release
echo "deb [arch=amd64] https://shinmorino.github.io/sqaod/ubuntu ${DISTRIB_CODENAME} multiverse" | \
   sudo tee /etc/apt/sources.list.d/sqaod.list

# install repository key.
curl -s -L https://shinmorino.github.io/sqaod/gpgkey | sudo apt-key add -

# update and install sqaodc native library.
sudo apt-get update
sudo apt-get install libsqaodc

3. Installing CUDA driver/libraries (if you need CUDA-based solvers.)

distribution=$(. /etc/os-release;echo $ID${VERSION_ID//.})
echo "deb http://developer.download.nvidia.com/compute/cuda/repos/${distribution}/x86_64 /" | \
   sudo tee /etc/apt/sources.list.d/cuda.list
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/${distribution}/x86_64/7fa2af80.pub
sudo apt-get update
sudo apt-get install cuda-drivers

sudo apt-get install libsqaodc-cuda-10-0

# If you prefer CUDA 9.0, run following. (Packages with CUDA 9.0 is available on Ubuntu16.04.)
sudo apt-get install libsqaodc-cuda-9-0

4. Installing python package

Python 2.7/3.5/3.6/3.7.

To install sqaod python package, use pip as shown below.

pip install -U sqaod

5. Running examples

Python examples are in sqaod/sqaodpy/examples. The below is an example to run dense graph annealer.

curl -s -L -O https://raw.githubusercontent.com/shinmorino/sqaod/master/sqaodpy/example/dense_graph_annealer.py
python dense_graph_annealer.py

Dockerfile

Dockerfile for Ubuntu-16.04 with CUDA-9.2, contribution from Kato-san.

Feedback and requests

I welcome your feedback and requests.
Please file your feedback and/or requests to Issues.

Opensource software used in sqaod.

Enjoy !!!

sqaod's People

Contributors

shinmorino 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  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

sqaod's Issues

Dense graph solvers are unable to accept upper/lower trianglar matrices.

All dense graph solvers are able to deal only with symmetric matrices.
symmetrize() has been added to enable upper/lower triangle matrices, there's a misunderstanding on the equation.

Fix:

  1. Check if a given matrix is symmetric.
    1-1. If symmetric, the matrix will be used as is.
  2. If asymmetric, check if the matrix is upper/lower triangular.
    2-1 If triangular, symmetrize the mat.
  3. Error: Raise exception.

This fix will be applied to all dense graph solvers and functions.

Installation on AWS DeepLearning AMI 9.0 Ubuntu 16.04

Hi!

I am stacking on

 libsqaodc-cuda-9-0 : 依存: cuda-cublas-9-0:amd64 しかし、インストールすることができません
                      依存: cuda-cudart-9-0:amd64 しかし、インストールすることができません
                      依存: cuda-curand-9-0:amd64 しかし、インストールすることができません
                      依存: cuda-cublas-9-0 しかし、インストールすることができません
                      依存: cuda-cudart-9-0 しかし、インストールすることができません
                      依存: cuda-curand-9-0 しかし、インストールすることができません

Also, the default python there is 3.6.4 anaconda, is it not supported?

Thanks

update docs.

Build/intsall instruction.

  • configure args,
    '--enable-cuda=<path>|<ver>'
    '--with-blas'
  • CFLAGS to enable SIMD(AVX, SSE)

CUDA/GPU requirement.

  • Kepler(Cc3.5) or later.
    Recommendation is Maxwell or later.
  • Developed and tested with CUDA 9.0/9.1. Recommendation is CUDA 9.0 or later.

Simple usage.

  • Update examples

Release alpha binary.

Current testsuite executions are required.

  • Unittest in c++.
  • Unittest in python.
  • run every python script.
  • run perf app to check solutions.
  • add instructions for instsallation/build on doc.

Import Error in python when built from source for cuda

Update(9/26/2018)
Please visit Installation at sqaod wiki and follow installation instructions.

This issue was caused by version mismatch between 'self-built native libraries' and 'python package installed by pip'.
Discussion in this issue and resolutions have been already reflected to Installation.

(shinmorino)


Do I have to build also for CPU?

ubuntu@ip-172-31-6-165:~$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
ubuntu@ip-172-31-6-165:~$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Wed_Apr_11_23:16:29_CDT_2018
Cuda compilation tools, release 9.2, V9.2.88

ubuntu@ip-172-31-6-165:~$ nvidia-smi
Wed Jun  6 09:24:09 2018       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.26                 Driver Version: 396.26                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla K80           On   | 00000000:00:1E.0 Off |                    0 |
| N/A   39C    P8    30W / 149W |      0MiB / 11441MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
Python 3.6.4 |Anaconda, Inc.| (default, Jan 16 2018, 18:10:19) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqaod
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/ubuntu/anaconda3/lib/python3.6/site-packages/sqaod/__init__.py", line 10, in <module>
    from . import cpu
  File "/home/ubuntu/anaconda3/lib/python3.6/site-packages/sqaod/cpu/__init__.py", line 1, in <module>
    from . import formulas
  File "/home/ubuntu/anaconda3/lib/python3.6/site-packages/sqaod/cpu/formulas.py", line 4, in <module>
    from . import cpu_formulas as cext
ImportError: /home/ubuntu/anaconda3/lib/python3.6/site-packages/sqaod/cpu/cpu_formulas.so: undefined symbol: _ZN5sqaod12aligned_freeEPv

Refine initialization of solvers.

Temporal number of trotters should be given in constructor.
Calling order of randomize_q() and set_x() should be defined in relation with init_anneal().

Adding log switch.

using an environmental variable, SQAOD_VERBOSE, to switch log output.
When SQAOD_VERBOSE is defined and its value is not '0', SQAOD will generate logs.

set_x() with m x N matrix.

Renaming set_x() to set_q().
Implement 2 versions of the method for N-length vector and m x N-length vector.

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.