Monitoring and logging
July 21, 2026 · View on GitHub
This page summarizes how Primus configures application logging, experiment tracking (Weights & Biases, TensorBoard, MLflow), training metrics, profilers, ROCm memory probes, and how to capture a reproducible configuration snapshot.
1. Primus logging system
Primus uses loguru for structured logging. Initialization wires file sinks (per log level) and a stderr sink, binds experiment and distributed context (team, user, exp, module_name, node_ip, rank, world_size), and installs an intercept handler so legacy logging output from frameworks such as Megatron is forwarded to loguru with consistent formatting.
Rank-aware behavior
- Worker processes write under
{exp_root}/logs/{module_name}/rank-{rank}/with separate rotated files fordebug,info,warning, anderror(subject tofile_sink_level). - The launcher master process can use
logs/master/when the master logger is configured withis_head=True.
Levels from module configuration (primus/configs/modules/module_base.yaml)
| Parameter | Default | Role |
|---|---|---|
sink_level | null | If set, overrides both file and stderr sink levels. |
file_sink_level | DEBUG | Minimum level for file sinks when sink_level is unset. |
stderr_sink_level | INFO | Minimum level for stderr when sink_level is unset. |
init_worker_logger in primus/core/runtime/logging.py reads sink_level, file_sink_level, and stderr_sink_level from the merged module config. The Megatron trainer maps stderr_sink_level to Megatron’s numeric logging_level (the logging_level field in trainer_base.yaml is deprecated; this mapping supersedes it)..
Shell / runner environment (see docs/03-configuration-reference/environment-variables.md)
| Variable | Purpose |
|---|---|
PRIMUS_LOG_LEVEL | Runner verbosity: DEBUG, INFO, WARN, ERROR (default INFO). |
PRIMUS_LOG_TIMESTAMP | 1 enables timestamps on runner logs; 0 disables. |
PRIMUS_LOG_COLOR | 1 enables ANSI colors when appropriate; often 0 in non-TTY contexts. |
CLI
primus-cli --debugsetsPRIMUS_LOG_LEVEL=DEBUGso launcher and shell logging are verbose (seedocs/02-user-guide/cli-reference.md).
2. Weights & Biases
Megatron
Configuration files: primus/configs/modules/megatron/trainer_base.yaml and primus_megatron_module.yaml.
Defaults in primus_megatron_module.yaml disable Weights & Biases; trainer fields in trainer_base.yaml supply names and paths when enabled.
| Parameter | Default (module / trainer) | Description |
|---|---|---|
disable_wandb | true (primus_megatron_module.yaml) | Master switch; when false, Primus sets paths and default project/run names from experiment metadata. |
wandb_project | null | If unset when Weights & Biases is enabled, defaults to {work_group}_{user_name}. |
wandb_exp_name | null | If unset, defaults to exp_name. |
wandb_entity | null | Optional WandB entity/team. |
wandb_save_dir | null | Deprecated in favor of {exp_root}; artifacts use {exp_root}/wandb. |
Environment
WANDB_API_KEYis required when Weights & Biases is enabled; Primus emits a warning if it is missing (primus/backends/megatron/patches/args/wandb_config_patches.py).
TorchTitan
Configuration file: primus/configs/modules/torchtitan/pre_trainer.yaml.
| Parameter | Default | Description |
|---|---|---|
metrics.enable_wandb | false | Enables WandB in the TorchTitan metrics stack. |
When enabled, primus/backends/torchtitan/patches/wandb_patches.py can set WANDB_PROJECT and WANDB_RUN_NAME from Primus experiment metadata if unset. Use WANDB_API_KEY for authentication.
3. TensorBoard
Megatron
Module toggles
Configuration file: primus_megatron_module.yaml
| Parameter | Default | Description |
|---|---|---|
disable_tensorboard | true | When false, TensorBoard output is placed under {exp_root}/tensorboard (Primus overrides deprecated tensorboard_dir with this path). |
Trainer
Configuration file: trainer_base.yaml
| Parameter | Default | Description |
|---|---|---|
tensorboard_log_interval | 1 | Steps between TensorBoard writes. |
tensorboard_queue_size | 1000 | Event file queue size. |
log_timers_to_tensorboard | false | Log timer stats. |
log_batch_size_to_tensorboard | false | Log batch size. |
log_learning_rate_to_tensorboard | true | Log learning rate. |
log_validation_ppl_to_tensorboard | false | Log validation perplexity. |
log_memory_to_tensorboard | false | Log memory stats. |
log_world_size_to_tensorboard | false | Log world size. |
log_loss_scale_to_tensorboard | true | Log loss scale. |
tensorboard_dir | null | Deprecated; Primus sets the directory under exp_root. |
Note: Enabling Megatron profiling (profile: true) forces disable_tensorboard off in update_primus_config so TensorBoard is available for profile-related views.
TorchTitan
Configuration file: pre_trainer.yaml.
| Parameter | Default | Description |
|---|---|---|
metrics.enable_tensorboard | false | Enables TensorBoard logging. |
metrics.save_tb_folder | tb | Subfolder name (typically under the job dump directory in TorchTitan layouts). |
Launch TensorBoard locally
tensorboard --logdir <path-to-tensorboard-or-tb-folder>
Point <path> at the Megatron tensorboard directory under the experiment root, or at the TorchTitan metrics folder that contains the save_tb_folder subtree.
4. MLflow
MLflow integration is Megatron-only in the paths described here.
Module
Configuration file: primus_megatron_module.yaml
| Parameter | Default | Description |
|---|---|---|
disable_mlflow | true | When false, MLflow run setup runs on the last global rank (world_size - 1). |
mlflow_run_name | null | If unset when enabled, defaults to {work_group}_{user_name}. |
mlflow_experiment_name | null | Passed to mlflow.set_experiment when set. |
Startup behavior
Configuration file: primus/backends/megatron/training/global_vars.py
- Logs training
argsas parameters. - Logs filtered environment variables with an
env__prefix. - Collects git metadata, sets MLflow source tags, and writes
system/git_metadata.jsonas a run artifact.
Environment (typical Databricks / hosted tracking)
| Variable | Role |
|---|---|
DATABRICKS_HOST | Checked by the Megatron trainer when MLflow is enabled; a warning is printed if unset. |
DATABRICKS_TOKEN | Authentication for Databricks-hosted tracking (see environment reference). |
MLFLOW_TRACKING_URI | Tracking server URI; optional depending on deployment. |
5. Training metrics
Megatron
Configuration file: trainer_base.yaml
| Parameter | Default | Description |
|---|---|---|
log_interval | 100 | Steps between standard training log lines. |
log_throughput | false | Log throughput metrics. |
log_avg_skip_iterations | 2 | Skip initial iterations when computing averages. |
log_avg_reset_interval | 10 | Interval for resetting running averages. |
log_params_norm | false | Log parameter norm. |
log_num_zeros_in_grad | false | Log count of zero gradients. |
log_progress | false | Progress-style logging. |
timing_log_level | 0 | Timing log verbosity. |
timing_log_option | minmax | Timing aggregation option. |
TorchTitan
Configuration file: pre_trainer.yaml.
| Parameter | Default | Description |
|---|---|---|
metrics.log_freq | 10 | Metric logging frequency (steps). |
metrics.disable_color_printing | false | Disable colored console metrics. |
metrics.save_for_all_ranks | false | Save metrics from every rank vs. reduced ranks. |
6. Profiling
Megatron
Configuration files: trainer_base.yaml and primus_megatron_module.yaml
| Parameter | Source | Default | Description |
|---|---|---|---|
profile | trainer_base.yaml | false | Enables Megatron profiling path; also forces TensorBoard on when true. |
use_pytorch_profiler | trainer_base.yaml | false | Use PyTorch profiler integration. |
profile_ranks | trainer_base.yaml | [0] | Ranks to profile. |
profile_step_start | trainer_base.yaml | 10 | First step to profile. |
profile_step_end | trainer_base.yaml | 12 | Last step to profile. |
record_memory_history | trainer_base.yaml | false | Record memory history. |
memory_snapshot_path | trainer_base.yaml | snapshot.pickle | Memory snapshot file name. |
disable_profiler_activity_cpu | primus_megatron_module.yaml | false | Disable CPU activities in the profiler. |
torch_profiler_record_shapes | primus_megatron_module.yaml | true | Record tensor shapes. |
torch_profiler_with_stack | primus_megatron_module.yaml | true | Capture Python stacks. |
torch_profiler_use_gzip | primus_megatron_module.yaml | false | Gzip profiler traces. |
TorchTitan
Configuration file: pre_trainer.yaml.
| Parameter | Default | Description |
|---|---|---|
profiling.enable_profiling | false | Master profiling toggle. |
profiling.profile_freq | 10 | How often to capture traces. |
profiling.enable_memory_snapshot | false | Enable memory snapshots. |
profiling.save_memory_snapshot_folder | memory_snapshot | Output folder for snapshots. |
profiling.save_traces_folder | profile_traces | Folder for profiler traces. |
7. ROCm memory monitoring
Configured in primus/configs/modules/megatron/primus_megatron_module.yaml and applied in the Megatron trainer when logging throughput.
| Parameter | Default | Description |
|---|---|---|
use_rocm_mem_info | false | When true, collect ROCm memory information via rocm-smi on every iteration that hits the throughput logging branch. |
use_rocm_mem_info_iters | [1, 2] | When use_rocm_mem_info is false, rocm-smi runs only on these iteration numbers (same branch). |
Collection is evaluated where log_throughput drives the extended iteration log (see primus/backends/megatron/patches/training_log/print_rank_last_patches.py): enable log_throughput in trainer_base.yaml (or overrides) when you need ROCm memory lines in the training log.
8. Experiment snapshots
On disk (every run)
- Experiment root:
{workspace}/{work_group}/{user_name}/{exp_name}is created at config load time (PrimusConfig). - Per-rank logs:
{exp_root}/logs/{module_name}/rank-{rank}/with rotated level-specific files. - Checkpoints: Megatron uses
{exp_root}/checkpoints(trainer setssaveto this path). - TensorBoard / WandB: Under
exp_rootas described above when those features are enabled.
MLflow (Megatron, when enabled): Parameters, environment snapshot, and git metadata artifact provide a structured record of the run configuration and repository state.
Resolved configuration
The launcher and parser accept --export_config, but the default core training path (primus/cli/subcommands/train.py into PrimusRuntime) does not currently write a resolved YAML file. Archive the submitted experiment YAML, any referenced presets, launcher config, and runtime logs with each run. Treat resolved-config export as a legacy or future capability unless your deployment has implemented it on the core runtime path.