Implementation:CarperAI Trlx Logging
| Knowledge Sources | |
|---|---|
| Domains | Infrastructure, Distributed_Training |
| Last Updated | 2026-02-07 16:00 GMT |
Overview
Concrete tool for multi-process aware logging in the trlx library, with configurable verbosity and rank-based log filtering.
Description
The logging module provides a comprehensive logging system for trlx, modeled after the HuggingFace transformers logging pattern. The MultiProcessAdapter class extends Python's LoggerAdapter to filter log messages by distributed rank, ensuring only rank 0 logs by default while allowing per-rank logging when needed. The module supports verbosity control via the TRLX_VERBOSITY environment variable, advisory warning suppression via TRLX_NO_ADVISORY_WARNINGS, and a globally toggleable tqdm progress bar wrapper (_tqdm_cls / EmptyTqdm).
Usage
Use get_logger(__name__) in any trlx module to obtain a rank-aware logger. Configure verbosity via set_verbosity() or the TRLX_VERBOSITY environment variable (debug, info, warning, error, critical).
Code Reference
Source Location
- Repository: CarperAI_Trlx
- File: trlx/utils/logging.py
- Lines: 1-340
Signature
class MultiProcessAdapter(logging.LoggerAdapter):
def log(self, level, msg, *args, **kwargs):
"""
Log with rank filtering. Only logs if current rank is in the
'ranks' kwarg (default: ["0"]).
Args:
level: Log level.
msg: Log message.
ranks: List of rank strings that should emit this log.
"""
def process(self, msg, kwargs):
"""Prepend rank information to log messages."""
def get_logger(name: Optional[str] = None) -> MultiProcessAdapter:
"""
Get a rank-aware logger for the given module name.
Args:
name: Module name (typically __name__).
Returns:
MultiProcessAdapter wrapping a Python logger.
"""
def get_verbosity() -> int:
"""Get the current log verbosity level."""
def set_verbosity(verbosity: int) -> None:
"""Set the log verbosity level for all trlx loggers."""
def enable_progress_bar() -> None:
"""Enable tqdm progress bars globally."""
def disable_progress_bar() -> None:
"""Disable tqdm progress bars globally (replaces with no-op)."""
Import
from trlx.utils.logging import get_logger, set_verbosity, disable_progress_bar
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| name | str | No | Module name for the logger (typically __name__) |
| verbosity | int | Yes | Log level constant (DEBUG, INFO, WARNING, ERROR, CRITICAL) |
| TRLX_VERBOSITY | env var | No | Environment variable to set default verbosity |
| TRLX_NO_ADVISORY_WARNINGS | env var | No | Set to "1" to suppress advisory warnings |
Outputs
| Name | Type | Description |
|---|---|---|
| get_logger returns | MultiProcessAdapter | Rank-aware logger instance |
| get_verbosity returns | int | Current verbosity level |
Usage Examples
Basic Logger Usage
from trlx.utils.logging import get_logger, set_verbosity
import logging
# 1. Get a logger for current module
logger = get_logger(__name__)
# 2. Set verbosity to DEBUG
set_verbosity(logging.DEBUG)
# 3. Log messages (only rank 0 by default)
logger.info("Training started")
logger.debug("Batch size: %d", batch_size)
# 4. Log from all ranks
logger.warning("Memory warning", ranks=None)
# 5. Log only from rank 1
logger.info("Rank 1 status", ranks=["1"])
Control Progress Bars
from trlx.utils.logging import disable_progress_bar, enable_progress_bar
# Disable tqdm bars in non-interactive environments
disable_progress_bar()
# Re-enable when needed
enable_progress_bar()