Skip to main content

Auto-scaling tensor dimensions for PyTorch and TensorFlow based on available RAM

Project description

Deep Dimensions

Multi-framework tensor dimension auto-scaling for PyTorch and TensorFlow

Automatically scales tensor dimensions based on available system memory. Prevents OOM errors by intelligently reducing dimensions while preserving aspect ratios.

Installation

pip install deep-dimensions

# Or with specific framework
pip install deep-dimensions[pytorch]
pip install deep-dimensions[tensorflow]
pip install deep-dimensions[all]

Quick Start

from deep_dimensions import AutoScaler

# Auto-detects framework (PyTorch or TensorFlow)
scaler = AutoScaler()

# Scale dimensions to fit memory
dims = scaler.scale_dimensions((4096, 4096, 3))
print(f"Scaled: {dims}")

# Create a memory-safe tensor
tensor = scaler.create_scaled_tensor((8192, 8192, 3), fill_value=0.0)

Framework-Specific Usage

PyTorch

import torch
from deep_dimensions import AutoScaler, ScalingConfig

config = ScalingConfig(
    memory_threshold=0.7,      # Use max 70% of available memory
    strategy="exponential",    # Reduce larger dims more aggressively
    device="auto",             # CPU or CUDA auto-detection
)

scaler = AutoScaler(config, framework="pytorch")
tensor = scaler.create_scaled_tensor((2048, 2048, 3), dtype=torch.float16)

TensorFlow

import tensorflow as tf
from deep_dimensions import AutoScaler, ScalingConfig

config = ScalingConfig(
    memory_threshold=0.6,
    strategy="linear",
)

scaler = AutoScaler(config, framework="tensorflow")
tensor = scaler.create_scaled_tensor((2048, 2048, 3), dtype=tf.float32)

Core API

Method Description
scale_dimensions(dims, dtype) Returns scaled dimensions that fit in memory
create_scaled_tensor(dims, dtype, fill_value) Creates a tensor with auto-scaled dimensions
scale_dimensions_with_info(dims, dtype) Returns ScalingResult with metadata
can_fit(dims, dtype) Checks if dimensions fit in available memory
get_memory_info() Returns current memory status
estimate_memory(dims, dtype) Estimates memory needed for dimensions

Configuration

from deep_dimensions import ScalingConfig

config = ScalingConfig(
    memory_threshold=0.8,      # Max memory usage ratio (0-1)
    safety_margin=0.1,         # Additional safety buffer
    device="auto",             # "cpu", "cuda", or "auto"
    strategy="linear",         # "linear" or "exponential"
    framework="auto",          # "pytorch", "tensorflow", or "auto"
    min_dimensions=(32, 32),   # Minimum allowed dimensions
    max_dimensions=(4096, 4096),  # Maximum allowed dimensions
)

Scaling Strategies

Linear: Reduces all dimensions proportionally

(1024, 1024, 3) → (512, 512, 2)  # All dims scaled ~50%

Exponential: Reduces larger dimensions more aggressively

(1024, 256, 3) → (256, 128, 3)   # Larger dims reduced more

Architecture

┌─────────────────────────────────────────────────────────┐
│                     AutoScaler                          │
│  (Public API - Facade Pattern)                          │
├─────────────────────────────────────────────────────────┤
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │
│  │MemoryMonitor │  │DimensionCalc │  │FrameworkReg  │  │
│  └──────────────┘  └──────────────┘  └──────────────┘  │
├─────────────────────────────────────────────────────────┤
│         IMemoryProvider     IScalingStrategy            │
│         IFrameworkAdapter                               │
│  (Abstractions - Dependency Inversion)                  │
├─────────────────────────────────────────────────────────┤
│  ┌────────────┐ ┌────────────┐ ┌────────────┐          │
│  │SystemMem   │ │LinearScale │ │PyTorchAdpt │          │
│  │CUDAMem     │ │ExpoScale   │ │TFAdapter   │          │
│  └────────────┘ └────────────┘ └────────────┘          │
│  (Implementations - Strategy Pattern)                   │
└─────────────────────────────────────────────────────────┘

Design Principles

  • SOLID: Single responsibility, Open/closed, Interface segregation
  • Dependency Inversion: Core depends on abstractions, not implementations
  • Strategy Pattern: Pluggable scaling algorithms
  • Facade Pattern: Simple API hiding complex internals
  • Immutability: Config and result objects are frozen dataclasses
  • Fail-Fast: Validates inputs at boundaries with clear errors

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deep_dimensions-0.2.3.tar.gz (34.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

deep_dimensions-0.2.3-py3-none-any.whl (43.0 kB view details)

Uploaded Python 3

File details

Details for the file deep_dimensions-0.2.3.tar.gz.

File metadata

  • Download URL: deep_dimensions-0.2.3.tar.gz
  • Upload date:
  • Size: 34.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for deep_dimensions-0.2.3.tar.gz
Algorithm Hash digest
SHA256 84b88289f4baac2e7b460ad8d8a401d566757a021966736f009b7782be3e9b9f
MD5 b26a3093a41f1ce768aa0b5bfe438b4c
BLAKE2b-256 d4bc1d7d15744e2b1cc695da3dbdd0208d8b89adc829ccb4ccad40877f17f081

See more details on using hashes here.

File details

Details for the file deep_dimensions-0.2.3-py3-none-any.whl.

File metadata

File hashes

Hashes for deep_dimensions-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f2266f89bb20660ff8248c08633269f4c136abc6c9bca29c236b8d0a966b1d94
MD5 ac07cf5349ed6b4f5e9879fe5dbba370
BLAKE2b-256 c2cb010f57c4a47539f1b9d6ee3d42978e90ccc226d228c47e4b33ad7c6a1f5e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page