greenray-aio 0.5.0__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.
- greenray_aio-0.5.0/LICENSE +190 -0
- greenray_aio-0.5.0/NOTICE +10 -0
- greenray_aio-0.5.0/PKG-INFO +218 -0
- greenray_aio-0.5.0/README.md +187 -0
- greenray_aio-0.5.0/pyproject.toml +128 -0
- greenray_aio-0.5.0/pyproject.toml.orig +97 -0
- greenray_aio-0.5.0/src/greenray/__init__.py +8 -0
- greenray_aio-0.5.0/src/greenray/__main__.py +5 -0
- greenray_aio-0.5.0/src/greenray/app/__init__.py +1 -0
- greenray_aio-0.5.0/src/greenray/app/console.py +83 -0
- greenray_aio-0.5.0/src/greenray/app/exam.py +129 -0
- greenray_aio-0.5.0/src/greenray/app/lab.py +418 -0
- greenray_aio-0.5.0/src/greenray/app/mock.py +125 -0
- greenray_aio-0.5.0/src/greenray/app/progress.py +97 -0
- greenray_aio-0.5.0/src/greenray/app/reports.py +82 -0
- greenray_aio-0.5.0/src/greenray/app/ui.py +140 -0
- greenray_aio-0.5.0/src/greenray/cli.py +196 -0
- greenray_aio-0.5.0/src/greenray/commands/__init__.py +72 -0
- greenray_aio-0.5.0/src/greenray/commands/cmsh.py +1958 -0
- greenray_aio-0.5.0/src/greenray/commands/container.py +2200 -0
- greenray_aio-0.5.0/src/greenray/commands/dcgmi.py +1128 -0
- greenray_aio-0.5.0/src/greenray/commands/dpu.py +643 -0
- greenray_aio-0.5.0/src/greenray/commands/editor.py +97 -0
- greenray_aio-0.5.0/src/greenray/commands/gds.py +521 -0
- greenray_aio-0.5.0/src/greenray/commands/helm.py +938 -0
- greenray_aio-0.5.0/src/greenray/commands/hw.py +208 -0
- greenray_aio-0.5.0/src/greenray/commands/ib.py +1337 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/__init__.py +135 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/apply.py +559 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/cli.py +305 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/controllers.py +350 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/devices.py +319 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/edit.py +471 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/exec_logs.py +184 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/gpu_operator.py +624 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/jsonpath.py +150 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/model.py +669 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/output.py +654 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/scheduler.py +506 -0
- greenray_aio-0.5.0/src/greenray/commands/kubectl/views.py +252 -0
- greenray_aio-0.5.0/src/greenray/commands/nvidia_smi.py +801 -0
- greenray_aio-0.5.0/src/greenray/commands/ops.py +260 -0
- greenray_aio-0.5.0/src/greenray/commands/runai.py +1242 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/__init__.py +77 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/accounting.py +274 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/affinity.py +145 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/common.py +300 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/conf.py +158 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/ctl.py +608 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/fairshare.py +88 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/hooks.py +98 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/jobs.py +518 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/munge.py +129 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/nodes.py +380 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/sacctmgr.py +655 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/scheduler.py +519 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/status.py +394 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/steps.py +349 -0
- greenray_aio-0.5.0/src/greenray/commands/slurm/users.py +77 -0
- greenray_aio-0.5.0/src/greenray/commands/storage.py +579 -0
- greenray_aio-0.5.0/src/greenray/commands/system.py +687 -0
- greenray_aio-0.5.0/src/greenray/config.py +42 -0
- greenray_aio-0.5.0/src/greenray/content/__init__.py +1 -0
- greenray_aio-0.5.0/src/greenray/content/domains.py +23 -0
- greenray_aio-0.5.0/src/greenray/content/guides.py +52 -0
- greenray_aio-0.5.0/src/greenray/content/helppages.py +109 -0
- greenray_aio-0.5.0/src/greenray/content/questions.py +127 -0
- greenray_aio-0.5.0/src/greenray/content/scenarios.py +243 -0
- greenray_aio-0.5.0/src/greenray/content/solutions.py +90 -0
- greenray_aio-0.5.0/src/greenray/content/validate.py +65 -0
- greenray_aio-0.5.0/src/greenray/core/__init__.py +1 -0
- greenray_aio-0.5.0/src/greenray/core/clock.py +42 -0
- greenray_aio-0.5.0/src/greenray/core/errors.py +9 -0
- greenray_aio-0.5.0/src/greenray/core/live.py +34 -0
- greenray_aio-0.5.0/src/greenray/core/shell.py +396 -0
- greenray_aio-0.5.0/src/greenray/core/state.py +507 -0
- greenray_aio-0.5.0/src/greenray/data/command_guides.yaml +345 -0
- greenray_aio-0.5.0/src/greenray/data/help/apt/help.txt +30 -0
- greenray_aio-0.5.0/src/greenray/data/help/apt/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/apt-cache/help.txt +18 -0
- greenray_aio-0.5.0/src/greenray/data/help/apt-cache/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/apt-get/help.txt +30 -0
- greenray_aio-0.5.0/src/greenray/data/help/apt-get/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/awk/help.txt +17 -0
- greenray_aio-0.5.0/src/greenray/data/help/cat/help.txt +12 -0
- greenray_aio-0.5.0/src/greenray/data/help/cd/help.txt +9 -0
- greenray_aio-0.5.0/src/greenray/data/help/chmod/help.txt +10 -0
- greenray_aio-0.5.0/src/greenray/data/help/chown/help.txt +13 -0
- greenray_aio-0.5.0/src/greenray/data/help/chroot/help.txt +12 -0
- greenray_aio-0.5.0/src/greenray/data/help/chroot/meta.yaml +3 -0
- greenray_aio-0.5.0/src/greenray/data/help/cm-chroot-sw-img/help.txt +11 -0
- greenray_aio-0.5.0/src/greenray/data/help/cm-chroot-sw-img/meta.yaml +3 -0
- greenray_aio-0.5.0/src/greenray/data/help/cmha/help.txt +12 -0
- greenray_aio-0.5.0/src/greenray/data/help/cmha/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/cmsh/help.txt +15 -0
- greenray_aio-0.5.0/src/greenray/data/help/cmsh/man.txt +86 -0
- greenray_aio-0.5.0/src/greenray/data/help/cmsh/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/cp/help.txt +6 -0
- greenray_aio-0.5.0/src/greenray/data/help/create-munge-key/help.txt +10 -0
- greenray_aio-0.5.0/src/greenray/data/help/create-munge-key/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/crictl/help.txt +38 -0
- greenray_aio-0.5.0/src/greenray/data/help/crictl/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/dataloader-bench/help.txt +19 -0
- greenray_aio-0.5.0/src/greenray/data/help/dataloader-bench/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/dpkg/help.txt +24 -0
- greenray_aio-0.5.0/src/greenray/data/help/dpkg/meta.yaml +2 -0
- greenray_aio-0.5.0/src/greenray/data/help/enroot/help.txt +40 -0
- greenray_aio-0.5.0/src/greenray/data/help/enroot/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/env/help.txt +7 -0
- greenray_aio-0.5.0/src/greenray/data/help/exit/help.txt +6 -0
- greenray_aio-0.5.0/src/greenray/data/help/export/help.txt +8 -0
- greenray_aio-0.5.0/src/greenray/data/help/exportfs/help.txt +14 -0
- greenray_aio-0.5.0/src/greenray/data/help/free/help.txt +10 -0
- greenray_aio-0.5.0/src/greenray/data/help/getent/help.txt +16 -0
- greenray_aio-0.5.0/src/greenray/data/help/grep/help.txt +25 -0
- greenray_aio-0.5.0/src/greenray/data/help/grep/man.txt +62 -0
- greenray_aio-0.5.0/src/greenray/data/help/grep/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/head/help.txt +10 -0
- greenray_aio-0.5.0/src/greenray/data/help/helm/get.txt +31 -0
- greenray_aio-0.5.0/src/greenray/data/help/helm/help.txt +38 -0
- greenray_aio-0.5.0/src/greenray/data/help/helm/history.txt +20 -0
- greenray_aio-0.5.0/src/greenray/data/help/helm/install.txt +40 -0
- greenray_aio-0.5.0/src/greenray/data/help/helm/list.txt +22 -0
- greenray_aio-0.5.0/src/greenray/data/help/helm/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/helm/repo.txt +30 -0
- greenray_aio-0.5.0/src/greenray/data/help/helm/rollback.txt +20 -0
- greenray_aio-0.5.0/src/greenray/data/help/helm/show.txt +30 -0
- greenray_aio-0.5.0/src/greenray/data/help/helm/status.txt +19 -0
- greenray_aio-0.5.0/src/greenray/data/help/helm/uninstall.txt +19 -0
- greenray_aio-0.5.0/src/greenray/data/help/helm/upgrade.txt +36 -0
- greenray_aio-0.5.0/src/greenray/data/help/hostname/help.txt +4 -0
- greenray_aio-0.5.0/src/greenray/data/help/hostname/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/hwticket/help.txt +23 -0
- greenray_aio-0.5.0/src/greenray/data/help/id/help.txt +11 -0
- greenray_aio-0.5.0/src/greenray/data/help/ipmitool/help.txt +12 -0
- greenray_aio-0.5.0/src/greenray/data/help/ipmitool/man.txt +43 -0
- greenray_aio-0.5.0/src/greenray/data/help/ipmitool/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/journalctl/help.txt +21 -0
- greenray_aio-0.5.0/src/greenray/data/help/journalctl/man.txt +51 -0
- greenray_aio-0.5.0/src/greenray/data/help/journalctl/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/kill/help.txt +14 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/apply.txt +38 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/cordon.txt +19 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/create.txt +75 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/delete.txt +45 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/describe.txt +39 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/drain.txt +29 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/exec.txt +38 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/get.txt +75 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/help.txt +48 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/label.txt +40 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/logs.txt +47 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/meta.yaml +2 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/patch.txt +40 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/rollout.txt +27 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/run.txt +55 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/scale.txt +21 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/taint.txt +38 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/uncordon.txt +19 -0
- greenray_aio-0.5.0/src/greenray/data/help/kubectl/wait.txt +34 -0
- greenray_aio-0.5.0/src/greenray/data/help/logout/help.txt +5 -0
- greenray_aio-0.5.0/src/greenray/data/help/ls/help.txt +12 -0
- greenray_aio-0.5.0/src/greenray/data/help/man/help.txt +14 -0
- greenray_aio-0.5.0/src/greenray/data/help/md5sum/help.txt +12 -0
- greenray_aio-0.5.0/src/greenray/data/help/mkdir/help.txt +7 -0
- greenray_aio-0.5.0/src/greenray/data/help/mlxconfig/help.txt +32 -0
- greenray_aio-0.5.0/src/greenray/data/help/mlxconfig/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/mlxlink/help.txt +27 -0
- greenray_aio-0.5.0/src/greenray/data/help/mlxlink/man.txt +51 -0
- greenray_aio-0.5.0/src/greenray/data/help/mlxlink/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/modprobe/help.txt +13 -0
- greenray_aio-0.5.0/src/greenray/data/help/modprobe/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/mpirun/help.txt +42 -0
- greenray_aio-0.5.0/src/greenray/data/help/mpirun/meta.yaml +18 -0
- greenray_aio-0.5.0/src/greenray/data/help/mst/help.txt +14 -0
- greenray_aio-0.5.0/src/greenray/data/help/munge/help.txt +12 -0
- greenray_aio-0.5.0/src/greenray/data/help/munge/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/mungekey/help.txt +10 -0
- greenray_aio-0.5.0/src/greenray/data/help/mungekey/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/nano/help.txt +17 -0
- greenray_aio-0.5.0/src/greenray/data/help/nano/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/ngc/help.txt +40 -0
- greenray_aio-0.5.0/src/greenray/data/help/ngc/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/numactl/help.txt +22 -0
- greenray_aio-0.5.0/src/greenray/data/help/numactl/meta.yaml +6 -0
- greenray_aio-0.5.0/src/greenray/data/help/nv-fabricmanager/help.txt +14 -0
- greenray_aio-0.5.0/src/greenray/data/help/nv-fabricmanager/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/ping/help.txt +10 -0
- greenray_aio-0.5.0/src/greenray/data/help/ping/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/pkill/help.txt +12 -0
- greenray_aio-0.5.0/src/greenray/data/help/pkill/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/printenv/help.txt +7 -0
- greenray_aio-0.5.0/src/greenray/data/help/pwd/help.txt +13 -0
- greenray_aio-0.5.0/src/greenray/data/help/reboot/help.txt +8 -0
- greenray_aio-0.5.0/src/greenray/data/help/reseat-cable/help.txt +15 -0
- greenray_aio-0.5.0/src/greenray/data/help/rm/help.txt +9 -0
- greenray_aio-0.5.0/src/greenray/data/help/runai-ui/help.txt +27 -0
- greenray_aio-0.5.0/src/greenray/data/help/runai-ui/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/runuser/help.txt +16 -0
- greenray_aio-0.5.0/src/greenray/data/help/runuser/meta.yaml +7 -0
- greenray_aio-0.5.0/src/greenray/data/help/sacct/help.txt +35 -0
- greenray_aio-0.5.0/src/greenray/data/help/sacctmgr/help.txt +63 -0
- greenray_aio-0.5.0/src/greenray/data/help/sacctmgr/man.txt +130 -0
- greenray_aio-0.5.0/src/greenray/data/help/salloc/help.txt +56 -0
- greenray_aio-0.5.0/src/greenray/data/help/salloc/meta.yaml +32 -0
- greenray_aio-0.5.0/src/greenray/data/help/sbatch/help.txt +84 -0
- greenray_aio-0.5.0/src/greenray/data/help/sbatch/man.txt +154 -0
- greenray_aio-0.5.0/src/greenray/data/help/sbatch/meta.yaml +32 -0
- greenray_aio-0.5.0/src/greenray/data/help/scancel/help.txt +15 -0
- greenray_aio-0.5.0/src/greenray/data/help/scp/help.txt +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/scp/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/sed/help.txt +16 -0
- greenray_aio-0.5.0/src/greenray/data/help/sed/man.txt +53 -0
- greenray_aio-0.5.0/src/greenray/data/help/service/help.txt +24 -0
- greenray_aio-0.5.0/src/greenray/data/help/sha256sum/help.txt +12 -0
- greenray_aio-0.5.0/src/greenray/data/help/showmount/help.txt +10 -0
- greenray_aio-0.5.0/src/greenray/data/help/sinfo/help.txt +18 -0
- greenray_aio-0.5.0/src/greenray/data/help/sinfo/man.txt +98 -0
- greenray_aio-0.5.0/src/greenray/data/help/slurmd/help.txt +12 -0
- greenray_aio-0.5.0/src/greenray/data/help/slurmd/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/sminfo/help.txt +13 -0
- greenray_aio-0.5.0/src/greenray/data/help/sminfo/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/sort/help.txt +14 -0
- greenray_aio-0.5.0/src/greenray/data/help/sprio/help.txt +9 -0
- greenray_aio-0.5.0/src/greenray/data/help/squeue/help.txt +19 -0
- greenray_aio-0.5.0/src/greenray/data/help/squeue/man.txt +102 -0
- greenray_aio-0.5.0/src/greenray/data/help/srun/help.txt +87 -0
- greenray_aio-0.5.0/src/greenray/data/help/srun/man.txt +130 -0
- greenray_aio-0.5.0/src/greenray/data/help/srun/meta.yaml +32 -0
- greenray_aio-0.5.0/src/greenray/data/help/ssh/help.txt +2 -0
- greenray_aio-0.5.0/src/greenray/data/help/ssh/meta.yaml +10 -0
- greenray_aio-0.5.0/src/greenray/data/help/sshare/help.txt +10 -0
- greenray_aio-0.5.0/src/greenray/data/help/su/help.txt +16 -0
- greenray_aio-0.5.0/src/greenray/data/help/sync/help.txt +8 -0
- greenray_aio-0.5.0/src/greenray/data/help/systemctl/help.txt +33 -0
- greenray_aio-0.5.0/src/greenray/data/help/systemctl/man.txt +99 -0
- greenray_aio-0.5.0/src/greenray/data/help/systemctl/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/tail/help.txt +10 -0
- greenray_aio-0.5.0/src/greenray/data/help/taskset/help.txt +19 -0
- greenray_aio-0.5.0/src/greenray/data/help/taskset/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/tee/help.txt +7 -0
- greenray_aio-0.5.0/src/greenray/data/help/touch/help.txt +8 -0
- greenray_aio-0.5.0/src/greenray/data/help/umount/help.txt +16 -0
- greenray_aio-0.5.0/src/greenray/data/help/umount/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/uname/help.txt +8 -0
- greenray_aio-0.5.0/src/greenray/data/help/unmunge/help.txt +13 -0
- greenray_aio-0.5.0/src/greenray/data/help/unmunge/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/unset/help.txt +8 -0
- greenray_aio-0.5.0/src/greenray/data/help/uptime/help.txt +11 -0
- greenray_aio-0.5.0/src/greenray/data/help/uptime/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/vi/help.txt +17 -0
- greenray_aio-0.5.0/src/greenray/data/help/vi/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/vim/help.txt +17 -0
- greenray_aio-0.5.0/src/greenray/data/help/vim/meta.yaml +1 -0
- greenray_aio-0.5.0/src/greenray/data/help/wc/help.txt +11 -0
- greenray_aio-0.5.0/src/greenray/data/help/whoami/help.txt +6 -0
- greenray_aio-0.5.0/src/greenray/data/questions/administration.yaml +477 -0
- greenray_aio-0.5.0/src/greenray/data/questions/installation.yaml +636 -0
- greenray_aio-0.5.0/src/greenray/data/questions/troubleshooting.yaml +502 -0
- greenray_aio-0.5.0/src/greenray/data/questions/workload.yaml +458 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/adm-bcm-grabimage-sync.yaml +81 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/adm-bcm-power-and-status.yaml +42 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/adm-bcm-user-role.yaml +68 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/adm-dcgm-health-policy.yaml +58 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/adm-k8s-mig-mixed-strategy.yaml +76 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/adm-k8s-time-slicing.yaml +83 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/adm-mig-h100-1g.yaml +39 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/adm-runai-project-quota.yaml +75 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/adm-slurm-fairshare-accounts.yaml +71 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/adm-slurm-partition-qos.yaml +56 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/ins-bcm-add-node-category.yaml +54 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/ins-bcm-softwareimage-update.yaml +48 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/ins-container-toolkit-docker.yaml +58 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/ins-dpu-doca-service.yaml +93 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/ins-gpu-operator-preinstalled-driver.yaml +56 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/ins-network-operator-rdma.yaml +82 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/ins-ngc-registry-auth.yaml +79 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/ins-slurm-gres-config.yaml +58 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/ins-storage-shared-mounts.yaml +100 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-dcgm-diag-failure.yaml +72 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-device-plugin-crashloop.yaml +77 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-docker-gpu-runtime.yaml +88 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-ecc-row-remap.yaml +65 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-fabricmanager-down.yaml +65 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-gpudirect-peermem.yaml +60 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-ib-port-down.yaml +43 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-nccl-ib-hca.yaml +46 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-numa-affinity.yaml +90 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-power-cap-persistence.yaml +43 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-slurm-node-down-munge.yaml +87 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-storage-io-bottleneck.yaml +96 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-thermal-throttle.yaml +66 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/tsh-xid79-drained-node.yaml +72 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/wkl-k8s-pod-pending-gpu.yaml +99 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/wkl-k8s-taint-toleration.yaml +84 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/wkl-pyxis-container-job.yaml +44 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/wkl-runai-fractional-gpu.yaml +78 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/wkl-slurm-multinode-sbatch.yaml +83 -0
- greenray_aio-0.5.0/src/greenray/data/scenarios/wkl-slurm-pending-reasons.yaml +74 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/labs/gpu-local/01-nvidia-smi-wsl/SOLUTION.md +34 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/labs/gpu-local/02-gpu-containers/SOLUTION.md +28 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/labs/gpu-local/03-k8s-gpu-pod/SOLUTION.md +37 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/questions/administration.yaml +333 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/questions/installation.yaml +474 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/questions/troubleshooting.yaml +332 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/questions/workload.yaml +303 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/adm-bcm-grabimage-sync.yaml +46 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/adm-bcm-power-and-status.yaml +34 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/adm-bcm-user-role.yaml +40 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/adm-dcgm-health-policy.yaml +56 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/adm-k8s-mig-mixed-strategy.yaml +38 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/adm-k8s-time-slicing.yaml +64 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/adm-mig-h100-1g.yaml +23 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/adm-runai-project-quota.yaml +48 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/adm-slurm-fairshare-accounts.yaml +56 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/adm-slurm-partition-qos.yaml +39 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/ins-bcm-add-node-category.yaml +33 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/ins-bcm-softwareimage-update.yaml +39 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/ins-container-toolkit-docker.yaml +44 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/ins-dpu-doca-service.yaml +54 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/ins-gpu-operator-preinstalled-driver.yaml +38 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/ins-network-operator-rdma.yaml +38 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/ins-ngc-registry-auth.yaml +44 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/ins-slurm-gres-config.yaml +44 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/ins-storage-shared-mounts.yaml +48 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-dcgm-diag-failure.yaml +46 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-device-plugin-crashloop.yaml +42 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-docker-gpu-runtime.yaml +60 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-ecc-row-remap.yaml +37 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-fabricmanager-down.yaml +33 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-gpudirect-peermem.yaml +45 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-ib-port-down.yaml +40 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-nccl-ib-hca.yaml +34 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-numa-affinity.yaml +59 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-power-cap-persistence.yaml +19 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-slurm-node-down-munge.yaml +55 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-storage-io-bottleneck.yaml +56 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-thermal-throttle.yaml +34 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/tsh-xid79-drained-node.yaml +38 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/wkl-k8s-pod-pending-gpu.yaml +32 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/wkl-k8s-taint-toleration.yaml +32 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/wkl-pyxis-container-job.yaml +35 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/wkl-runai-fractional-gpu.yaml +40 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/wkl-slurm-multinode-sbatch.yaml +42 -0
- greenray_aio-0.5.0/src/greenray/data/solutions/scenarios/wkl-slurm-pending-reasons.yaml +41 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for reasonable and customary use in describing the
|
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or additional liability.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
Copyright 2026 Rehmana Younis
|
|
179
|
+
|
|
180
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
181
|
+
you may not use this file except in compliance with the License.
|
|
182
|
+
You may obtain a copy of the License at
|
|
183
|
+
|
|
184
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
185
|
+
|
|
186
|
+
Unless required by applicable law or agreed to in writing, software
|
|
187
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
188
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
189
|
+
See the License for the specific language governing permissions and
|
|
190
|
+
limitations under the License.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
GreenRay AIO
|
|
2
|
+
Copyright 2026 Rehmana Younis
|
|
3
|
+
|
|
4
|
+
Licensed under the Apache License, Version 2.0.
|
|
5
|
+
|
|
6
|
+
GreenRay AIO is an independent study tool. It is not affiliated with, endorsed by
|
|
7
|
+
or sponsored by NVIDIA Corporation. NVIDIA, DGX, Base Command Manager, NCP-AIO and
|
|
8
|
+
related names are trademarks of NVIDIA Corporation and are used only to describe
|
|
9
|
+
the certification this tool helps you prepare for. Every node, GPU, switch and log
|
|
10
|
+
in GreenRay AIO is simulated; no NVIDIA software is included.
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: greenray-aio
|
|
3
|
+
Version: 0.5.0
|
|
4
|
+
Summary: GreenRay AIO: hands-on lab simulator and mock exam for the NVIDIA NCP-AIO (AI Operations) certification
|
|
5
|
+
Keywords: ncp-aio,nvidia-certification,ai-infrastructure,ai-operations,exam-prep,slurm,kubernetes,gpu-operator,base-command-manager,dgx,hpc,simulator
|
|
6
|
+
Author: Rehmana Younis
|
|
7
|
+
License-Expression: Apache-2.0
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
License-File: NOTICE
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: Education
|
|
13
|
+
Classifier: Intended Audience :: System Administrators
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Education
|
|
22
|
+
Classifier: Topic :: System :: Clustering
|
|
23
|
+
Classifier: Topic :: System :: Systems Administration
|
|
24
|
+
Requires-Dist: prompt-toolkit>=3.0.43
|
|
25
|
+
Requires-Dist: pyyaml>=6.0
|
|
26
|
+
Requires-Dist: rich>=13.7
|
|
27
|
+
Requires-Python: >=3.10
|
|
28
|
+
Project-URL: Homepage, https://github.com/RehmanaYounis/greenray-aio
|
|
29
|
+
Project-URL: Issues, https://github.com/RehmanaYounis/greenray-aio/issues
|
|
30
|
+
Description-Content-Type: text/markdown
|
|
31
|
+
|
|
32
|
+
# GreenRay AIO
|
|
33
|
+
|
|
34
|
+
**Hands-on lab simulator and mock exam for the NVIDIA-Certified Professional: AI Operations (NCP-AIO) exam.**
|
|
35
|
+
|
|
36
|
+
GreenRay AIO drops you into a broken or half-configured **4-node DGX H100 cluster managed by Base Command Manager (BCM)**. You investigate and fix it with the same commands you'd use on real systems:
|
|
37
|
+
- `nvidia-smi` and `dcgmi`
|
|
38
|
+
- Slurm
|
|
39
|
+
- `kubectl` and `helm` with the GPU Operator
|
|
40
|
+
- `cmsh`
|
|
41
|
+
- InfiniBand tools and NCCL tests
|
|
42
|
+
- Docker and NGC containers
|
|
43
|
+
|
|
44
|
+
`check` grades the end state of the cluster, not whether you typed a particular command.
|
|
45
|
+
|
|
46
|
+
- **39 incident and task scenarios** covering every topic of the exam blueprint ([docs/COVERAGE.md](docs/COVERAGE.md))
|
|
47
|
+
- **Incident mode**: only the incident report is shown, and the root cause stays hidden until the debrief
|
|
48
|
+
- **`explain <command>`** for learning tools as you need them, plus progressive hints and a debrief after every lab
|
|
49
|
+
- **Feels like a real node**: `--help` and `man` pages, `nano`/`vim` (your real editor), `cd` with tab completion of paths, command history, `watch`, live `dmon` samples, a coloured prompt and real-tool colours
|
|
50
|
+
- **Full mock exam** in the current format: 30 questions plus 3 hands-on labs in 120 minutes (per NVIDIA's exam page; re-check before booking)
|
|
51
|
+
- Runs anywhere Python runs: Linux, WSL, macOS or Windows. **No GPU needed.**
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
root@bcm-head:~# ssh dgx-03
|
|
55
|
+
root@dgx-03:~# dmesg | grep -i xid
|
|
56
|
+
[ 8812.402113] NVRM: Xid (PCI:0000:5d:00): 79, pid=0, GPU has fallen off the bus.
|
|
57
|
+
root@dgx-03:~# nvidia-smi
|
|
58
|
+
Unable to determine the device handle for GPU00000000:5D:00.0: Unknown Error
|
|
59
|
+
...
|
|
60
|
+
root@dgx-03:~# check
|
|
61
|
+
PASS you read the kernel log on dgx-03
|
|
62
|
+
.... 2 more success criteria not met yet
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
> GreenRay AIO is an independent study tool. It is **not affiliated with, endorsed by or sponsored by NVIDIA**. NVIDIA, DGX, NCP-AIO and related names are trademarks of NVIDIA Corporation, used here only to describe the exam this tool helps you prepare for. Every node, GPU and log is simulated.
|
|
66
|
+
|
|
67
|
+
## Install
|
|
68
|
+
|
|
69
|
+
Pick one. A GPU is **not** required.
|
|
70
|
+
|
|
71
|
+
**With uv or pipx** (any OS with Python 3.10+):
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
uv tool install greenray-aio # or: pipx install greenray-aio
|
|
75
|
+
greenray
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**With Docker** (nothing to install):
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
docker run -it --rm -v greenray:/home/lab/.greenray ghcr.io/rehmanayounis/greenray-aio
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The named volume keeps your progress between runs.
|
|
85
|
+
|
|
86
|
+
**From source** (to contribute):
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
git clone https://github.com/RehmanaYounis/greenray-aio.git
|
|
90
|
+
cd greenray-aio && uv sync && uv run greenray
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Use WSL rather than PowerShell on Windows for the best terminal experience. `greenray doctor` prints your environment when something looks wrong.
|
|
94
|
+
|
|
95
|
+
Developer commands (see [CONTRIBUTING.md](CONTRIBUTING.md)):
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
uv run pytest # test suite (add --cov for coverage)
|
|
99
|
+
uv run ruff check . # lint
|
|
100
|
+
uv run ruff format . # format
|
|
101
|
+
uv run mypy # type checks
|
|
102
|
+
uv build # wheel + sdist
|
|
103
|
+
docker build -t greenray-aio .
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Use
|
|
107
|
+
|
|
108
|
+
Installed with uv tool, pipx or Docker, the command is `greenray …`. From a source checkout use `uv run greenray …`.
|
|
109
|
+
|
|
110
|
+
| Command | What it does |
|
|
111
|
+
| --- | --- |
|
|
112
|
+
| `greenray` | Interactive menu (`--no-color` for plain output) |
|
|
113
|
+
| `greenray list` | All scenarios by exam domain, with your pass marks |
|
|
114
|
+
| `greenray incident [-d DOMAIN] [-t TOPIC]` | **Investigate a random incident.** Only the incident report is shown; the scenario's id, title and success criteria stay hidden until the debrief. `-t` takes a scenario tag such as `slurm`, `kubernetes`, `bcm`, `mig` or `infiniband` |
|
|
115
|
+
| `greenray incident --id <id>` | Retry a specific scenario as an incident (for a fresh independent attempt) |
|
|
116
|
+
| `greenray lab <id>` | Start a hands-on scenario in guided mode (title, objectives and hints visible) |
|
|
117
|
+
| `greenray sandbox` | A healthy cluster to explore freely |
|
|
118
|
+
| `greenray mock` | **Full mock exam:** 30 questions + 3 labs (one Slurm, one Kubernetes, one BCM) in 120 minutes, with no hints. Graded at the end |
|
|
119
|
+
| `greenray exam` | Question drill: 60 questions in 120 minutes, weighted 31/23/23/23 like the blueprint |
|
|
120
|
+
| `greenray exam -n 20 -m 40 -d "Administration"` | Domain drill |
|
|
121
|
+
| `greenray progress` | Passed labs, exam history, weakest domain |
|
|
122
|
+
| `greenray validate` | Self-test: every scenario is solvable by its reference solution |
|
|
123
|
+
| `greenray doctor` | Version, Python, terminal, editor, solutions source and progress path |
|
|
124
|
+
|
|
125
|
+
Inside a lab, these meta-commands are available alongside the simulated cluster commands:
|
|
126
|
+
|
|
127
|
+
| Command | What it does |
|
|
128
|
+
| --- | --- |
|
|
129
|
+
| `task` | Show the briefing again |
|
|
130
|
+
| `check` | Grade your work. In incident mode, unmet criteria are counted but not named |
|
|
131
|
+
| `explain <cmd>` | What a command is for, its useful options, what to look for in its output, and common errors. It never describes a scenario's fix |
|
|
132
|
+
| `hint` | Show the next hint. Hints get more specific, and the last one asks for confirmation because it is close to the answer |
|
|
133
|
+
| `objectives` | Incident mode only: reveal the success criteria (this attempt then counts as guided) |
|
|
134
|
+
| `retry` | Incident mode only: start a fresh attempt (cluster, timer, hints and objectives reset) |
|
|
135
|
+
| `solution` | Give up and see the answer, explanation and edge cases |
|
|
136
|
+
| `reset` | Put the cluster back to the broken state. Same attempt: hints used and the timer carry over |
|
|
137
|
+
| `commands` | List the simulated tools |
|
|
138
|
+
| `quit` | Leave the lab |
|
|
139
|
+
|
|
140
|
+
When you pass, you get the **debrief**: the reference solution, why it works, the edge cases and exam traps, **your own commands** for comparison, and a related scenario to practise next. Read it even when you passed. Ctrl-C cancels the current line, as in bash.
|
|
141
|
+
|
|
142
|
+
### Guided or independent
|
|
143
|
+
|
|
144
|
+
`greenray progress` shows three counts per domain:
|
|
145
|
+
- **passed**
|
|
146
|
+
- **without hints**
|
|
147
|
+
- **as an incident, unguided**: passed in incident mode with no hints and no revealed objectives
|
|
148
|
+
|
|
149
|
+
A good routine is to learn a topic in guided mode first, then prove it with `greenray incident -t <topic>`.
|
|
150
|
+
|
|
151
|
+
### What the grader can and cannot judge
|
|
152
|
+
|
|
153
|
+
- It grades the **end state** of the cluster, so any valid fix passes. For example, `nvidia-smi -pm 1` and `systemctl enable --now nvidia-persistenced` are both accepted for persistence mode.
|
|
154
|
+
- Evidence checks confirm that you **ran** the diagnostic commands. Except where a check says otherwise, they do **not** check that you ran them before changing anything. Diagnose first anyway; the debrief reminds you.
|
|
155
|
+
- It does not generally detect unnecessary changes. Only some scenarios guard against specific harmful ones, such as raising power limits to hide a thermal fault, or killing a user's job.
|
|
156
|
+
- If a command ever crashes inside the simulator (a bug), the cluster is restored to its state before that command and you are told so.
|
|
157
|
+
|
|
158
|
+
Progress is stored in `~/.greenray/progress.json` on your machine (set `GREENRAY_HOME` to move it). Progress from the older `~/.aiolab` folder is copied over automatically the first time you run it.
|
|
159
|
+
|
|
160
|
+
## The simulated cluster
|
|
161
|
+
|
|
162
|
+
| Host | Role |
|
|
163
|
+
| --- | --- |
|
|
164
|
+
| `bcm-head` | BCM head node (`cmsh`), Slurm controller, Kubernetes control plane, NGC CLI |
|
|
165
|
+
| `dgx-01` … `dgx-04` | DGX H100: 8x H100 80GB, NVSwitch, 8x ConnectX-7 NDR 400G, `slurmd`, `kubelet`, DCGM |
|
|
166
|
+
|
|
167
|
+
Simulated tools:
|
|
168
|
+
|
|
169
|
+
- **GPU:** `nvidia-smi` (queries, `-q -d`, power, persistence, ECC, reset, MIG, topology, NVLink)
|
|
170
|
+
- **Health:** `dcgmi`, `dmesg`, `journalctl`, `systemctl`, `ipmitool`
|
|
171
|
+
- **Slurm:** `sinfo`, `squeue`, `scontrol`, `sbatch`, `srun`, `salloc` (with pyxis), `sacct`, `sacctmgr`, `sprio`, `sshare`
|
|
172
|
+
- **Kubernetes:** `kubectl`, `helm` (GPU Operator, Network Operator), Run:ai CLI
|
|
173
|
+
- **Containers:** `docker`, `enroot`, `ngc`, `nvidia-ctk`, `crictl`
|
|
174
|
+
- **BCM:** `cmsh` (device, category, softwareimage, user, power, imageupdate, grabimage)
|
|
175
|
+
- **Fabric and Magnum IO:** `ibstat`, `ibdiagnet`, `mlxlink`, `perfquery`, NCCL tests (`all_reduce_perf`, `mpirun`), GPUDirect RDMA/Storage checks
|
|
176
|
+
- **DPU:** BlueField tools (`mlxconfig`, `bfb-install`, DOCA services)
|
|
177
|
+
- **Shell basics:** `cd`, `pwd`, `ls`, `cat`, `grep`, `sed -i`, heredocs, pipes and redirects; `nano`, `vi` and `vim` open your real editor; `--help` and `man` work as on a real node
|
|
178
|
+
|
|
179
|
+
`commands` inside a lab prints the full list.
|
|
180
|
+
|
|
181
|
+
**Limits:** outputs are realistic but simplified, and only the options that matter for the exam are implemented. If something doesn't parse, try the canonical form of the command. If a real command behaves differently from the simulator, trust the real one, and please open an issue.
|
|
182
|
+
|
|
183
|
+
## Licence
|
|
184
|
+
|
|
185
|
+
Apache-2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
|
186
|
+
|
|
187
|
+
## Trust model
|
|
188
|
+
|
|
189
|
+
Scenario files are **code**: `checks` are Python expressions and `setup` may contain Python, both run on your machine. They come only from this package and, if you use one, your own solutions directory. Commands you type in a lab never reach `eval`/`exec`; they are parsed by the simulated tools. Only install scenario files you trust.
|
|
190
|
+
|
|
191
|
+
## Code layout
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
src/greenray/
|
|
195
|
+
cli.py command-line entry point (argparse)
|
|
196
|
+
core/ cluster state model, bash-like shell, errors
|
|
197
|
+
commands/ one module per tool family (nvidia_smi, slurm, kubectl, cmsh, ib, ...)
|
|
198
|
+
content/ loaders: scenarios, questions, solutions, command guides, validation, domains
|
|
199
|
+
app/ interactive layer: lab runner, question drill, mock exam, progress, UI
|
|
200
|
+
data/scenarios/ scenario files (problem only)
|
|
201
|
+
data/questions/ question bank (questions only)
|
|
202
|
+
data/solutions/ reference solutions, answer keys and lab solutions
|
|
203
|
+
data/command_guides.yaml scenario-agnostic guides for `explain`
|
|
204
|
+
tests/ pytest suite, including a replay of every reference solution
|
|
205
|
+
docs/ SCENARIO_FORMAT.md, COVERAGE.md
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Adding scenarios and questions
|
|
209
|
+
|
|
210
|
+
- Scenarios: the problem goes in `src/greenray/data/scenarios/` and the solution in `src/greenray/data/solutions/scenarios/`. See [docs/SCENARIO_FORMAT.md](docs/SCENARIO_FORMAT.md). Add every new scenario to [docs/COVERAGE.md](docs/COVERAGE.md).
|
|
211
|
+
- Questions: these go in `src/greenray/data/questions/`, with the answer key in `src/greenray/data/solutions/questions/<same file>`. The format is documented in `src/greenray/content/questions.py`.
|
|
212
|
+
- Run `uv run greenray validate` and `uv run pytest` before committing. CI runs lint and tests on every push.
|
|
213
|
+
|
|
214
|
+
All content is original and written from public documentation concepts. It is not copied from the exam.
|
|
215
|
+
|
|
216
|
+
## Related
|
|
217
|
+
|
|
218
|
+
- Real-hardware practice that complements the simulator: the RTX 4060 / WSL2 labs and the rented-GPU cloud session kit live in the companion study repository, NVIDIA-NCP-AIO-Prep (`labs/gpu-local`, `labs/cloud-gpu`).
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# GreenRay AIO
|
|
2
|
+
|
|
3
|
+
**Hands-on lab simulator and mock exam for the NVIDIA-Certified Professional: AI Operations (NCP-AIO) exam.**
|
|
4
|
+
|
|
5
|
+
GreenRay AIO drops you into a broken or half-configured **4-node DGX H100 cluster managed by Base Command Manager (BCM)**. You investigate and fix it with the same commands you'd use on real systems:
|
|
6
|
+
- `nvidia-smi` and `dcgmi`
|
|
7
|
+
- Slurm
|
|
8
|
+
- `kubectl` and `helm` with the GPU Operator
|
|
9
|
+
- `cmsh`
|
|
10
|
+
- InfiniBand tools and NCCL tests
|
|
11
|
+
- Docker and NGC containers
|
|
12
|
+
|
|
13
|
+
`check` grades the end state of the cluster, not whether you typed a particular command.
|
|
14
|
+
|
|
15
|
+
- **39 incident and task scenarios** covering every topic of the exam blueprint ([docs/COVERAGE.md](docs/COVERAGE.md))
|
|
16
|
+
- **Incident mode**: only the incident report is shown, and the root cause stays hidden until the debrief
|
|
17
|
+
- **`explain <command>`** for learning tools as you need them, plus progressive hints and a debrief after every lab
|
|
18
|
+
- **Feels like a real node**: `--help` and `man` pages, `nano`/`vim` (your real editor), `cd` with tab completion of paths, command history, `watch`, live `dmon` samples, a coloured prompt and real-tool colours
|
|
19
|
+
- **Full mock exam** in the current format: 30 questions plus 3 hands-on labs in 120 minutes (per NVIDIA's exam page; re-check before booking)
|
|
20
|
+
- Runs anywhere Python runs: Linux, WSL, macOS or Windows. **No GPU needed.**
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
root@bcm-head:~# ssh dgx-03
|
|
24
|
+
root@dgx-03:~# dmesg | grep -i xid
|
|
25
|
+
[ 8812.402113] NVRM: Xid (PCI:0000:5d:00): 79, pid=0, GPU has fallen off the bus.
|
|
26
|
+
root@dgx-03:~# nvidia-smi
|
|
27
|
+
Unable to determine the device handle for GPU00000000:5D:00.0: Unknown Error
|
|
28
|
+
...
|
|
29
|
+
root@dgx-03:~# check
|
|
30
|
+
PASS you read the kernel log on dgx-03
|
|
31
|
+
.... 2 more success criteria not met yet
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
> GreenRay AIO is an independent study tool. It is **not affiliated with, endorsed by or sponsored by NVIDIA**. NVIDIA, DGX, NCP-AIO and related names are trademarks of NVIDIA Corporation, used here only to describe the exam this tool helps you prepare for. Every node, GPU and log is simulated.
|
|
35
|
+
|
|
36
|
+
## Install
|
|
37
|
+
|
|
38
|
+
Pick one. A GPU is **not** required.
|
|
39
|
+
|
|
40
|
+
**With uv or pipx** (any OS with Python 3.10+):
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
uv tool install greenray-aio # or: pipx install greenray-aio
|
|
44
|
+
greenray
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**With Docker** (nothing to install):
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
docker run -it --rm -v greenray:/home/lab/.greenray ghcr.io/rehmanayounis/greenray-aio
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
The named volume keeps your progress between runs.
|
|
54
|
+
|
|
55
|
+
**From source** (to contribute):
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
git clone https://github.com/RehmanaYounis/greenray-aio.git
|
|
59
|
+
cd greenray-aio && uv sync && uv run greenray
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Use WSL rather than PowerShell on Windows for the best terminal experience. `greenray doctor` prints your environment when something looks wrong.
|
|
63
|
+
|
|
64
|
+
Developer commands (see [CONTRIBUTING.md](CONTRIBUTING.md)):
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
uv run pytest # test suite (add --cov for coverage)
|
|
68
|
+
uv run ruff check . # lint
|
|
69
|
+
uv run ruff format . # format
|
|
70
|
+
uv run mypy # type checks
|
|
71
|
+
uv build # wheel + sdist
|
|
72
|
+
docker build -t greenray-aio .
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Use
|
|
76
|
+
|
|
77
|
+
Installed with uv tool, pipx or Docker, the command is `greenray …`. From a source checkout use `uv run greenray …`.
|
|
78
|
+
|
|
79
|
+
| Command | What it does |
|
|
80
|
+
| --- | --- |
|
|
81
|
+
| `greenray` | Interactive menu (`--no-color` for plain output) |
|
|
82
|
+
| `greenray list` | All scenarios by exam domain, with your pass marks |
|
|
83
|
+
| `greenray incident [-d DOMAIN] [-t TOPIC]` | **Investigate a random incident.** Only the incident report is shown; the scenario's id, title and success criteria stay hidden until the debrief. `-t` takes a scenario tag such as `slurm`, `kubernetes`, `bcm`, `mig` or `infiniband` |
|
|
84
|
+
| `greenray incident --id <id>` | Retry a specific scenario as an incident (for a fresh independent attempt) |
|
|
85
|
+
| `greenray lab <id>` | Start a hands-on scenario in guided mode (title, objectives and hints visible) |
|
|
86
|
+
| `greenray sandbox` | A healthy cluster to explore freely |
|
|
87
|
+
| `greenray mock` | **Full mock exam:** 30 questions + 3 labs (one Slurm, one Kubernetes, one BCM) in 120 minutes, with no hints. Graded at the end |
|
|
88
|
+
| `greenray exam` | Question drill: 60 questions in 120 minutes, weighted 31/23/23/23 like the blueprint |
|
|
89
|
+
| `greenray exam -n 20 -m 40 -d "Administration"` | Domain drill |
|
|
90
|
+
| `greenray progress` | Passed labs, exam history, weakest domain |
|
|
91
|
+
| `greenray validate` | Self-test: every scenario is solvable by its reference solution |
|
|
92
|
+
| `greenray doctor` | Version, Python, terminal, editor, solutions source and progress path |
|
|
93
|
+
|
|
94
|
+
Inside a lab, these meta-commands are available alongside the simulated cluster commands:
|
|
95
|
+
|
|
96
|
+
| Command | What it does |
|
|
97
|
+
| --- | --- |
|
|
98
|
+
| `task` | Show the briefing again |
|
|
99
|
+
| `check` | Grade your work. In incident mode, unmet criteria are counted but not named |
|
|
100
|
+
| `explain <cmd>` | What a command is for, its useful options, what to look for in its output, and common errors. It never describes a scenario's fix |
|
|
101
|
+
| `hint` | Show the next hint. Hints get more specific, and the last one asks for confirmation because it is close to the answer |
|
|
102
|
+
| `objectives` | Incident mode only: reveal the success criteria (this attempt then counts as guided) |
|
|
103
|
+
| `retry` | Incident mode only: start a fresh attempt (cluster, timer, hints and objectives reset) |
|
|
104
|
+
| `solution` | Give up and see the answer, explanation and edge cases |
|
|
105
|
+
| `reset` | Put the cluster back to the broken state. Same attempt: hints used and the timer carry over |
|
|
106
|
+
| `commands` | List the simulated tools |
|
|
107
|
+
| `quit` | Leave the lab |
|
|
108
|
+
|
|
109
|
+
When you pass, you get the **debrief**: the reference solution, why it works, the edge cases and exam traps, **your own commands** for comparison, and a related scenario to practise next. Read it even when you passed. Ctrl-C cancels the current line, as in bash.
|
|
110
|
+
|
|
111
|
+
### Guided or independent
|
|
112
|
+
|
|
113
|
+
`greenray progress` shows three counts per domain:
|
|
114
|
+
- **passed**
|
|
115
|
+
- **without hints**
|
|
116
|
+
- **as an incident, unguided**: passed in incident mode with no hints and no revealed objectives
|
|
117
|
+
|
|
118
|
+
A good routine is to learn a topic in guided mode first, then prove it with `greenray incident -t <topic>`.
|
|
119
|
+
|
|
120
|
+
### What the grader can and cannot judge
|
|
121
|
+
|
|
122
|
+
- It grades the **end state** of the cluster, so any valid fix passes. For example, `nvidia-smi -pm 1` and `systemctl enable --now nvidia-persistenced` are both accepted for persistence mode.
|
|
123
|
+
- Evidence checks confirm that you **ran** the diagnostic commands. Except where a check says otherwise, they do **not** check that you ran them before changing anything. Diagnose first anyway; the debrief reminds you.
|
|
124
|
+
- It does not generally detect unnecessary changes. Only some scenarios guard against specific harmful ones, such as raising power limits to hide a thermal fault, or killing a user's job.
|
|
125
|
+
- If a command ever crashes inside the simulator (a bug), the cluster is restored to its state before that command and you are told so.
|
|
126
|
+
|
|
127
|
+
Progress is stored in `~/.greenray/progress.json` on your machine (set `GREENRAY_HOME` to move it). Progress from the older `~/.aiolab` folder is copied over automatically the first time you run it.
|
|
128
|
+
|
|
129
|
+
## The simulated cluster
|
|
130
|
+
|
|
131
|
+
| Host | Role |
|
|
132
|
+
| --- | --- |
|
|
133
|
+
| `bcm-head` | BCM head node (`cmsh`), Slurm controller, Kubernetes control plane, NGC CLI |
|
|
134
|
+
| `dgx-01` … `dgx-04` | DGX H100: 8x H100 80GB, NVSwitch, 8x ConnectX-7 NDR 400G, `slurmd`, `kubelet`, DCGM |
|
|
135
|
+
|
|
136
|
+
Simulated tools:
|
|
137
|
+
|
|
138
|
+
- **GPU:** `nvidia-smi` (queries, `-q -d`, power, persistence, ECC, reset, MIG, topology, NVLink)
|
|
139
|
+
- **Health:** `dcgmi`, `dmesg`, `journalctl`, `systemctl`, `ipmitool`
|
|
140
|
+
- **Slurm:** `sinfo`, `squeue`, `scontrol`, `sbatch`, `srun`, `salloc` (with pyxis), `sacct`, `sacctmgr`, `sprio`, `sshare`
|
|
141
|
+
- **Kubernetes:** `kubectl`, `helm` (GPU Operator, Network Operator), Run:ai CLI
|
|
142
|
+
- **Containers:** `docker`, `enroot`, `ngc`, `nvidia-ctk`, `crictl`
|
|
143
|
+
- **BCM:** `cmsh` (device, category, softwareimage, user, power, imageupdate, grabimage)
|
|
144
|
+
- **Fabric and Magnum IO:** `ibstat`, `ibdiagnet`, `mlxlink`, `perfquery`, NCCL tests (`all_reduce_perf`, `mpirun`), GPUDirect RDMA/Storage checks
|
|
145
|
+
- **DPU:** BlueField tools (`mlxconfig`, `bfb-install`, DOCA services)
|
|
146
|
+
- **Shell basics:** `cd`, `pwd`, `ls`, `cat`, `grep`, `sed -i`, heredocs, pipes and redirects; `nano`, `vi` and `vim` open your real editor; `--help` and `man` work as on a real node
|
|
147
|
+
|
|
148
|
+
`commands` inside a lab prints the full list.
|
|
149
|
+
|
|
150
|
+
**Limits:** outputs are realistic but simplified, and only the options that matter for the exam are implemented. If something doesn't parse, try the canonical form of the command. If a real command behaves differently from the simulator, trust the real one, and please open an issue.
|
|
151
|
+
|
|
152
|
+
## Licence
|
|
153
|
+
|
|
154
|
+
Apache-2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).
|
|
155
|
+
|
|
156
|
+
## Trust model
|
|
157
|
+
|
|
158
|
+
Scenario files are **code**: `checks` are Python expressions and `setup` may contain Python, both run on your machine. They come only from this package and, if you use one, your own solutions directory. Commands you type in a lab never reach `eval`/`exec`; they are parsed by the simulated tools. Only install scenario files you trust.
|
|
159
|
+
|
|
160
|
+
## Code layout
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
src/greenray/
|
|
164
|
+
cli.py command-line entry point (argparse)
|
|
165
|
+
core/ cluster state model, bash-like shell, errors
|
|
166
|
+
commands/ one module per tool family (nvidia_smi, slurm, kubectl, cmsh, ib, ...)
|
|
167
|
+
content/ loaders: scenarios, questions, solutions, command guides, validation, domains
|
|
168
|
+
app/ interactive layer: lab runner, question drill, mock exam, progress, UI
|
|
169
|
+
data/scenarios/ scenario files (problem only)
|
|
170
|
+
data/questions/ question bank (questions only)
|
|
171
|
+
data/solutions/ reference solutions, answer keys and lab solutions
|
|
172
|
+
data/command_guides.yaml scenario-agnostic guides for `explain`
|
|
173
|
+
tests/ pytest suite, including a replay of every reference solution
|
|
174
|
+
docs/ SCENARIO_FORMAT.md, COVERAGE.md
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Adding scenarios and questions
|
|
178
|
+
|
|
179
|
+
- Scenarios: the problem goes in `src/greenray/data/scenarios/` and the solution in `src/greenray/data/solutions/scenarios/`. See [docs/SCENARIO_FORMAT.md](docs/SCENARIO_FORMAT.md). Add every new scenario to [docs/COVERAGE.md](docs/COVERAGE.md).
|
|
180
|
+
- Questions: these go in `src/greenray/data/questions/`, with the answer key in `src/greenray/data/solutions/questions/<same file>`. The format is documented in `src/greenray/content/questions.py`.
|
|
181
|
+
- Run `uv run greenray validate` and `uv run pytest` before committing. CI runs lint and tests on every push.
|
|
182
|
+
|
|
183
|
+
All content is original and written from public documentation concepts. It is not copied from the exam.
|
|
184
|
+
|
|
185
|
+
## Related
|
|
186
|
+
|
|
187
|
+
- Real-hardware practice that complements the simulator: the RTX 4060 / WSL2 labs and the rented-GPU cloud session kit live in the companion study repository, NVIDIA-NCP-AIO-Prep (`labs/gpu-local`, `labs/cloud-gpu`).
|