Environment variables
At build time: DDSTORE_MPI=0 builds without MPI (methods 1 and 2 only; see Building without MPI). Default 1.
Read by DDStore itself (the C++ library, pyddstore, cpu_nic_map):
Variable |
Default |
Effect |
DDSTORE_FABRIC
|
hsn
|
libfabric provider for method=1/2: hsn (tcp;ofi_rxm) or cxi (native Slingshot; required for GPUDirect RDMA). See libfabric RDMA. |
FABRIC_IFACE
|
auto |
Network interface for method=1/2 (e.g. cxi0, hsn0); default from the rank’s CPU affinity. |
DDSTORE_NIC_MAP
|
unset |
Precomputed CPU→NIC map (python3 -m cpu_nic_map --env) instead of a per-process topology query (recommended: NIC discovery can fail inside nested srun tasks); nic_map= takes priority. |
DDSTORE_HANDSHAKE_DIR
|
./ddstore_hs
|
method=2 handshake directory (C++ API and examples; PyDDStore takes handshake_dir). Shared filesystem.
|
DDSTORE_HANDSHAKE_TIMEOUT_S
|
300
|
Seconds join() and file exchanges without MPI wait. |
DDSTORE_SESSION
|
{SLURM_JOB_ID}_{SLURM_STEP_ID}, else 0
|
Without MPI: exchange file prefix, so runs can share a directory. Same on all ranks. |
DDSTORE_PROFILE
|
off |
1: get()/get_batch() timing counters (get_profile(name)). See Performance.
|
DDSTORE_MAX_READ_BYTES
|
1073741824 (1 GiB)
|
method=1/2: largest single fi_read; longer rows are split (Perlmutter cxi rejects 5 GB reads without reporting a limit). Capped at the provider’s max_msg_size.
|
DDSTORE_ALLTOALL_MAX_BYTES
|
2097152 (2 MiB)
|
method=0 get_batch(): bytes per rank per exchange round. Same on all ranks.
|
DDSTORE_FORK_WORKERS
|
unset |
1: allow reads from forked DataLoader workers; sets FI_MR_CACHE_MONITOR=memhooks if unset or kdreg2. Set before libfabric starts. See Forked DataLoader workers.
|
FI_CXI_DISABLE_HOST_REGISTER
|
1 (set by pyddstore unless already set)
|
CXI: skip GPU-runtime (ROCm, CUDA) registration of host buffers; needed for forked workers. Perlmutter sets it by default. |
Read by pyddstore.torch (defaults for arguments not given):
Variable |
Default |
Effect |
DDSTORE_METHOD
|
0 with MPI, 1 without
|
DistDataset’s default method (PyDDStore takes method= only).
|
DDSTORE_COMM
|
mpi in an MPI build, else torch if initialized, else file
|
DistDataset’s communicator for comm=None: MPI.COMM_WORLD, the default torch.distributed group, or a FileComm (rank/size from Slurm, RANK/WORLD_SIZE or PMI).
|
DDSTORE_BATCH_GET
|
1
|
__getitems__ reads a batch with one get_batch() per field; 0: per sample.
|
DDSTORE_HANDSHAKE_DIR, DDSTORE_HANDSHAKE_TIMEOUT_S
|
./ddstore_hs, 300
|
Default handshake_dir, and DistDatasetReader’s wait for the core group. |
DDSTORE_N_CORE
|
unset |
DistDatasetReader’s default n_core (examples: 4).
|
DDSTORE_THREAD_READERS
|
1
|
ThreadDataLoader, methods 1/2: each worker thread reads through its own reader, so threads read in parallel. 0: threads share the store.
|
DDSTORE_FAST_COLLATE
|
1
|
ThreadDataLoader with the default collate_fn: read a batch directly into its batch tensors. 0: build per-sample values and collate them.
|
DDSTORE_AFFINITY_WIDTH / DDSTORE_AFFINITY_OFFSET
|
0 / 0
|
ThreadDataLoader: pin worker i to CPUs [offset + i·width, offset + (i+1)·width); 0 = off.
|
Read by the examples (examples/vae/, examples/scripts/, job scripts):
Variable |
Default |
Effect |
DDSTORE_BACKEND
|
auto |
Examples’ DDP backend (nccl, gloo, xccl). |
VAE_PROFILE
|
off |
1: vae-ddp.py and vae_extra_train.py print fetch and compute time per epoch (the job scripts set it).
|
MASTER_PORT
|
2345
|
DDP rendezvous port (one per step in the core/extra script). |
System settings that matter on Frontier:
Variable |
Effect |
SLINGSHOT_VNIS
|
Set by Slurm per step. With --network=job_vni, keep only the last (job) entry so separate steps can connect — Slingshot VNIs. |
GPU_MAX_HW_QUEUES
|
ROCm hardware queues per GPU per process (default 4); raise it if loader threads use their own streams — HIP streams. |