clustermax 0.3.0.dev2026093038__tar.gz → 0.3.0.dev2026100240__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/PKG-INFO +1 -1
  2. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/clustermax.egg-info/PKG-INFO +1 -1
  3. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/checks/platform_config.py +8 -2
  4. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/checks/system/hbm_memory_exposure.py +9 -4
  5. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/LICENSE +0 -0
  6. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/README.md +0 -0
  7. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/clustermax.egg-info/SOURCES.txt +0 -0
  8. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/clustermax.egg-info/dependency_links.txt +0 -0
  9. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/clustermax.egg-info/entry_points.txt +0 -0
  10. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/clustermax.egg-info/requires.txt +0 -0
  11. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/clustermax.egg-info/top_level.txt +0 -0
  12. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/__init__.py +0 -0
  13. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/_version.py +0 -0
  14. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/audit_profiles.py +0 -0
  15. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/audit_report.py +0 -0
  16. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/audit_review.py +0 -0
  17. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/audit_runner.py +0 -0
  18. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/banner.py +0 -0
  19. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/cli.py +0 -0
  20. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/cmax.yaml +0 -0
  21. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/criteria_links.py +0 -0
  22. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/logo.py +0 -0
  23. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/minimum_links.py +0 -0
  24. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/minimum_refresh.py +0 -0
  25. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/minimum_sync.py +0 -0
  26. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/progress.py +0 -0
  27. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/report_style.py +0 -0
  28. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/runtime_paths.py +0 -0
  29. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/audit-common.sh +0 -0
  30. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/audit_findings.py +0 -0
  31. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/checks/_fanout.py +0 -0
  32. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/checks/fabric/nccl-ib-qps-check.py +0 -0
  33. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/checks/fabric/nccl-topology-file-check.py +0 -0
  34. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/checks/fabric/nic-topology-check.py +0 -0
  35. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/checks/fabric/virtio-net-check.py +0 -0
  36. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/checks/gpu/vboost.py +0 -0
  37. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/checks/system/arm-smmu-virtualization-check.py +0 -0
  38. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/checks/system/vm-iommu-check.py +0 -0
  39. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/cluster-audit-k8s-security.sh +0 -0
  40. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/cluster-audit-k8s.sh +0 -0
  41. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/cluster-audit-slurm-security.sh +0 -0
  42. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/cluster-audit-slurm.sh +0 -0
  43. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/cluster-audit-standalone-security.sh +0 -0
  44. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/cluster-audit-standalone.sh +0 -0
  45. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/container-check.sh +0 -0
  46. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/criteria-checks.json +0 -0
  47. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/gpu_profiles.py +0 -0
  48. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/host-check.sh +0 -0
  49. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/k8s-control.sh +0 -0
  50. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/kubernetes_quantities.py +0 -0
  51. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/merge_audit.py +0 -0
  52. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/minimum-versions.json +0 -0
  53. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/minimum_versions.py +0 -0
  54. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/monitoring-k8s.sh +0 -0
  55. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/plan_audit.py +0 -0
  56. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/run.sh +0 -0
  57. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/run_checks.py +0 -0
  58. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/run_legacy_audit.py +0 -0
  59. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/security_version_audit.py +0 -0
  60. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/scripts/1-audit/validate_audit.py +0 -0
  61. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/security.py +0 -0
  62. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/target_selection.py +0 -0
  63. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/cmax/yaml_support.py +0 -0
  64. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/pyproject.toml +0 -0
  65. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/setup.cfg +0 -0
  66. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/setup.py +0 -0
  67. {clustermax-0.3.0.dev2026093038 → clustermax-0.3.0.dev2026100240}/tests/test_nightly_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clustermax
3
- Version: 0.3.0.dev2026093038
3
+ Version: 0.3.0.dev2026100240
4
4
  Summary: ClusterMAX GPU cluster audit and security CLI
5
5
  Author: SemiAnalysis
6
6
  Maintainer: SemiAnalysis
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: clustermax
3
- Version: 0.3.0.dev2026093038
3
+ Version: 0.3.0.dev2026100240
4
4
  Summary: ClusterMAX GPU cluster audit and security CLI
5
5
  Author: SemiAnalysis
6
6
  Maintainer: SemiAnalysis
@@ -36,7 +36,8 @@ fault.
36
36
  Environment variables:
37
37
 
38
38
  * ``CLUSTERMAX_AUDIT_K8S_NAMESPACE`` (default ``default``)
39
- * ``CLUSTERMAX_AUDIT_K8S_HOST_CHECK_IMAGE`` (default ``python:3.12-alpine``)
39
+ * ``CLUSTERMAX_AUDIT_K8S_HOST_CHECK_IMAGE`` (default: digest-pinned
40
+ ``python:3.12-alpine``; use a digest-pinned mirror for air-gapped clusters)
40
41
  * ``CLUSTERMAX_AUDIT_K8S_HOST_CHECK_PULL_POLICY`` (default ``IfNotPresent``)
41
42
  * ``CLUSTERMAX_AUDIT_K8S_MAX_HOST_CHECKS`` (default: all GPU nodes)
42
43
  * ``CLUSTERMAX_PYXIS_CHECK_IMAGE`` - container the mount check launches.
@@ -68,6 +69,11 @@ from pathlib import Path
68
69
  from typing import Any
69
70
 
70
71
  SCHEMA_VERSION = 1
72
+ # Pin the multi-architecture index so both x86 and Arm hosts use fixed images.
73
+ DEFAULT_K8S_HOST_CHECK_IMAGE = (
74
+ "python:3.12-alpine@"
75
+ "sha256:c4634f578a412db396771b61b064c6e546c9d6414c7fb5b1b05d5871f1885f7b"
76
+ )
71
77
  CHECK_KEYS = ("vm_iommu", "arm_smmu_virtualization")
72
78
  ALL_CHECK_KEYS = (*CHECK_KEYS, "nccl_topo_file", "nccl_ib_qps")
73
79
  CACHE_PATH_ENV = "CLUSTERMAX_PLATFORM_CHECK_CACHE"
@@ -2020,7 +2026,7 @@ def run_k8s_check(
2020
2026
  include_rdma_iommu: bool = True,
2021
2027
  ) -> tuple[list[dict[str, Any]], list[str]]:
2022
2028
  namespace = os.environ.get("CLUSTERMAX_AUDIT_K8S_NAMESPACE", "default")
2023
- image = os.environ.get("CLUSTERMAX_AUDIT_K8S_HOST_CHECK_IMAGE", "python:3.12-alpine")
2029
+ image = os.environ.get("CLUSTERMAX_AUDIT_K8S_HOST_CHECK_IMAGE", DEFAULT_K8S_HOST_CHECK_IMAGE)
2024
2030
  max_nodes = as_int(os.environ.get("CLUSTERMAX_AUDIT_K8S_MAX_HOST_CHECKS"), default=len(nodes))
2025
2031
  return load_fanout().fan_out_k8s(
2026
2032
  lambda node: run_k8s_host_check(
@@ -10,9 +10,9 @@ Use a separate destructive memory test for the active DRAM-to-HBM spill repro.
10
10
  Kubernetes harness environment variables:
11
11
 
12
12
  * ``CLUSTERMAX_AUDIT_K8S_NAMESPACE`` (default ``default``)
13
- * ``CLUSTERMAX_AUDIT_K8S_HOST_CHECK_IMAGE`` (default
14
- ``python:3.12-alpine``) - must be reachable from GPU nodes; override
15
- for air-gapped clusters.
13
+ * ``CLUSTERMAX_AUDIT_K8S_HOST_CHECK_IMAGE`` (default: digest-pinned
14
+ ``python:3.12-alpine``) - must be reachable from GPU nodes; use a
15
+ digest-pinned mirror for air-gapped clusters.
16
16
  * ``CLUSTERMAX_AUDIT_K8S_HOST_CHECK_PULL_POLICY`` (default
17
17
  ``IfNotPresent``)
18
18
  * ``CLUSTERMAX_AUDIT_K8S_MAX_HOST_CHECKS`` (default: all GPU nodes)
@@ -33,6 +33,11 @@ from typing import Any
33
33
 
34
34
 
35
35
  GIB_KB = 1024 * 1024
36
+ # Pin the multi-architecture index so both x86 and Arm hosts use fixed images.
37
+ DEFAULT_K8S_HOST_CHECK_IMAGE = (
38
+ "python:3.12-alpine@"
39
+ "sha256:c4634f578a412db396771b61b064c6e546c9d6414c7fb5b1b05d5871f1885f7b"
40
+ )
36
41
  # Lower bound for what counts as an HBM-sized memory-only NUMA node. 64 GiB
37
42
  # catches every coherent NVIDIA platform shipping today (GH200 96 GiB, GB200
38
43
  # 192 GiB per GPU, GB300 288 GiB per GPU, H100 SXM 80 GiB if ever exposed
@@ -735,7 +740,7 @@ def run_k8s_check() -> tuple[list[dict[str, Any]], list[str]]:
735
740
  return [], [NO_K8S_GPU_NODES]
736
741
 
737
742
  namespace = os.environ.get("CLUSTERMAX_AUDIT_K8S_NAMESPACE", "default")
738
- image = os.environ.get("CLUSTERMAX_AUDIT_K8S_HOST_CHECK_IMAGE", "python:3.12-alpine")
743
+ image = os.environ.get("CLUSTERMAX_AUDIT_K8S_HOST_CHECK_IMAGE", DEFAULT_K8S_HOST_CHECK_IMAGE)
739
744
  max_nodes = as_int(os.environ.get("CLUSTERMAX_AUDIT_K8S_MAX_HOST_CHECKS"), default=len(nodes))
740
745
  return load_fanout().fan_out_k8s(_hbm_per_node(namespace, image), nodes=nodes, max_nodes=max_nodes)
741
746