tahamajs/Sysmem2_in_AI / ComputerAssignments /CA20_distributed_memory_systems
835 MB
10,492 files
Updated 4 months ago
Name
Size
config
data
demos
docs
integrations
notebooks
scripts
src
tests
.DS_Store6.15 kB
xet
PROJECT_COMPLETION_SUMMARY.md9.26 kB
xet
README.md12.2 kB
xet
requirements.txt2.01 kB
xet
README.md

CA20: Distributed Memory Systems in AI

๐Ÿ“– Overview

This project provides a comprehensive implementation and exploration of distributed memory systems for AI applications. It covers advanced concepts including multi-GPU memory management, sparse distributed memory, distributed shared memory, cache coherence protocols, and remote memory access.

๐ŸŽฏ Key Features

  • Sparse Distributed Memory (SDM): Pattern recognition with noise robustness
  • Distributed Shared Memory (DSM): MESI cache coherence protocol implementation
  • Remote Memory Access (RMA): Direct memory operations across nodes
  • Multi-GPU Memory Management: Load balancing and coordination
  • Memory Compression: Quantization, sparsity, and pruning techniques
  • Hierarchical Memory Systems: Multi-layer memory architectures
  • Comprehensive Benchmarking: Performance analysis and visualization

๐Ÿ“ Project Structure

CA20_distributed_memory_systems/
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ requirements.txt
โ”œโ”€โ”€ config/
โ”‚   โ””โ”€โ”€ config.yaml
โ”œโ”€โ”€ data/
โ”‚   โ”œโ”€โ”€ data/
โ”‚   โ”œโ”€โ”€ logs/
โ”‚   โ”œโ”€โ”€ models/
โ”‚   โ”œโ”€โ”€ plots/
โ”‚   โ”œโ”€โ”€ reports/
โ”‚   โ”œโ”€โ”€ results/
โ”‚   โ””โ”€โ”€ visualizations/
โ”œโ”€โ”€ demos/
โ”‚   โ”œโ”€โ”€ demo_01_sparse_distributed_memory.py
โ”‚   โ”œโ”€โ”€ demo_02_distributed_shared_memory.py
โ”‚   โ””โ”€โ”€ demo_03_complete_distributed_system.py
โ”œโ”€โ”€ docs/
โ”‚   โ”œโ”€โ”€ PROJECT_SUMMARY.md
โ”‚   โ””โ”€โ”€ README.md
โ”œโ”€โ”€ integrations/
โ”‚   โ”œโ”€โ”€ experimental_gemini_rag.py
โ”‚   โ”œโ”€โ”€ experimental_memory_optimization.py
โ”‚   โ””โ”€โ”€ experimental_vector_stores.py
โ”œโ”€โ”€ models/
โ”œโ”€โ”€ notebooks/
โ”‚   โ”œโ”€โ”€ CA20_Advanced_Experimental.ipynb
โ”‚   โ”œโ”€โ”€ CA20.ipynb
โ”‚   โ””โ”€โ”€ 01_Distributed_Memory_Systems_Complete.ipynb
โ”œโ”€โ”€ scripts/
โ”‚   โ”œโ”€โ”€ main.py
โ”‚   โ””โ”€โ”€ run.sh
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ advanced_memory.py
โ”‚   โ”œโ”€โ”€ advanced_simulators.py
โ”‚   โ”œโ”€โ”€ advanced_visualization.py
โ”‚   โ”œโ”€โ”€ ai_memory_systems.py
โ”‚   โ”œโ”€โ”€ ai_reporting.py
โ”‚   โ”œโ”€โ”€ benchmarking.py
โ”‚   โ”œโ”€โ”€ cache_algorithms.py
โ”‚   โ”œโ”€โ”€ distributed_memory.py
โ”‚   โ”œโ”€โ”€ distributed_shared_memory.py        # NEW
โ”‚   โ”œโ”€โ”€ sparse_distributed_memory.py        # NEW
โ”‚   โ”œโ”€โ”€ memory_profiler.py
โ”‚   โ”œโ”€โ”€ neural_networks.py
โ”‚   โ”œโ”€โ”€ utils.py
โ”‚   โ”œโ”€โ”€ visualization.py
โ”‚   โ””โ”€โ”€ workflow_manager.py
โ””โ”€โ”€ tests/
    โ”œโ”€โ”€ test_ai_features.py
    โ””โ”€โ”€ test_basic.py

๐Ÿš€ Quick Start

Installation

# Install dependencies
pip install -r requirements.txt

Running the Complete System

# Run main analysis
cd scripts/
python main.py

# Or use the shell script
chmod +x run.sh
./run.sh

Running Individual Demos

# Demo 1: Sparse Distributed Memory
python demos/demo_01_sparse_distributed_memory.py

# Demo 2: Distributed Shared Memory
python demos/demo_02_distributed_shared_memory.py

# Demo 3: Complete Integrated System
python demos/demo_03_complete_distributed_system.py

๐Ÿ“š Core Concepts

1. Sparse Distributed Memory (SDM)

SDM is a mathematical model of human long-term memory that:

  • Stores patterns in high-dimensional binary space
  • Retrieves based on similarity (not exact match)
  • Exhibits graceful degradation with noise
  • Supports associative recall and pattern completion

Key Features:

  • Address length: 128-256 bits
  • Configurable activation radius
  • Hierarchical multi-layer architecture
  • Noise robustness up to 30%

Usage Example:

from sparse_distributed_memory import SparseDistributedMemory, SDMConfig

config = SDMConfig(
    address_length=256,
    word_length=256,
    num_locations=10000,
    activation_radius=27
)

sdm = SparseDistributedMemory(config)

# Store pattern
address = np.random.randint(0, 2, 256, dtype=np.int8)
data = np.random.randint(0, 2, 256, dtype=np.int8)
sdm.write(address, data)

# Retrieve pattern
retrieved_data, stats = sdm.read(address)

2. Distributed Shared Memory (DSM)

DSM provides a shared memory abstraction across distributed nodes with:

  • MESI Cache Coherence Protocol: Modified, Exclusive, Shared, Invalid states
  • Directory-based Tracking: Centralized coherence management
  • Automatic Invalidation: Maintains consistency across nodes

Key Features:

  • Multiple nodes with local caches
  • Directory-based coherence
  • Support for various access patterns
  • Performance monitoring and statistics

Usage Example:

from distributed_shared_memory import DistributedSharedMemory

dsm = DistributedSharedMemory(num_nodes=4, cache_size=1024)

# Write from node 0
dsm.write(node_id=0, address=100, data=42)

# Read from node 1 (may cause cache miss)
data, stats = dsm.read(node_id=1, address=100)

# Get statistics
stats = dsm.get_statistics()
print(f"Cache hit rate: {stats['overall']['hit_rate']*100:.2f}%")

3. Remote Memory Access (RMA)

RMA enables direct read/write to remote node memory without message passing:

  • One-sided Communication: No receiver involvement
  • Low Latency: Direct memory operations
  • Scalability: Efficient for large-scale systems

Usage Example:

from distributed_shared_memory import RemoteMemoryAccess

rma = RemoteMemoryAccess(num_nodes=4)

# Put data to remote node
rma.put(source_node=0, target_node=2, address=100, data=42)

# Get data from remote node
data, stats = rma.get(source_node=0, target_node=2, address=100)

4. Multi-GPU Memory Management

Efficient memory management across multiple GPUs:

  • Load Balancing: Optimal tensor placement
  • Memory Coordination: Efficient data transfers
  • Compression: Reduce memory footprint

Usage Example:

from distributed_memory import MultiGPUMemoryManager

if torch.cuda.is_available():
    gpu_manager = MultiGPUMemoryManager(device_ids=[0, 1])

    # Allocate tensor with balanced strategy
    tensor = gpu_manager.allocate_tensor(
        shape=(1000, 1000),
        strategy='balanced'
    )

    # Get memory statistics
    stats = gpu_manager.get_memory_statistics()

๐ŸŽฎ Demonstrations

Demo 1: Sparse Distributed Memory

File: demos/demo_01_sparse_distributed_memory.py

Demonstrates:

  • Pattern storage and retrieval
  • Noise robustness testing
  • Pattern completion
  • Associative recall
  • Performance visualization

Expected Output:

  • Retrieval accuracy: 95-100%
  • Noise tolerance: Up to 30%
  • Pattern completion: 70-90% accuracy

Demo 2: Distributed Shared Memory

File: demos/demo_02_distributed_shared_memory.py

Demonstrates:

  • Cache coherence protocols
  • Sequential vs random access patterns
  • Write invalidations
  • Mixed read/write workloads
  • RMA performance

Expected Output:

  • Sequential access hit rate: 80-95%
  • Random access hit rate: 40-60%
  • Average invalidations per write: 1-3

Demo 3: Complete Integrated System

File: demos/demo_03_complete_distributed_system.py

Demonstrates:

  • Hierarchical SDM
  • DSM with realistic workload
  • Multi-GPU management
  • Memory compression
  • RMA operations
  • Comprehensive visualization

Expected Output:

  • Integrated system performance metrics
  • Compression ratios: 0.2-0.5
  • GPU utilization: 60-80%

๐Ÿ“Š Benchmarking

Run comprehensive benchmarks:

python scripts/main.py

This will execute:

  1. Memory access pattern analysis
  2. Cache-aware algorithm benchmarks
  3. Distributed memory systems tests
  4. SDM performance evaluation
  5. DSM cache coherence analysis
  6. Memory compression comparison

Results are saved to data/visualizations/ and data/results/.

๐Ÿงช Testing

Run the test suite:

# Run all tests
cd tests/
python test_basic.py
python test_ai_features.py

# Run specific test
python -m pytest tests/test_basic.py -v

๐Ÿ“ˆ Performance Metrics

Sparse Distributed Memory

  • Retrieval Accuracy: 95-100% for clean patterns
  • Noise Robustness: 70-90% accuracy with 20% noise
  • Pattern Completion: 80-95% with 30% missing data
  • Memory Utilization: 15-25% of locations

Distributed Shared Memory

  • Cache Hit Rate: 70-95% (depends on access pattern)
  • Sequential Access: 85-95% hit rate
  • Random Access: 40-60% hit rate
  • Invalidation Overhead: 1-3 invalidations per write

Multi-GPU Management

  • Load Balancing: Within 5% across GPUs
  • Transfer Overhead: 2-5% of computation time
  • Memory Efficiency: 85-95% utilization

Memory Compression

  • Quantization: 0.25 ratio, <0.01 MSE
  • Sparsity: 0.3-0.5 ratio, <0.05 MSE
  • Pruning: 0.4-0.6 ratio, <0.02 MSE

๐Ÿ”ฌ Advanced Topics

Hierarchical SDM

Multi-layer SDM for improved capacity and accuracy:

from sparse_distributed_memory import HierarchicalSDM

h_sdm = HierarchicalSDM(num_layers=3)
h_sdm.write_hierarchical(address, data)
retrieved, stats = h_sdm.read_hierarchical(address)

Memory Compression

Reduce memory footprint with various techniques:

from distributed_memory import MemoryCompressionManager

compressor = MemoryCompressionManager()
compressed = compressor.compress_tensor(tensor, method='quantization')
decompressed = compressor.decompress_tensor(
    compressed['compressed_data'], 'quantization'
)

Cache Coherence Simulation

Simulate MESI protocol behavior:

from advanced_memory import CacheCoherenceSimulator

simulator = CacheCoherenceSimulator(num_cores=4, protocol='MESI')
result = simulator.access_memory(core_id=0, address=100, operation='read')
stats = simulator.get_coherence_statistics()

๐Ÿ“– Documentation

Detailed documentation is available in the docs/ folder:

  • README.md - Comprehensive project guide
  • PROJECT_SUMMARY.md - Technical summary and architecture

๐Ÿค Integration with AI Frameworks

Gemini API Integration

from ai_memory_systems import GeminiMemoryAnalyzer

analyzer = GeminiMemoryAnalyzer(api_key='your-api-key')
analysis = analyzer.analyze_memory_patterns(memory_data)

LangChain Integration

from ai_memory_systems import LangChainMemoryManager

manager = LangChainMemoryManager()
doc_id = manager.store_memory_analysis(analysis_data, "Description")

LangGraph Workflow

from ai_memory_systems import LangGraphMemoryWorkflow

workflow = LangGraphMemoryWorkflow()
result = await workflow.run_memory_analysis(initial_state)

๐ŸŽ“ Learning Resources

Recommended Reading

  1. "Distributed Shared Memory: Concepts and Systems" (IEEE)
  2. "Sparse Distributed Memory" by Pentti Kanerva
  3. "Memory Systems: Cache, DRAM, Disk" by Bruce Jacob
  4. PyTorch Distributed Documentation

Key Papers

  • Kanerva, P. (1988). "Sparse Distributed Memory"
  • Li, K. (1986). "Shared Virtual Memory on Loosely Coupled Multiprocessors"
  • Censier, L. M., & Feautrier, P. (1978). "A New Solution to Coherence Problems"

๐Ÿ› Troubleshooting

Common Issues

Issue: CUDA out of memory

# Solution: Use gradient checkpointing or smaller batch sizes
torch.cuda.empty_cache()

Issue: Import errors

# Solution: Ensure all dependencies are installed
pip install -r requirements.txt

Issue: Slow performance

# Solution: Enable memory optimization
config.use_compression = True
config.cache_size = 2048  # Increase cache size

๐Ÿ“ Citation

If you use this project in your research, please cite:

@software{ca20_distributed_memory,
  title = {CA20: Distributed Memory Systems in AI},
  author = {System2 in AI Course},
  year = {2025},
  url = {https://github.com/your-repo/CA20}
}

๐Ÿ“„ License

This project is part of the System2_in_AI course materials.

๐Ÿค Contributing

Contributions are welcome! Please feel free to submit issues or pull requests.

๐Ÿ“ง Contact

For questions or support, please open an issue in the repository.


Last Updated: January 2025
Version: 2.0
Status: โœ… Complete and Working

This project is part of the System2_in_AI CA collection.

Total size
835 MB
Files
10,492
Last updated
Jun 17
Pre-warmed CDN
US EU US EU

Contributors