Skip to main content

mp-kmeans

PyPI - Python Version

A mixed-precision algorithm of $k$-means is designed towards understanding of the low precision arithmetic for Euclidean distance computations. By performing simulations across data with various settings, we showcase that decreased precision for $k$-means computing only results in a minor increase in sum of squared errors while not necessarily leading to degrading performance regarding clustering results.

mp-kmeans is a CUDA-accelerated mixed-precision implementation of k-means designed for large-scale clustering workloads. It provides multiple precision paths (FP16/BF16/FP32/FP64 and mixed fallback modes) to balance throughput and numerical stability.

Features

  • Mixed-precision Euclidean distance kernels for GPU k-means.
  • Uniform precision modes (fp16, bf16, fp32, fp64) and mixed modes (e.g. fp16_fp32, fp16_fp64).
  • CUDA center update kernels with automatic empty-cluster reinitialization.
  • Configurable normalization (standard, l2, minmax) for robust behavior on unnormalized datasets.

Installation

pip install mp-kmeans

This package targets CUDA-enabled environments and depends on PyTorch with CUDA support.

Quick Start

import torch
from mp_kmeans import KMeansPlusPlus, make_blobs_gpu

X, _ = make_blobs_gpu(
    n_samples=100_000,
    n_features=128,
    n_centers=100,
    cluster_std=1.0,
    random_state=42,
)

model = KMeansPlusPlus(
    n_clusters=100,
    kernel="fp16_fp32",
    kappa=10.0,
    max_iter=300,
    tol=1e-8,
    normalize="standard",
    random_state=42,
)

model.fit(X)
print(model.n_iter_, model.inertia_)

Kernel Modes

  • Uniform: fp16_uniform, bf16_uniform, tf32_uniform, fp32_uniform, fp64_uniform
  • Mixed: fp16_fp32, bf16_fp32, fp32_fp32, fp16_fp64, bf16_fp64, tf32_fp64, fp32_fp64
  • Advanced: fp64_fp16, fp64_bf16, fp64_tf32, fp64_fp32_gemm

Citation

@techreport{ccl24,
  author = "Erin Carson and Xinye Chen and Xiaobo Liu",
  title = "Computing $k$-means in Mixed Precision",
  month = jul,
  year = 2024,
  type = "{ArXiv}:2407.12208 [math.{NA}]",
  url = "https://arxiv.org/abs/2407.12208"
}

Metadata

Release files for mp-kmeans 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mp-kmeans 0.1.0
File Size Uploaded
mp_kmeans-0.1.0.tar.gz 559.2 kB Details

Release files / mp_kmeans-0.1.0.tar.gz

Download URL mp_kmeans-0.1.0.tar.gz
Size 559.2 kB
Tags Source
SHA-256 checksum
How to use checksums
b71b9310f1e20afba0afc986d71d8ef981415de4c34485aaebe3cf24a4d60f09
BLAKE2b-256 checksum
How to use checksums
5fcc121af020d7ac24c5d566a82fa5254b9d48c3c7fca7bf57524447d9699667
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.11

Release history Release notifications | RSS feed

This release

0.1.0 This release

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page