Skip to content
/ dpu_kmeans Public template
generated from SylvanBrocard/dpu_trees

Implementation of the K-means algorithm on UPMEM PIM architecture

License

Notifications You must be signed in to change notification settings

upmem/dpu_kmeans

Repository files navigation

dpu_kmeans README

CI status
pip builds Pip Actions Status
docs Doc Status

A project built with pybind11 and scikit-build, running the KMeans algorithm on in-memory processors with the UPMEM SDK.

Documentation

Installation

  • install the UPMEM SDK
  • pip install dpu-kmeans

If you get an error about RANLIB, create a symlink to llvm-ar:

sudo ln -s /usr/bin/llvm-ar /usr/bin/llvm-ranlib

Usage

import numpy as np
from dpu_kmeans import KMeans

X = np.array([[1, 2], [1, 4], [1, 0],[10, 2], [10, 4], [10, 0]])

kmeans = KMeans(2)
kmeans.fit(X)

print(kmeans.cluster_centers_)

Output:

[[ 0.99986267  2.        ]
 [10.00013733  2.        ]]

Development

  • clone this repository
  • install the UPMEM SDK
  • install the build requirements in pyproject.toml
  • cd dpu_kmeans
  • pre-commit install
  • pip install -e .

OR

  • clone this repository
  • open folder in VS Code
  • start in Dev Container

to debug: python setup.py develop --build-type Debug

Note: The dev container is for development only and uses the PIM simulator.

Templating

To use this project as a base for your own UPMEM DIMM project:

  • click on "Use this template" in github
  • create a new project from this one
  • turn off Conda and Wheels workflows in github actions as they are not operational right now
  • change folder src/dpu_kmeans to src/<your_project>
  • change project name (all instances of dpu_kmeans) and info in:
    • README.md
    • setup.cfg
    • setup.py (cmake_install_dir="src/dpu_kmeans")
    • .gitignore (src/dpu_kmeans/dpu_program/)
    • CMakeLists.txt (project(dpu_kmeans VERSION ${VERSION}))
    • conda.recipe/meta.yaml (optional)
    • docs (optional)
  • if you intend to use github actions to auto-publish to pypi, update the project secrets as described in Publishing package distribution releases using GitHub Actions CI/CD workflows

Testing

  • clone this repository
  • install the UPMEM SDK
  • install nox
  • cd dpu_trees
  • nox

OR

  • clone this repository
  • open folder in VS Code
  • start in Dev Container
  • nox

Note: nox, python setup.py and pip might fail if you executed pip install -e . previously, delete the _skbuild cache or run python setup.py clean to solve.

Test call

import dpu_kmeans
dpu_kmeans.test_checksum()

Expected return: 0x007f8000