leideng/QCFuse / srt /utils /torch_memory_saver_adapter.py
leideng's picture
download
raw
2.51 kB
import logging
from abc import ABC
from contextlib import contextmanager
try:
import torch_memory_saver
_memory_saver = torch_memory_saver.torch_memory_saver
import_error = None
except ImportError as e:
import_error = e
pass
logger = logging.getLogger(__name__)
class TorchMemorySaverAdapter(ABC):
@staticmethod
def create(enable: bool):
if enable and import_error is not None:
logger.warning(
"enable_memory_saver is enabled, but "
"torch-memory-saver is not installed. Please install it "
"via `pip3 install torch-memory-saver`. "
)
raise import_error
return (
_TorchMemorySaverAdapterReal() if enable else _TorchMemorySaverAdapterNoop()
)
def check_validity(self, caller_name):
if not self.enabled:
logger.warning(
f"`{caller_name}` will not save memory because torch_memory_saver is not enabled. "
f"Potential causes: `enable_memory_saver` is false, or torch_memory_saver has installation issues."
)
def configure_subprocess(self):
raise NotImplementedError
def region(self, tag: str, enable_cpu_backup: bool = False):
raise NotImplementedError
def pause(self, tag: str):
raise NotImplementedError
def resume(self, tag: str):
raise NotImplementedError
@property
def enabled(self):
raise NotImplementedError
class _TorchMemorySaverAdapterReal(TorchMemorySaverAdapter):
"""Adapter for TorchMemorySaver with tag-based control"""
def configure_subprocess(self):
return torch_memory_saver.configure_subprocess()
def region(self, tag: str, enable_cpu_backup: bool = False):
return _memory_saver.region(tag=tag, enable_cpu_backup=enable_cpu_backup)
def pause(self, tag: str):
return _memory_saver.pause(tag=tag)
def resume(self, tag: str):
return _memory_saver.resume(tag=tag)
@property
def enabled(self):
return _memory_saver is not None and _memory_saver.enabled
class _TorchMemorySaverAdapterNoop(TorchMemorySaverAdapter):
@contextmanager
def configure_subprocess(self):
yield
@contextmanager
def region(self, tag: str, enable_cpu_backup: bool = False):
yield
def pause(self, tag: str):
pass
def resume(self, tag: str):
pass
@property
def enabled(self):
return False

Xet Storage Details

Size:
2.51 kB
·
Xet hash:
7a6ba47cda1c346687ed04002ed0bdb119051ca199382fb9f97cd2cf47a3b524

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.