Download ENVIRONMENT.md from AbstractPhil/alephlm-0: direct link, hf CLI and curl.
- Browser
- Download file 5.01 kB
-
https://huggingface.co/AbstractPhil/alephlm-0/resolve/main/ENVIRONMENT.md
- Command line
-
hf download hf://AbstractPhil/alephlm-0/ENVIRONMENT.md
-
curl -L -o ENVIRONMENT.md https://huggingface.co/AbstractPhil/alephlm-0/resolve/main/ENVIRONMENT.md
AlephLM-0 E1 β execution environment
The exact stack the seed-1 arms (a1_anchored-s1, a2_dense-s1, a3_random-s1)
trained on, captured from the live container before it was released. Recorded
because several of this line's engineering laws are pinned to specific versions
and to the container's resource envelope β a replication on a drifted image
would change checkpointing and compile semantics silently.
Software
| component | version |
|---|---|
| Python | 3.11.10 (GCC 11.4.0) |
| PyTorch | 2.4.1+cu124 |
| CUDA (torch) | 12.4 |
| cuDNN | 9.1.0 (90100) |
| Triton | 3.0.0 |
| transformers | 5.14.1 |
| tokenizers | 0.22.2 |
| huggingface_hub | 1.26.0 |
| datasets | 5.0.1 |
| safetensors | 0.8.0 |
| numpy | 1.26.3 |
| tensorboard | 2.21.0 |
| torchvision / torchaudio | 0.19.1+cu124 / 2.4.1+cu124 |
| NVIDIA driver | 570.195.03 |
| OS / kernel | Ubuntu 22.04.5 LTS / 6.8.0-64-generic |
Full package set: pip_freeze.txt (179 packages) beside this file.
Why the torch pin matters. Three separate behaviors in this line are
torch-2.4-specific: torch.utils.checkpoint needs an explicit import (2.4.1
does not auto-import the submodule; 2.8+ does); compile-inside-checkpoint hits
2.4's RNG-fork/fake-tensor collision, so the compile path asserts
inner-checkpointing off; and 2.4's checkpoint recompute cannot re-enter dynamo,
a measured structural limit rather than a configuration choice.
Hardware and container envelope
| resource | value |
|---|---|
| GPUs | 2 Γ NVIDIA A40, 46,068 MiB each, PXB peer link |
| GPU UUIDs | GPU-b5d01167-717d-2198-1b7f-7ff14788d65a, GPU-0b319f75-ee74-46e3-9831-01dc3b8fe681 |
| Host CPU | Intel Xeon Gold 6342 @ 2.80 GHz, 96 vCPU visible |
| Host RAM | 540,644,167,680 B (~503 GiB) visible |
| Container memory quota | 110,999,998,464 B (103.38 GiB) |
| Container CPU quota | 17.85 cores (cfs quota 1,785,000 / period 100,000) |
| CPU affinity / NUMA | 0-23, 48-71 / node 0 |
| Container id | d2d7b1e1e4e4 |
| Storage | 200 GB container overlay; 400 GB network volume at the work root |
Why the quotas matter. The visible host figures (96 vCPU, ~503 GiB) are not what the container may use β the real envelope is 17.85 cores and 103.38 GiB. The streaming memmap target store exists precisely to fit that memory quota: an earlier build held the full 49 GB target buffer in RAM and, with transient spike, crossed the quota and took a silent cgroup SIGKILL at the final concatenate. Any rig sized against that law wants the exact byte value above, not a rounding.
Code revision per arm
The three seed-1 arms each fetched the training module at their own launch
instant, so they did not all execute the same revision. Launch times come from
the tensorboard filenames shipped with each run (events.out.tfevents.<epoch>.<container>.<pid>):
| arm | launch (UTC) | revision executed | target store implementation |
|---|---|---|---|
a1_anchored-s1 |
02:53:28 | abdd691 |
in-RAM concatenate |
a3_random-s1 |
03:36:35 | e21de50 |
streaming memmap cache |
a2_dense-s1 |
20:30:19 | ae93b6b |
streaming memmap cache (cache hit) |
e21de50 β ae93b6b changes 168 lines, but every hunk on a shared path is gated
behind the splat arm, which none of these three runs use β so a2 and a3 are
behavior-identical. abdd691 β e21de50 changes 86 lines located entirely in
the target store and not arm-gated: a1 therefore consumed its training
targets through a different store implementation than a2 and a3.
The store change alters how targets are held, not what they contain (the memmap byte arithmetic reconciles exactly to the source tensors: 31,905,616 Γ 768 Γ 2 bytes with zero slack), and a1-s1's capability lands within seed noise of a1-s0 (.6007 vs .6031, trained under yet another build). The recorded position is therefore that the arms are equivalent, stated as a checked fact with its one caveat named rather than as an unexamined assumption.
Console-log completeness caveat (a1_anchored-s1)
Two orchestrators launched a1 against the same fixed log path with truncating
redirection. The duplicate failed its VRAM probe and exited while the real run
continued writing at its own file offset, so the surviving console log carries a
490-byte hole and its first 7,195 bytes belong to the failed duplicate. Practical
consequences: the header line reporting a 14.3 GB allocator cap belongs to the
duplicate, not to the run that produced the shipped weights; and the real
run's own preamble (its allocator cap, VRAM-probe pass, config echo, resume
line) plus roughly the first 61% of its console output have no surviving
witness. The training record itself is unaffected β the tensorboard scalars on
the hub cover the full span, and the weights, metrics.json, and resume state
are complete. Fixed for future campaigns by giving every launch a distinct log
path and appending rather than truncating.
Captured 2026-08-07 by AbstractPhil before container release.