Environment variables reference

July 21, 2026 · View on GitHub

This document catalogs the main environment variables you might encounter when running Primus on AMD GPUs: distributed launchers, Primus runners and CLI, YAML substitution, libraries (NCCL/RCCL, ROCm, PyTorch, JAX), and optional integrations (Hugging Face, WandB, MLflow). It is a practical reference, not a complete list of every variable accepted by upstream libraries.

Legend

  • Required: Must be set for the stated workflow; otherwise the job fails or mis-ranks.
  • Optional: Has a safe default or is only needed for specific features.
  • Set by: Typical source (launcher, runner/helpers/envs/*.sh, user shell, container host).
  • Used in: Representative Primus paths; many variables are also read by NVIDIA NCCL, AMD RCCL, PyTorch, or JAX without Primus wrapping them.

1. PyTorch distributed

Set by torchrun, Slurm launchers, or runner/primus-cli-direct.sh / runner/primus-cli-slurm-entry.sh. Consumed by PyTorch distributed, RCCL, and Primus helpers.

VariableDefaultWhere setWhere usedDescription
MASTER_ADDRlocalhost (direct / base_env.sh)User, Slurm entry (primus-cli-slurm-entry.sh), or validation fallback (runner/lib/validation.sh)primus/pretrain.py, primus/core/base_module.py, primus/core/utils/env.py, primus/tools/preflight/network/network_probe.py, PyTorch rendezvousRendezvous hostname or IP for process group initialization. Required for multi-node if not using Slurm auto-detection.
MASTER_PORT1234 (direct), 29500 in some Python defaultsConfig / CLI / userSame as MASTER_ADDR; validation.sh enforces 1024–65535TCP port for the store backing torch.distributed.
RANK0 if unset in helperstorchrunprimus/tools/utils.py, primus/tools/preflight/global_vars.py, projection and profiler codeGlobal rank index.
WORLD_SIZE1torchrunPreflight, projection, primus/core/base_module.pyTotal number of processes.
LOCAL_RANK0torchrunprimus/core/base_module.py, GPU selection in benchmarks and trainersGPU index on this node.
LOCAL_WORLD_SIZE1 (Python) / 8 in benchmarks defaulttorchrunprimus/tools/preflight/*.py, strided_allgather_bench.pyProcesses (GPUs) per node.
NODE_RANK0primus-cli-direct / primus-cli-slurm-entry.shprimus/pretrain.py, logging in runner/lib/common.shZero-based node index in multi-node jobs.
NNODES1Direct config (runner/.primus.yaml), primus-cli-slurm-entry.shprimus/pretrain.py, primus/core/projection/training_config.pyNumber of nodes in the job.
GPUS_PER_NODE8runner/.primus.yaml direct section, primus-cli-slurm-entry.sh, validation.shprimus/core/projection/module_profilers/*.py, training config helpersGPUs per node for world-size math and binding.

2. Primus core

VariableDefaultWhere setWhere usedDescription
PRIMUS_PATCHES"" / "all"Userprimus/core/patches/patch_runner.py"all" or empty enables all patches; "none" disables; comma list enables subset.
PRIMUS_LOG_LEVELINFOUser; debug paths in runner/primus-cli-*.sh set DEBUGrunner/lib/common.shLog verbosity: DEBUG, INFO, WARN, ERROR.
PRIMUS_LOG_TIMESTAMP1Userrunner/lib/common.sh1 prefixes logs with timestamps; 0 disables.
PRIMUS_LOG_COLOR1 (auto-off if not a TTY)User; tests may set 0runner/lib/common.shANSI colors in runner logs.
PRIMUS_DEBUG0Userrunner/helpers/envs/primus-env.sh1 enables set -x in the env loader for shell tracing.
PRIMUS_SKIP_VALIDATION0User / testsrunner/helpers/envs/primus-env.sh1 skips validate_distributed_params (not recommended).
PRIMUS_EXPECT_IB(unset)Userprimus/tools/preflight/network/network_standard.pyWhen 1, preflight treats InfiniBand as expected for validation.
PRIMUS_CLUSTERamd-aig-poolside (CLI default)Userprimus/tools/benchmark/rccl_bench_args.pyCluster label for RCCL benchmark tooling.
PRIMUS_GPU_ARCH(auto / "mi300x" in simulators)User / CLIprimus/core/projection/simulation_backends/origami_backend.py, sdpa_simulator.py, projection.py CLIGPU architecture string for performance projection.
PRIMUS_GPU_CLOCK_MHZ(unset)UserSame as PRIMUS_GPU_ARCHOptional clock override for projection.
PRIMUS_GPU_DEVICE0Userorigami_backend.pyGPU index for hardware detection in projection.
PRIMUS_GEMM_BACKEND(unset)Userprimus/core/projection/simulation_backends/factory.pySelects GEMM simulation backend by name.
PRIMUS_PREFLIGHT_MIN_FREE_MEM_GB1Userprimus/tools/preflight/gpu/utils.pyMinimum free GPU memory (GB) for preflight checks.
PRIMUS_PREFLIGHT_MIN_TFLOPS10.0Userprimus/tools/preflight/gpu/utils.pyMinimum TFLOPS threshold for preflight GEMM checks.
PRIMUS_TURBO_AUTO_TUNE(unset)User / teststests/trainer/test_megatron_trainer.py (integration)Enables Turbo auto-tuning in supported Turbo/Megatron test flows; not referenced in core primus/ Python outside tests. Optional.
PRIMUS_TURBO_MOE_DISPATCH_COMBINE_BACKENDTURBOUser; hooks may set DEEP_EPprimus/backends/megatron/patches/args/rocm_arg_validation.py, examples/run_pretrain.sh, runner/helpers/hooks/05_using_uep.shMoE dispatch/combine backend selector.

3. Primus YAML substitution

Parsed by primus/core/config/yaml_loader.py for patterns ${VAR} (required) and ${VAR:default} (optional). Typical experiment YAMLs under examples/ use these for sweep-friendly overrides.

VariableTypical default in YAMLWhere setWhere usedDescription
PRIMUS_TEAM"amd"UserResolved before module merge in experiment YAMLWork group / team segment in paths.
PRIMUS_USER"root"UserExperiment YAMLUser name segment.
PRIMUS_EXP_NAMEper-exampleUserExperiment YAMLExperiment folder name.
PRIMUS_WORKSPACE"./output"UserExperiment YAMLRoot workspace for artifacts.
PRIMUS_TP1UserMegatron example YAMLstensor_model_parallel_size override.
PRIMUS_PP1UserMegatron example YAMLspipeline_model_parallel_size override.
PRIMUS_EP1UserMegatron example YAMLsexpert_model_parallel_size override.
PRIMUS_SEQ_LENGTHper-modelUserMegatron example YAMLsSequence length override.
PRIMUS_MAX_POSITION_EMBEDDINGS4096 or 131072Userexamples/megatron/**/*.yaml, testsPosition embedding cap override.
PRIMUS_GLOBAL_BATCH_SIZEper-modelUserMegatron example YAMLsGlobal batch override.
PRIMUS_NUM_LAYERSper-modelUserTests and MoE examplesTransformer layer count override.
PRIMUS_MOE_LAYER_FREQMoE patternsUserMoE examples / testsMoE layer frequency pattern.
PRIMUS_TOKENIZED_DATA_PATHnullUserMegatron examplesPath to tokenized training data.
PRIMUS_MODELper-stackUserMegatron examplesModel preset stem (e.g. llama3_8B).
PRIMUS_VPPnullUsertests/trainer/test_megatron_trainer.yamlVirtual pipeline stages override.

4. NCCL / RCCL

Primus seeds many of these in runner/helpers/envs/base_env.sh. RCCL honors NCCL-compatible variables on AMD GPUs. See NCCL environment and RCCL environment.

VariableDefault (Primus base)Where setWhere usedDescription
NCCL_DEBUGunsetUser / base_env.sh empty defaultPreflight reports, RCCL runtimeLog verbosity: NONE, WARN, INFO, TRACE, etc. Optional unless debugging comms.
NCCL_SOCKET_IFNAMEderived from IP_INTERFACEbase_env.shprimus/tools/preflight/network/*.py, GPU topology helpersSocket NIC for host networking.
GLOO_SOCKET_IFNAMEsame as NCCL if unsetbase_env.shPreflightGloo TCP backend interface.
NCCL_IB_HCAauto via get_nccl_ib_hca.sh if emptybase_env.sh, container passthroughPreflight, multi-node tuningInfiniBand HCAs to use.
NCCL_IB_GID_INDEX3base_env.shRCCLGID index for IB/RoCE; many sites use 1 for RoCE v2 (override as needed).
NCCL_IB_TC(unset)UserRCCLInfiniBand traffic class.
NCCL_IB_FIFO_TC(unset)UserRCCLInfiniBand FIFO traffic class.
NCCL_IB_ROCE_VERSION_NUM(unset)UserRCCLRoCE version selection.
NCCL_PXN_DISABLE1base_env.shRCCLDisable PXN (PCIe cross-NIC); set 0 to enable.
NCCL_P2P_NET_CHUNKSIZE524288base_env.shRCCLP2P network chunk size tuning.
NCCL_PROTO(unset)UserRCCLProtocol selection (e.g. Simple, LL, LL128).
NCCL_CROSS_NIC0base_env.shRCCLCross-NIC communication policy.
NCCL_IB_RETRY_CNT(unset)UserRCCLIB retry count.
NCCL_IB_TIMEOUT(unset)UserRCCLIB timeout.
NCCL_NET_GDR_LEVEL(unset)UserPreflight summariesGPUDirect RDMA level.
NCCL_IB_DISABLE0User / envPreflightDisable IB; use sockets only.
NCCL_DMABUF_ENABLE(unset)UserRCCLDMA-BUF registration path.
NCCL_IGNORE_CPU_AFFINITY(unset)UserRCCLIgnore CPU affinity hints.
NCCL_IB_QPS_PER_CONNECTION(unset)UserRCCLIB QPs per connection.
NCCL_MAX_P2P_CHANNELS(unset)UserRCCLCap P2P channels.
NCCL_GDR_FLUSH_DISABLE(unset)UserRCCLDisable GDR flush.
NCCL_IB_USE_INLINE(unset)UserRCCLInline IB sends.
NCCL_NET_PLUGIN(unset)UserRCCLAlternate network plugin (e.g. librccl-anp.so).
RCCL_MSCCL_ENABLE0base_env.shRCCLEnable MSCCL algorithms.
RCCL_MSCCLPP_THRESHOLD1GiB defaultbase_env.shRCCLMSCCL++ message-size threshold.
RCCL_GDR_FLUSH_GPU_MEM_NO_RELAXED_ORDERING0 in hooksrunner/helpers/hooks/03_enable_ainic.shRCCLStricter GDR flush memory ordering; relevant for some NIC/GPU combos.
TORCH_NCCL_USE_TENSOR_REGISTER_ALLOCATOR_HOOK0base_env.shPyTorch + RCCLTensor allocator hook for NCCL registration.
TORCH_NCCL_HIGH_PRIORITY1base_env.shPyTorchHigh-priority NCCL streams.

5. ROCm / HSA / HIP

VariableDefaultWhere setWhere usedDescription
HSA_ENABLE_SDMA1base_env.shROCm runtimeEnable SDMA engines for copies.
HSA_NO_SCRATCH_RECLAIM1base_env.sh, container passthroughROCm runtime; documented for MoE stability1 keeps scratch allocated (often used for MoE stability). See ROCR environment.
HIP_VISIBLE_DEVICES0..GPUS_PER_NODE-1base_env.shROCm device visibilityRestricts which GPU indices ROCm exposes.
ROCBLAS_DEFAULT_ATOMICS_MODE(unset)Userprimus/backends/megatron/patches/args/rocm_arg_validation.pyRead for deterministic / accuracy-sensitive GEMM behavior.

6. CUDA / PyTorch

VariableDefaultWhere setWhere usedDescription
CUDA_DEVICE_MAX_CONNECTIONS1base_env.sh; Megatron patches may adjustprimus/backends/megatron/patches/env_patches.py, Megatron patchesLimits concurrent CUDA connections; often 1 for TP/PP overlap.
TORCH_COMPILE_DISABLE0Userprimus/backends/megatron/patches/args/rocm_arg_validation.pyDisable torch.compile when 1.

7. Transformer engine

VariableDefaultWhere setWhere usedDescription
NVTE_ROCM_ENABLE_MXFP81base_env.shTransformer Engine on ROCmEnable MXFP8 paths.
NVTE_CK_USES_BWD_V31base_env.sh, container passthroughTE / CKUse CK backward v3 kernels.
NVTE_CK_IS_V3_ATOMIC_FP32(unset; examples print 0)User / examples/run_pretrain.sh, container passthroughTE / CKAtomic FP32 mode for CK v3 backward.
PATCH_TE_FLASH_ATTN0base_env.sh, container passthroughrunner/helpers/hooks/01_patch_te_flash_attn_max_version.shTrigger TE flash-attn patch hook when 1.

8. Caches and authentication

VariableDefaultWhere setWhere usedDescription
HF_HOME${DATA_PATH}/huggingfacebase_env.sh, primus/core/utils/env_setup.py, primus/pretrain.pyHugging Face librariesCache for models and datasets.
HF_TOKEN(unset)User, container passthroughHugging Face HubAuth for gated models. Required for private/gated assets.
TORCH_HOMEunder workspaceprimus/core/utils/env_setup.pyPyTorch HubTorch Hub cache root.
TRANSFORMERS_CACHEaligned with HF layoutprimus/core/utils/env_setup.pytransformersModel cache for Transformers.
WANDB_API_KEY(unset)User, container passthroughWeights & Biases client, Megatron trainer checksAPI key for logging. Required for Weights & Biases when enabled.
WANDB_PROJECT(unset)User / TorchTitan patchprimus/backends/torchtitan/patches/wandb_patches.pyProject name.
WANDB_RUN_NAME(unset)User / patchesSameRun display name.
WANDB_TEAM(unset)UserTorchTitan metrics (entity)WandB team/entity.
DATABRICKS_HOST(unset)Usermlflow client (via primus/backends/megatron/training/global_vars.py MLflow setup)Required for Databricks-hosted MLflow when MLflow logging is enabled.
DATABRICKS_TOKEN(unset)UserDatabricks APIsAuth token paired with host.
MLFLOW_TRACKING_URI(unset)Usermlflow (via Megatron integrations)MLflow tracking server URI. Optional unless using MLflow.
MLFLOW_REGISTRY_URI(unset)UserMLflowModel registry endpoint.
NLTK_DATA(unset)Userrunner/helpers/hooks/train/pretrain/megatron/preprocess_data.py, Megatron-LM toolsPunkt and other tokenizer data for preprocessing.
TOKENIZED_DATA_PATHper-hook defaultUserrunner/helpers/hooks/train/pretrain/megatron/prepare.pyPre-tokenized dataset location for Megatron data prep hooks.

9. hipBLASLt tuning

VariableDefaultWhere setWhere usedDescription
PRIMUS_HIPBLASLT_TUNING0Userexamples/run_pretrain.shMaster switch for the HipBLASLt tuning flow (1 enables). Must be set before PRIMUS_HIPBLASLT_TUNING_STAGE takes effect, and is mutually exclusive with deterministic mode (PRIMUS_DETERMINISTIC=1).
PRIMUS_HIPBLASLT_TUNING_STAGE0Userexamples/run_pretrain.shStages 0 off, 1 dump shapes, 2 offline tune, 3 apply tuned kernels.
HIPBLASLT_TUNING_OVERRIDE_FILE(unset)User / tuning scriptsexamples/run_pretrain.shPath to tuned-kernel override file for stage 3.
TE_HIPBLASLT_TUNING_RUN_COUNTvariesUserexamples/run_pretrain.shNumber of benchmark runs per shape during TE hipBLASLt tuning.
TE_HIPBLASLT_TUNING_ALGO_COUNTvariesUserexamples/run_pretrain.shTransformer Engine hipBLASLt search breadth.
TE_HIPBLASLT_TUNING_ALGO_FILE(unset)UserTE + HipBLASLtAlgorithm file for TE tuning flows.
TE_HIPBLASLT_TUNING(unset)Userexamples/run_pretrain.shWhen set, interacts with deterministic mode and tuning stages (disable conflicting modes per script comments).
HIPBLASLT_LOG_LEVEL(unset)UserHipBLASLtLibrary log level.
HIPBLASLT_LOG_MASK(unset)UserHipBLASLtBitmask for log categories.

10. Build and rebuild

VariableDefaultWhere setWhere usedDescription
REBUILD_PRIMUS_TURBO0User, container passthroughrunner/helpers/hooks/00_rebuild_primus_turbo.sh1 rebuilds Primus-Turbo on startup.
REBUILD_BNXT0User, container passthroughrunner/helpers/hooks/02_rebuild_bnxt.sh1 rebuilds BNXT driver artifacts when packaged.
USING_AINIC(unset)Userrunner/helpers/hooks/03_enable_ainic.sh1 enables AINIC-oriented networking hooks.
MAX_JOBS(unset)User / toolingtools/daily/safe_wrapper.pyParallel compile jobs for pip builds.
BACKEND_PATH(unset)Userprimus/pretrain.py, primus/core/backend/backend_adapter.pyOverride checkout path for third-party backends (Megatron, TorchTitan, MaxText).

11. Container passthrough

runner/.primus.yaml lists names forwarded from the host into training containers (container.options.env). Primus does not assign values here; it only allowlists keys for --env forwarding.

Forwarded keys:

MASTER_ADDR, MASTER_PORT, NNODES, NODE_RANK, GPUS_PER_NODE, DOCKER_IMAGE, HF_TOKEN, WANDB_API_KEY, ENABLE_NUMA_BINDING, REBUILD_PRIMUS_TURBO, USING_AINIC, PATCH_TE_FLASH_ATTN, REBUILD_BNXT, HSA_NO_SCRATCH_RECLAIM, NVTE_CK_USES_BWD_V3, GPU_MAX_HW_QUEUES, HSA_KERNARG_POOL_SIZE, PRIMUS_TURBO_DEEPEP_TIMEOUT, NCCL_IB_HCA, NCCL_SOCKET_IFNAME, GLOO_SOCKET_IFNAME, NCCL_IB_GID_INDEX, PRIMUS_TURBO_ATTN_V3_ATOMIC_FP32, NVTE_CK_IS_V3_ATOMIC_FP32, PATH_TO_BNXT_TAR_PACKAGE, ANP_HOME_DIR, RCCL_HOME_DIR, MPI_HOME_DIR, DUMP_HLO, DUMP_HLO_DIR, PRIMUS_DETERMINISTIC, PRIMUS_HIPBLASLT_TUNING, PRIMUS_HIPBLASLT_TUNING_STAGE, TE_HIPBLASLT_TUNING_RUN_COUNT, TE_HIPBLASLT_TUNING_ALGO_COUNT, HIPBLASLT_LOG_MASK, HIPBLASLT_LOG_FILE, HIPBLASLT_LOG_LEVEL, HIPBLASLT_TUNING_OVERRIDE_FILE


12. Slurm

VariableDefaultWhere setWhere usedDescription
SLURM_NNODES / SLURM_JOB_NUM_NODESjob-dependentSlurmprimus-cli-slurm-entry.sh (NNODES export), preflight probesNode count for the allocation.
SLURM_NODEIDjob-dependentSlurmMapped to NODE_RANK in primus-cli-slurm-entry.shNode index.
SLURM_PROCIDjob-dependentSlurmFallback for NODE_RANK when SLURM_NODEID is unsetProcess ID within the Slurm step (entry script).
SLURM_JOB_IDjob-dependentSlurmprimus/tools/preflight/host/host_probe.pyJob identifier string.

13. Debug and pipeline

VariableDefaultWhere setWhere usedDescription
DUMP_PP_DIRoutput/pp_dataUserprimus/backends/megatron/megatron_pretrain_trainer.py, primus/backends/megatron/patches/pp_dump_data_patches.pyDirectory for pipeline-parallel debug dumps.
DEBUG_SIMULATOR0Userprimus/core/projection/performance_projection/simulator.py1 enables verbose projection simulator logging.
RECORD_OFFLOAD_MEMORY_INFO0Userprimus/core/pipeline_parallel/handler/offload_handler.pyRecord offload memory stats when 1.
RECORD_OFFLOAD_MEMORY_INFO_DIRoutputUserprimus/core/pipeline_parallel/scheduler/scheduler.pyOutput directory for offload memory logs.
USE_PINNED_OFFLOAD0Useroffload_handler.pyUse pinned host memory for offload buffers when 1.

14. JAX / XLA (MaxText)

Primus MaxText hooks print recommended values in runner/helpers/hooks/train/pretrain/maxtext/prepare.py; MaxText and JAX read them directly.

VariableDefaultWhere setWhere usedDescription
XLA_PYTHON_CLIENT_MEM_FRACTIONe.g. .97 in prepare hookUser / hook outputJAX / XLA allocatorFraction of GPU memory pre-allocated for JAX.
DUMP_HLO_DIR${PRIMUS_PATH}/output/xla_dump_hlo (example)UserXLA via XLA_FLAGS compositionDirectory for HLO dumps when enabled.
DUMP_HLO0UserPrepare hook → XLA flagsGate HLO dumping (1 enables in hook samples).

Note: MaxText also propagates many knobs through XLA_FLAGS and LIBTPU_INIT_ARGS upstream; see MaxText sources for the full list.