Code Monkey home page Code Monkey logo

ripples's Introduction

Ripples

Ripples is a software framework to study the Influence Maximization problem. The problem of Influence Maximization was introduced in 2001 by Domingos and Richardson [DR01] and later formulated as an optimization problem under the framework of submodular functions by Kempe et al. [KTR03].

Given a graph G, a network diffusion model M, and positive integer k, the influence maximization problem is the problem of selecting a set of seeds S of cardinality k such that \mathop{\mathbb{E}}[I(S)] is maximized, where I(S) is the influence function.

Our goal with Ripples is to provide tools implementing fast and scalable state-of-the-art approximation algorithms to solve the influence maximization problem.

[DR01]Pedro M. Domingos and Matthew Richardson. 2001. Mining the network value of customers. In Proceedings of the seventh ACM SIGKDD international conference on Knowledge discovery and data mining, San Francisco, CA, USA, August 26-29, 2001. ACM, 57–66.
[KTR03]Kempe, D., Kleinberg, J., & Tardos, É. (2003, August). Maximizing the spread of influence through a social network. In Proceedings of the ninth ACM SIGKDD international conference on Knowledge discovery and data mining (pp. 137-146). ACM.

Publications

[Cluster19]Marco Minutoli, Mahantesh Halappanavar, Ananth Kalyanaraman, Arun Sathanur, Ryan Mcclure, Jason McDermott. 2019. Fast and Scalable Implementations of Influence Maximization Algorithms. In Proceedings of the IEEE Cluster 2019.
[ICS2020]Minutoli, Marco, Maurizio Drocco, Mahantesh Halappanavar, Antonino Tumeo, and Ananth Kalyanaraman. "cuRipples: influence maximization on multi-CPU systems." In Proceedings of the 34th ACM International Conference on Supercomputing.

Quickstart with Conan

First of all we need to set up the Python environment needed.

$ python -m venv --prompt ripples-dev .venv
$ source .venv/bin/activate
$ pip install conan

Then, we set up the conan profile:

$ conan profile detect

You can check that the conan has detected the correct compiler by:

$ conan profile show

In many cases this will show the correct configuration. Notable exceptions are systems where you want to use a provided compiler wrapper (e.g., many HPE machines ship compiler wrappers) or you want to use hipcc to compile the framework. In that case you want to edit your conan profile file with:

$ vim $(conan profile path default)

Here as a reference you can find how to change the profile to use hipcc:

[settings]
arch=x86_64
build_type=Release
compiler=clang
compiler.cppstd=gnu14
compiler.libcxx=libstdc++11
compiler.version=15
os=Linux
[buildenv]
*:CC=hipcc
*:CXX=hipcc

The next step is to install dependencies:

$ conan create conan/trng
$ conan create conan/rocThrust # if compiling with AMD GPU support.
$ conan create conan/metall    # if compiling with Metall support.
$ conan install . --build missing
$ conan install . --build missing -o gpu=amd # for AMD GPU support.

We can now compile ripples:

$ conan build .               # CPU only version
$ conan build . -o gpu=amd    # with AMD GPU support.

To enable Memkind or Metall please replace the conan install command with one of:

Allocate RRRSets Using Metall

Ripples + Metall has another mode that allocates intermediate data (called RRRSets) using Metall.

To enable the mode, define ENABLE_METALL_RRRSETS macro (e.g., insert #define ENABLE_METALL_RRRSETS at the beginning of tools/imm.cc).

The storage directory can be specified with --rr-store-dir=<PATH> argument when executing imm.

Ripples Team

Disclamer Notice

This material was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Government nor the United States Department of Energy, nor Battelle, nor any of their employees, nor any jurisdiction or organization that has cooperated in the development of these materials, makes any warranty, express or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness or any information, apparatus, product, software, or process disclosed, or represents that its use would not infringe privately owned rights.

Reference herein to any specific commercial product, process, or service by trade name, trademark, manufacturer, or otherwise does not necessarily constitute or imply its endorsement, recommendation, or favoring by the United States Government or any agency thereof, or Battelle Memorial Institute. The views and opinions of authors expressed herein do not necessarily state or reflect those of the United States Government or any agency thereof.

PACIFIC NORTHWEST NATIONAL LABORATORY
operated by
BATTELLE
for the
UNITED STATES DEPARTMENT OF ENERGY
under Contract DE-AC05-76RL01830

ripples's People

Contributors

kiwabuchi avatar mminutoli avatar neffrw avatar reetbarik 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

ripples's Issues

Ripples MPI Compilation Error

          It seems Ripples build on Perlmutter with MPI enabled would fail on this line. Ripples with MPI disabled will build successfully. The latest good commit hash if MPI is enabled for Ripples: `c6446e291dceb`. g++ version: `g++ (GCC) 11.2.0 20210728 (Cray Inc.)`. Error message:
../../tools/mpi-imm.cc: In function ‘int main(int, char**)‘:
../../tools/mpi-imm.cc:166:24: error: expected unqualified-id before ‘=’ token
 166 |  std::allocator<char> = GraphAllocator;
   |            ^
../../tools/mpi-imm.cc:167:62: error: ‘GraphAllocator’ was not declared in this scope
 167 |  GraphFwd Gf = ripples::loadGraph<GraphFwd>(CFG, weightGen, GraphAllocator);
   |                               ^~~~~~~~~~~~~~
Waf: Leaving directory `/global/u1/h/hxu398/ripples/build/release’
Build failed
 -> task in ‘mpi-imm’ failed with exit status 1 (run with -v to display more information)

Originally posted by @hxu296 in #6 (comment)

Parallem imm runs for a long time

Here's the command I run:
./build/release/tools/imm -i ./edgelists/HepPh_sym-sorted-edge-list.txt -u -w --distribution normal --mean 0.1 --variance 0.0 --disable-renumbering -k 200 -p -d IC -e 0.5 -o output.txt

Without the -p option, the sequential running time match the paper well. But after adding the -p option, it takes much time to run (much longer than sequential time).

I'm using a machine with 100 CPUs and no GPUs. And I'm sure the memory is enough for it.

Do you have any idea why the parallel imm doesn't work? @mminutoli
Thank you very much.

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.