GPU Acceleration

GPU-Accelerated Fractal Analysis

Application Scenarios

FreeAeon-Fractal provides GPU-accelerated versions of core computational modules, significantly improving computation speed for large images and multi-scale analysis.

Supported GPU Modules

CPU ModuleGPU ModuleSpeedup
FAImageMFS.CFAImageMFSFAImageMFSGPU.CFAImageMFSGPU5-20x
FAImageFD.CFAImageFDFAImageFDGPU.CFAImageFDGPU3-10x
FAImageLAC.CFAImageLACFAImageLACGPU.CFAImageLACGPU5-15x

System Requirements

Hardware

Software

# Install PyTorch (CUDA version) pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # Install FreeAeon-Fractal pip install FreeAeon-Fractal

Usage Examples

GPU-Accelerated 2D Multifractal Spectrum

import cv2 import numpy as np from FreeAeonFractal.FAImageMFSGPU import CFAImageMFSGPU # Load image gray_image = cv2.imread('./images/face.png', cv2.IMREAD_GRAYSCALE) # Create GPU version (default dtype=torch.float64 for single image) MFS = CFAImageMFSGPU( gray_image, q_list=np.linspace(-5, 5, 26), device='cuda', dtype=None # auto: float64 for single, float32 for batch ) # Compute (GPU accelerated) df_mass, df_fit, df_spec = MFS.get_mfs() # Visualize MFS.plot(df_mass, df_fit, df_spec)

GPU-Accelerated Fractal Dimension

from FreeAeonFractal.FAImageFDGPU import CFAImageFDGPU from FreeAeonFractal.FAImage import CFAImage bin_image, _ = CFAImage.otsu_binarize(gray_image) fd_gpu = CFAImageFDGPU(bin_image, device='cuda') fd_bc = fd_gpu.get_bc_fd() fd_dbc = fd_gpu.get_dbc_fd() fd_sdbc = fd_gpu.get_sdbc_fd() # Note: p_value is None in GPU version (not computed) print("BC FD:", fd_bc['fd'])

GPU-Accelerated Lacunarity

from FreeAeonFractal.FAImageLACGPU import CFAImageLACGPU lac_gpu = CFAImageLACGPU(gray_image, device='cuda', dtype=None) lac_result = lac_gpu.get_lacunarity()

Easy Migration from CPU to GPU

CPU version:

from FreeAeonFractal.FAImageMFS import CFAImageMFS

GPU version (just change import):

from FreeAeonFractal.FAImageMFSGPU import CFAImageMFSGPU as CFAImageMFS # Rest of code remains identical!

Auto Device Selection

import torch # Automatically choose based on GPU availability if torch.cuda.is_available(): from FreeAeonFractal.FAImageMFSGPU import CFAImageMFSGPU as CFAImageMFS print("Using GPU acceleration") else: from FreeAeonFractal.FAImageMFS import CFAImageMFS print("Using CPU") MFS = CFAImageMFS(image, q_list=np.linspace(-5, 5, 26))

Installation

pip install FreeAeon-Fractal

Performance Comparison

Test Environment

Performance Data

TaskCPU TimeGPU TimeSpeedup
2D Multifractal (q=51)45s4s11.3x
Fractal Dim BC8s2s4.0x
Fractal Dim DBC25s3s8.3x
Lacunarity35s4s8.8x

GPU-Specific Parameters

CFAImageMFSGPU

Additional parameters:

Example:

MFS = CFAImageMFSGPU( image, device='cuda:0', # Use first GPU dtype=torch.float32, # Use single precision q_chunk=10, # Process 10 q values at a time )

CFAImageFDGPU

Additional parameters:

Note: p_value field is None in GPU results (not computed). Uses torch.quantile for 99th percentile normalization. Regression uses manual OLS (no SciPy).

CFAImageLACGPU

Additional parameters:

Note: GPU batch mode requires all images to have the same shape.

Best Practices

  1. Development: Use CPU version for quick testing
  2. Production: Use GPU version for large-scale data
  3. Parameter Tuning: Test on CPU, run on GPU
  4. Memory Management: Use q_chunk and img_chunk to control VRAM usage
  5. Precision: Use float64 for single-image accuracy, float32 for batch throughput
  6. Error Handling: Gracefully fallback to CPU on errors

Troubleshooting

CUDA Out of Memory

# Solutions: # 1. Reduce image size # 2. Use float32 # 3. Reduce q_chunk or img_chunk # 4. Clear cache import torch torch.cuda.empty_cache()

References