Files
wehub-resource-sync 770d92cb1f
Lint / lint (push) Has been cancelled
Build Docs / Deploy Docs (push) Has been cancelled
Windows CI / Windows (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:23:58 +08:00

94 lines
2.7 KiB
Python

"""Statistics of the loading process of parameter loaders"""
import dataclasses
import time
from contextlib import contextmanager
from mlc_llm.support import logging
from mlc_llm.support.style import green
logger = logging.getLogger(__name__)
@dataclasses.dataclass
class Stats:
"""Statistics of the loading process of parameter loaders.
Attributes
----------
load_time_sec : float
Time used in loading the parameters.
map_time_sec : float
Time used in applying the mapping function, i.e. `ExternMapping.map_func`.
quant_time_sec : float
Time used in quantizing the parameters, i.e. `QuantizeMapping.quant_func`.
current_memory_gb : float
The current RAM usage in GB.
total_memory_gb : float
The total size data loaded from disk in GB.
max_memory_gb : float
The maximum RAM usage in GB.
total_param_num: int
Total number of parameters (original non-MLC model weights), excluding unused params.
"""
load_time_sec: float = 0.0
map_time_sec: float = 0.0
quant_time_sec: float = 0.0
current_memory_gb: float = 0.0
total_memory_gb: float = 0.0
max_memory_gb: float = 0.0
total_param_num: int = 0
def timer(self, attr):
"""A context manager to time the scope and add the time to the attribute."""
@contextmanager
def timed_scope():
start_time = time.time()
yield
elapsed_time = time.time() - start_time
setattr(self, attr, getattr(self, attr) + elapsed_time)
return timed_scope()
def mem_add(self, nbytes: int):
"""Add the memory usage by the given number of bytes."""
mem_gb = float(nbytes) / float(1024**3)
self.current_memory_gb += mem_gb
self.total_memory_gb += mem_gb
self.max_memory_gb = max(self.max_memory_gb, self.current_memory_gb)
def mem_rm(self, nbytes: int):
"""Remove the memory usage by the given number of bytes."""
mem_gb = float(nbytes) / float(1024**3)
self.current_memory_gb -= mem_gb
def log_time_info(self, weight_format: str):
"""Log the time used in loading, pre-quantization and quantization."""
logger.info(
"%s: %s loading: %.3f sec; Pre-quantization mapping: %.3f sec; Quantization: %.3f sec",
green("Time usage"),
weight_format,
self.load_time_sec,
self.map_time_sec,
self.quant_time_sec,
)
def log_mem_usage(self):
"""Log the Memory usage information."""
logger.info(
"%s: Peak RAM: %.3f GB. Total bytes loaded from disk: %.3f GB",
green("RAM usage"),
self.max_memory_gb,
self.total_memory_gb,
)