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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84b88289f4baac2e7b460ad8d8a401d566757a021966736f009b7782be3e9b9f
|
|
| MD5 |
b26a3093a41f1ce768aa0b5bfe438b4c
|
|
| BLAKE2b-256 |
d4bc1d7d15744e2b1cc695da3dbdd0208d8b89adc829ccb4ccad40877f17f081
|
File details
Details for the file deep_dimensions-0.2.3-py3-none-any.whl.
File metadata
- Download URL: deep_dimensions-0.2.3-py3-none-any.whl
- Upload date:
- Size: 43.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2266f89bb20660ff8248c08633269f4c136abc6c9bca29c236b8d0a966b1d94
|
|
| MD5 |
ac07cf5349ed6b4f5e9879fe5dbba370
|
|
| BLAKE2b-256 |
c2cb010f57c4a47539f1b9d6ee3d42978e90ccc226d228c47e4b33ad7c6a1f5e
|