[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-using-holodeck":3,"mdc--yloiu-key":34,"related-repo-nvidia-using-holodeck":2214,"related-org-nvidia-using-holodeck":2223},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":32,"mdContent":33},"using-holodeck","manage GPU-enabled test environments","Use when the user wants to provision, manage, or destroy GPU-enabled test environments via the holodeck CLI. Covers env.yaml config, create\u002Fdryrun\u002Flist\u002Fstatus\u002Fssh\u002Fscp\u002Fdelete\u002Fcleanup\u002Fget\u002Fos workflows, and common pitfalls.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"nvidia","NVIDIA","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fnvidia.png",[12,16,17,20],{"name":13,"slug":14,"type":15},"CLI","cli","tag",{"name":9,"slug":8,"type":15},{"name":18,"slug":19,"type":15},"Infrastructure","infrastructure",{"name":21,"slug":22,"type":15},"Testing","testing",31,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fholodeck","2026-07-14T05:36:29.548299",null,15,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":31},[],"Holodeck is a project to create test environments optimised for GPU projects.","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fholodeck\u002Ftree\u002FHEAD\u002Fpkg\u002Fskill\u002Fdata\u002Fskills\u002Fusing-holodeck","---\nname: using-holodeck\ndescription: Use when the user wants to provision, manage, or destroy GPU-enabled test environments via the holodeck CLI. Covers env.yaml config, create\u002Fdryrun\u002Flist\u002Fstatus\u002Fssh\u002Fscp\u002Fdelete\u002Fcleanup\u002Fget\u002Fos workflows, and common pitfalls.\n---\n\n# Using the holodeck CLI\n\nHolodeck provisions ephemeral GPU-enabled environments (AWS EC2 or\nexisting SSH targets) for end-to-end testing of NVIDIA Kubernetes\ncomponents: GPU Operator, device-plugin, container toolkit, and DRA\ndrivers. It handles K8s install, NVIDIA stack install, and teardown.\n\n## When to recommend holodeck\n\n- The user needs a real GPU on Kubernetes to verify a fix.\n- The user wants a reproducible test env (config-as-code via env.yaml).\n- The user is iterating on operator\u002Fplugin code and wants kubectl\n  access against actual NVIDIA hardware.\n\nNot the right tool: production clusters, long-lived shared envs,\nnon-GPU testing where kind\u002Fk3d would do.\n\n## Configuration file (env.yaml)\n\nSingle-node example (the canonical shape):\n\n```yaml\napiVersion: holodeck.nvidia.com\u002Fv1alpha1\nkind: Environment\nmetadata:\n  name: my-test-env\nspec:\n  provider: aws\n  auth:\n    keyName: my-aws-keypair             # AWS EC2 key-pair name (in this region)\n    privateKey: ~\u002F.ssh\u002Fmy-aws-key.pem   # local filesystem path to the .pem\n  instance:\n    type: g4dn.xlarge        # GPU instance type\n    region: us-west-2\n    os: ubuntu-22.04         # see 'holodeck os list' for valid IDs\n    # Or, for an explicit AMI instead of an OS ID:\n    # image:\n    #   imageId: ami-0123456789abcdef0\n  containerRuntime:\n    install: true\n    name: containerd\n  nvidiaContainerToolkit:\n    install: true\n  nvidiaDriver:\n    install: true\n  kubernetes:\n    install: true\n    installer: kubeadm\n    version: v1.31.1\n```\n\nFor multi-node clusters, replace `instance:` with `cluster:` (see\n`examples\u002Faws_cluster_ha.yaml`). For pre-existing SSH targets, set\n`provider: ssh` and configure `auth.privateKey` \u002F instance host.\n\nRun `holodeck os list` to discover supported OS identifiers. Today\nthat includes `ubuntu-20.04\u002F22.04\u002F24.04\u002F26.04`, `rocky-9`,\n`fedora-42`, and `amazon-linux-2023` (some are containerd-only —\ncheck the `NOTES` column).\n\n## Core workflows\n\n**Validate the config first (read-only — no resources created, but\ndoes make AWS describe API calls to check instance type, image, and\narch compatibility; requires valid AWS credentials):**\n```bash\nholodeck dryrun -f env.yaml\n```\nRecommended before any new config — provisioning failures cost real\nmoney.\n\n**Create + provision:**\n```bash\nholodeck create -f env.yaml --provision\n```\nDrop `--provision` to create the instance without installing the\nKubernetes\u002FNVIDIA stack.\n\n**List active environments:**\n```bash\nholodeck list\nholodeck list -o json   # for scripts; also -o yaml\nholodeck list -q        # IDs only\n```\n\n**Show one environment's status \u002F details:**\n```bash\nholodeck status \u003Cinstance-id>\nholodeck describe \u003Cinstance-id>\n```\n\n**Shell into an instance:**\n```bash\nholodeck ssh \u003Cinstance-id>\nholodeck ssh \u003Cinstance-id> -- nvidia-smi   # one-shot command\n```\n\n**Copy files:**\n```bash\nholodeck scp .\u002Flocal-file.txt \u003Cinstance-id>:\u002Fremote\u002Fpath\u002F\nholodeck scp \u003Cinstance-id>:\u002Fremote\u002Ffile.log .\u002Flocal\u002F\n```\n\n**Get artifacts off the instance:**\n```bash\nholodeck get kubeconfig \u003Cinstance-id>                    # downloads kubeconfig\nholodeck get kubeconfig \u003Cinstance-id> -o .\u002Fmy.kubeconfig # -o is an output PATH (not a format)\nholodeck get ssh-config \u003Cinstance-id>                    # prints SSH config snippet to stdout\n```\n\n**Update an existing environment** — bare `update \u003Cid>` is a no-op\n(\"No changes to apply\"):\n```bash\nholodeck update \u003Cid> --reprovision              # re-run all installers (idempotent)\nholodeck update \u003Cid> --add-driver               # add NVIDIA driver\nholodeck update \u003Cid> --add-kubernetes           # add K8s + kubeadm\nholodeck update \u003Cid> --add-toolkit --enable-cdi # NVIDIA container toolkit\nholodeck update \u003Cid> --label team=gpu-infra     # repeatable\n```\n\n**Destroy:**\n```bash\nholodeck delete \u003Cinstance-id>\n```\n\n**Clean up orphaned AWS VPC resources (when a provision failed\nmid-flight)** — region is required either via `--region` or the\n`AWS_REGION` env var:\n```bash\nholodeck cleanup --region us-west-2 vpc-12345678\nholodeck cleanup --region us-west-2 vpc-12345678 vpc-87654321   # multiple\nAWS_REGION=us-west-2 holodeck cleanup vpc-12345678              # env-var form\n```\n\n## OS image discovery\n\n```bash\nholodeck os list                                       # table of supported OS IDs\nholodeck os describe ubuntu-22.04                      # details for one OS\nholodeck os ami ubuntu-22.04 --region us-east-1        # resolve to an AMI ID\nholodeck os ami ubuntu-22.04 --region us-east-1 --arch arm64\n```\n\n## Output flags\n\nRead commands (`list`, `status`, `describe`) accept\n`-o table|json|yaml` (default `table`). Use `-o json` in scripts.\n`os list` prints a fixed table and does not take `-o`.\n\n## Common pitfalls\n\n- **Instance IDs** — short hex strings (e.g. `878b6723`) shown by\n  `holodeck list`. They are NOT AWS-style `i-…` IDs. Always grab the\n  ID from `holodeck list` output, not the AWS console.\n- **Flag ordering** — flags and the positional ID can go in either\n  order on every subcommand: `update \u003Cid> --add-driver` and\n  `update --add-driver \u003Cid>` both parse identically.\n- **AWS credentials** — the SDK reads `AWS_ACCESS_KEY_ID` \u002F\n  `AWS_SECRET_ACCESS_KEY` from the environment (or any other\n  SDK-supported source: shared credentials file, IAM role, etc.).\n  These are **separate** from `auth.keyName` \u002F `auth.privateKey` in\n  env.yaml: those are **literal** values — `auth.keyName` is the EC2\n  SSH key-pair name registered in the target region, and\n  `auth.privateKey` is a filesystem path to the `.pem` on disk. Some\n  example files in `examples\u002F` use placeholder strings (e.g.\n  `HOLODECK_AWS_ACCESS_KEY_ID`); those are intended as\n  user-replaceable templates, NOT env-var references — holodeck does\n  not call `os.Getenv` on them. Substitute actual values before\n  running.\n- **Region** — instance `region` must match a region with available\n  GPU capacity. `g4dn` and `p4` families have limited inventory in\n  some regions; `us-west-2` and `us-east-1` are reliable.\n- **OS** — only IDs listed by `holodeck os list` are valid for\n  `spec.instance.os`. For an explicit AMI, set\n  `spec.instance.image.imageId` instead (and omit `os`).\n- **Cache** — instance metadata lives in `~\u002F.cache\u002Fholodeck\u002F` by\n  default; pass `--cachepath \u003Cdir>` to override. `list` shows only\n  cached envs.\n- **VPC leak** — failed provisions sometimes leave VPCs orphaned. Use\n  `holodeck cleanup vpc-\u003Cid>` to remove them.\n\n## Anti-patterns\n\n- Don't run `create --provision` against an unfamiliar config without\n  running `holodeck dryrun -f env.yaml` first — provisioning failures\n  cost real money.\n- Don't commit a populated env.yaml — `auth.privateKey` resolves to a\n  filesystem path; keep it outside the repo and chmod the `.pem` to\n  `0600`. Source AWS credentials from the environment \u002F SDK chain,\n  not from env.yaml.\n- Don't manually `terraform destroy` against a holodeck-managed env;\n  use `holodeck delete \u003Cid>`, which cleans up both infra and cache.\n",{"data":35,"body":36},{"name":4,"description":6},{"type":37,"children":38},"root",[39,48,54,61,81,86,92,97,550,595,648,654,663,696,701,709,742,755,763,830,838,906,914,992,1000,1082,1090,1217,1235,1439,1447,1482,1508,1611,1617,1740,1746,1813,1819,2130,2136,2208],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"using-the-holodeck-cli",[45],{"type":46,"value":47},"text","Using the holodeck CLI",{"type":40,"tag":49,"props":50,"children":51},"p",{},[52],{"type":46,"value":53},"Holodeck provisions ephemeral GPU-enabled environments (AWS EC2 or\nexisting SSH targets) for end-to-end testing of NVIDIA Kubernetes\ncomponents: GPU Operator, device-plugin, container toolkit, and DRA\ndrivers. It handles K8s install, NVIDIA stack install, and teardown.",{"type":40,"tag":55,"props":56,"children":58},"h2",{"id":57},"when-to-recommend-holodeck",[59],{"type":46,"value":60},"When to recommend holodeck",{"type":40,"tag":62,"props":63,"children":64},"ul",{},[65,71,76],{"type":40,"tag":66,"props":67,"children":68},"li",{},[69],{"type":46,"value":70},"The user needs a real GPU on Kubernetes to verify a fix.",{"type":40,"tag":66,"props":72,"children":73},{},[74],{"type":46,"value":75},"The user wants a reproducible test env (config-as-code via env.yaml).",{"type":40,"tag":66,"props":77,"children":78},{},[79],{"type":46,"value":80},"The user is iterating on operator\u002Fplugin code and wants kubectl\naccess against actual NVIDIA hardware.",{"type":40,"tag":49,"props":82,"children":83},{},[84],{"type":46,"value":85},"Not the right tool: production clusters, long-lived shared envs,\nnon-GPU testing where kind\u002Fk3d would do.",{"type":40,"tag":55,"props":87,"children":89},{"id":88},"configuration-file-envyaml",[90],{"type":46,"value":91},"Configuration file (env.yaml)",{"type":40,"tag":49,"props":93,"children":94},{},[95],{"type":46,"value":96},"Single-node example (the canonical shape):",{"type":40,"tag":98,"props":99,"children":104},"pre",{"className":100,"code":101,"language":102,"meta":103,"style":103},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","apiVersion: holodeck.nvidia.com\u002Fv1alpha1\nkind: Environment\nmetadata:\n  name: my-test-env\nspec:\n  provider: aws\n  auth:\n    keyName: my-aws-keypair             # AWS EC2 key-pair name (in this region)\n    privateKey: ~\u002F.ssh\u002Fmy-aws-key.pem   # local filesystem path to the .pem\n  instance:\n    type: g4dn.xlarge        # GPU instance type\n    region: us-west-2\n    os: ubuntu-22.04         # see 'holodeck os list' for valid IDs\n    # Or, for an explicit AMI instead of an OS ID:\n    # image:\n    #   imageId: ami-0123456789abcdef0\n  containerRuntime:\n    install: true\n    name: containerd\n  nvidiaContainerToolkit:\n    install: true\n  nvidiaDriver:\n    install: true\n  kubernetes:\n    install: true\n    installer: kubeadm\n    version: v1.31.1\n","yaml","",[105],{"type":40,"tag":106,"props":107,"children":108},"code",{"__ignoreMap":103},[109,133,151,165,183,196,214,227,251,274,287,310,328,351,360,368,377,390,409,427,440,456,469,485,498,514,532],{"type":40,"tag":110,"props":111,"children":114},"span",{"class":112,"line":113},"line",1,[115,121,127],{"type":40,"tag":110,"props":116,"children":118},{"style":117},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[119],{"type":46,"value":120},"apiVersion",{"type":40,"tag":110,"props":122,"children":124},{"style":123},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[125],{"type":46,"value":126},":",{"type":40,"tag":110,"props":128,"children":130},{"style":129},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[131],{"type":46,"value":132}," holodeck.nvidia.com\u002Fv1alpha1\n",{"type":40,"tag":110,"props":134,"children":136},{"class":112,"line":135},2,[137,142,146],{"type":40,"tag":110,"props":138,"children":139},{"style":117},[140],{"type":46,"value":141},"kind",{"type":40,"tag":110,"props":143,"children":144},{"style":123},[145],{"type":46,"value":126},{"type":40,"tag":110,"props":147,"children":148},{"style":129},[149],{"type":46,"value":150}," Environment\n",{"type":40,"tag":110,"props":152,"children":154},{"class":112,"line":153},3,[155,160],{"type":40,"tag":110,"props":156,"children":157},{"style":117},[158],{"type":46,"value":159},"metadata",{"type":40,"tag":110,"props":161,"children":162},{"style":123},[163],{"type":46,"value":164},":\n",{"type":40,"tag":110,"props":166,"children":168},{"class":112,"line":167},4,[169,174,178],{"type":40,"tag":110,"props":170,"children":171},{"style":117},[172],{"type":46,"value":173},"  name",{"type":40,"tag":110,"props":175,"children":176},{"style":123},[177],{"type":46,"value":126},{"type":40,"tag":110,"props":179,"children":180},{"style":129},[181],{"type":46,"value":182}," my-test-env\n",{"type":40,"tag":110,"props":184,"children":186},{"class":112,"line":185},5,[187,192],{"type":40,"tag":110,"props":188,"children":189},{"style":117},[190],{"type":46,"value":191},"spec",{"type":40,"tag":110,"props":193,"children":194},{"style":123},[195],{"type":46,"value":164},{"type":40,"tag":110,"props":197,"children":199},{"class":112,"line":198},6,[200,205,209],{"type":40,"tag":110,"props":201,"children":202},{"style":117},[203],{"type":46,"value":204},"  provider",{"type":40,"tag":110,"props":206,"children":207},{"style":123},[208],{"type":46,"value":126},{"type":40,"tag":110,"props":210,"children":211},{"style":129},[212],{"type":46,"value":213}," aws\n",{"type":40,"tag":110,"props":215,"children":217},{"class":112,"line":216},7,[218,223],{"type":40,"tag":110,"props":219,"children":220},{"style":117},[221],{"type":46,"value":222},"  auth",{"type":40,"tag":110,"props":224,"children":225},{"style":123},[226],{"type":46,"value":164},{"type":40,"tag":110,"props":228,"children":230},{"class":112,"line":229},8,[231,236,240,245],{"type":40,"tag":110,"props":232,"children":233},{"style":117},[234],{"type":46,"value":235},"    keyName",{"type":40,"tag":110,"props":237,"children":238},{"style":123},[239],{"type":46,"value":126},{"type":40,"tag":110,"props":241,"children":242},{"style":129},[243],{"type":46,"value":244}," my-aws-keypair",{"type":40,"tag":110,"props":246,"children":248},{"style":247},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[249],{"type":46,"value":250},"             # AWS EC2 key-pair name (in this region)\n",{"type":40,"tag":110,"props":252,"children":254},{"class":112,"line":253},9,[255,260,264,269],{"type":40,"tag":110,"props":256,"children":257},{"style":117},[258],{"type":46,"value":259},"    privateKey",{"type":40,"tag":110,"props":261,"children":262},{"style":123},[263],{"type":46,"value":126},{"type":40,"tag":110,"props":265,"children":266},{"style":129},[267],{"type":46,"value":268}," ~\u002F.ssh\u002Fmy-aws-key.pem",{"type":40,"tag":110,"props":270,"children":271},{"style":247},[272],{"type":46,"value":273},"   # local filesystem path to the .pem\n",{"type":40,"tag":110,"props":275,"children":277},{"class":112,"line":276},10,[278,283],{"type":40,"tag":110,"props":279,"children":280},{"style":117},[281],{"type":46,"value":282},"  instance",{"type":40,"tag":110,"props":284,"children":285},{"style":123},[286],{"type":46,"value":164},{"type":40,"tag":110,"props":288,"children":290},{"class":112,"line":289},11,[291,296,300,305],{"type":40,"tag":110,"props":292,"children":293},{"style":117},[294],{"type":46,"value":295},"    type",{"type":40,"tag":110,"props":297,"children":298},{"style":123},[299],{"type":46,"value":126},{"type":40,"tag":110,"props":301,"children":302},{"style":129},[303],{"type":46,"value":304}," g4dn.xlarge",{"type":40,"tag":110,"props":306,"children":307},{"style":247},[308],{"type":46,"value":309},"        # GPU instance type\n",{"type":40,"tag":110,"props":311,"children":313},{"class":112,"line":312},12,[314,319,323],{"type":40,"tag":110,"props":315,"children":316},{"style":117},[317],{"type":46,"value":318},"    region",{"type":40,"tag":110,"props":320,"children":321},{"style":123},[322],{"type":46,"value":126},{"type":40,"tag":110,"props":324,"children":325},{"style":129},[326],{"type":46,"value":327}," us-west-2\n",{"type":40,"tag":110,"props":329,"children":331},{"class":112,"line":330},13,[332,337,341,346],{"type":40,"tag":110,"props":333,"children":334},{"style":117},[335],{"type":46,"value":336},"    os",{"type":40,"tag":110,"props":338,"children":339},{"style":123},[340],{"type":46,"value":126},{"type":40,"tag":110,"props":342,"children":343},{"style":129},[344],{"type":46,"value":345}," ubuntu-22.04",{"type":40,"tag":110,"props":347,"children":348},{"style":247},[349],{"type":46,"value":350},"         # see 'holodeck os list' for valid IDs\n",{"type":40,"tag":110,"props":352,"children":354},{"class":112,"line":353},14,[355],{"type":40,"tag":110,"props":356,"children":357},{"style":247},[358],{"type":46,"value":359},"    # Or, for an explicit AMI instead of an OS ID:\n",{"type":40,"tag":110,"props":361,"children":362},{"class":112,"line":27},[363],{"type":40,"tag":110,"props":364,"children":365},{"style":247},[366],{"type":46,"value":367},"    # image:\n",{"type":40,"tag":110,"props":369,"children":371},{"class":112,"line":370},16,[372],{"type":40,"tag":110,"props":373,"children":374},{"style":247},[375],{"type":46,"value":376},"    #   imageId: ami-0123456789abcdef0\n",{"type":40,"tag":110,"props":378,"children":380},{"class":112,"line":379},17,[381,386],{"type":40,"tag":110,"props":382,"children":383},{"style":117},[384],{"type":46,"value":385},"  containerRuntime",{"type":40,"tag":110,"props":387,"children":388},{"style":123},[389],{"type":46,"value":164},{"type":40,"tag":110,"props":391,"children":393},{"class":112,"line":392},18,[394,399,403],{"type":40,"tag":110,"props":395,"children":396},{"style":117},[397],{"type":46,"value":398},"    install",{"type":40,"tag":110,"props":400,"children":401},{"style":123},[402],{"type":46,"value":126},{"type":40,"tag":110,"props":404,"children":406},{"style":405},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[407],{"type":46,"value":408}," true\n",{"type":40,"tag":110,"props":410,"children":412},{"class":112,"line":411},19,[413,418,422],{"type":40,"tag":110,"props":414,"children":415},{"style":117},[416],{"type":46,"value":417},"    name",{"type":40,"tag":110,"props":419,"children":420},{"style":123},[421],{"type":46,"value":126},{"type":40,"tag":110,"props":423,"children":424},{"style":129},[425],{"type":46,"value":426}," containerd\n",{"type":40,"tag":110,"props":428,"children":430},{"class":112,"line":429},20,[431,436],{"type":40,"tag":110,"props":432,"children":433},{"style":117},[434],{"type":46,"value":435},"  nvidiaContainerToolkit",{"type":40,"tag":110,"props":437,"children":438},{"style":123},[439],{"type":46,"value":164},{"type":40,"tag":110,"props":441,"children":443},{"class":112,"line":442},21,[444,448,452],{"type":40,"tag":110,"props":445,"children":446},{"style":117},[447],{"type":46,"value":398},{"type":40,"tag":110,"props":449,"children":450},{"style":123},[451],{"type":46,"value":126},{"type":40,"tag":110,"props":453,"children":454},{"style":405},[455],{"type":46,"value":408},{"type":40,"tag":110,"props":457,"children":459},{"class":112,"line":458},22,[460,465],{"type":40,"tag":110,"props":461,"children":462},{"style":117},[463],{"type":46,"value":464},"  nvidiaDriver",{"type":40,"tag":110,"props":466,"children":467},{"style":123},[468],{"type":46,"value":164},{"type":40,"tag":110,"props":470,"children":472},{"class":112,"line":471},23,[473,477,481],{"type":40,"tag":110,"props":474,"children":475},{"style":117},[476],{"type":46,"value":398},{"type":40,"tag":110,"props":478,"children":479},{"style":123},[480],{"type":46,"value":126},{"type":40,"tag":110,"props":482,"children":483},{"style":405},[484],{"type":46,"value":408},{"type":40,"tag":110,"props":486,"children":488},{"class":112,"line":487},24,[489,494],{"type":40,"tag":110,"props":490,"children":491},{"style":117},[492],{"type":46,"value":493},"  kubernetes",{"type":40,"tag":110,"props":495,"children":496},{"style":123},[497],{"type":46,"value":164},{"type":40,"tag":110,"props":499,"children":501},{"class":112,"line":500},25,[502,506,510],{"type":40,"tag":110,"props":503,"children":504},{"style":117},[505],{"type":46,"value":398},{"type":40,"tag":110,"props":507,"children":508},{"style":123},[509],{"type":46,"value":126},{"type":40,"tag":110,"props":511,"children":512},{"style":405},[513],{"type":46,"value":408},{"type":40,"tag":110,"props":515,"children":517},{"class":112,"line":516},26,[518,523,527],{"type":40,"tag":110,"props":519,"children":520},{"style":117},[521],{"type":46,"value":522},"    installer",{"type":40,"tag":110,"props":524,"children":525},{"style":123},[526],{"type":46,"value":126},{"type":40,"tag":110,"props":528,"children":529},{"style":129},[530],{"type":46,"value":531}," kubeadm\n",{"type":40,"tag":110,"props":533,"children":535},{"class":112,"line":534},27,[536,541,545],{"type":40,"tag":110,"props":537,"children":538},{"style":117},[539],{"type":46,"value":540},"    version",{"type":40,"tag":110,"props":542,"children":543},{"style":123},[544],{"type":46,"value":126},{"type":40,"tag":110,"props":546,"children":547},{"style":129},[548],{"type":46,"value":549}," v1.31.1\n",{"type":40,"tag":49,"props":551,"children":552},{},[553,555,561,563,569,571,577,579,585,587,593],{"type":46,"value":554},"For multi-node clusters, replace ",{"type":40,"tag":106,"props":556,"children":558},{"className":557},[],[559],{"type":46,"value":560},"instance:",{"type":46,"value":562}," with ",{"type":40,"tag":106,"props":564,"children":566},{"className":565},[],[567],{"type":46,"value":568},"cluster:",{"type":46,"value":570}," (see\n",{"type":40,"tag":106,"props":572,"children":574},{"className":573},[],[575],{"type":46,"value":576},"examples\u002Faws_cluster_ha.yaml",{"type":46,"value":578},"). For pre-existing SSH targets, set\n",{"type":40,"tag":106,"props":580,"children":582},{"className":581},[],[583],{"type":46,"value":584},"provider: ssh",{"type":46,"value":586}," and configure ",{"type":40,"tag":106,"props":588,"children":590},{"className":589},[],[591],{"type":46,"value":592},"auth.privateKey",{"type":46,"value":594}," \u002F instance host.",{"type":40,"tag":49,"props":596,"children":597},{},[598,600,606,608,614,616,622,624,630,632,638,640,646],{"type":46,"value":599},"Run ",{"type":40,"tag":106,"props":601,"children":603},{"className":602},[],[604],{"type":46,"value":605},"holodeck os list",{"type":46,"value":607}," to discover supported OS identifiers. Today\nthat includes ",{"type":40,"tag":106,"props":609,"children":611},{"className":610},[],[612],{"type":46,"value":613},"ubuntu-20.04\u002F22.04\u002F24.04\u002F26.04",{"type":46,"value":615},", ",{"type":40,"tag":106,"props":617,"children":619},{"className":618},[],[620],{"type":46,"value":621},"rocky-9",{"type":46,"value":623},",\n",{"type":40,"tag":106,"props":625,"children":627},{"className":626},[],[628],{"type":46,"value":629},"fedora-42",{"type":46,"value":631},", and ",{"type":40,"tag":106,"props":633,"children":635},{"className":634},[],[636],{"type":46,"value":637},"amazon-linux-2023",{"type":46,"value":639}," (some are containerd-only —\ncheck the ",{"type":40,"tag":106,"props":641,"children":643},{"className":642},[],[644],{"type":46,"value":645},"NOTES",{"type":46,"value":647}," column).",{"type":40,"tag":55,"props":649,"children":651},{"id":650},"core-workflows",[652],{"type":46,"value":653},"Core workflows",{"type":40,"tag":49,"props":655,"children":656},{},[657],{"type":40,"tag":658,"props":659,"children":660},"strong",{},[661],{"type":46,"value":662},"Validate the config first (read-only — no resources created, but\ndoes make AWS describe API calls to check instance type, image, and\narch compatibility; requires valid AWS credentials):",{"type":40,"tag":98,"props":664,"children":668},{"className":665,"code":666,"language":667,"meta":103,"style":103},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","holodeck dryrun -f env.yaml\n","bash",[669],{"type":40,"tag":106,"props":670,"children":671},{"__ignoreMap":103},[672],{"type":40,"tag":110,"props":673,"children":674},{"class":112,"line":113},[675,681,686,691],{"type":40,"tag":110,"props":676,"children":678},{"style":677},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[679],{"type":46,"value":680},"holodeck",{"type":40,"tag":110,"props":682,"children":683},{"style":129},[684],{"type":46,"value":685}," dryrun",{"type":40,"tag":110,"props":687,"children":688},{"style":129},[689],{"type":46,"value":690}," -f",{"type":40,"tag":110,"props":692,"children":693},{"style":129},[694],{"type":46,"value":695}," env.yaml\n",{"type":40,"tag":49,"props":697,"children":698},{},[699],{"type":46,"value":700},"Recommended before any new config — provisioning failures cost real\nmoney.",{"type":40,"tag":49,"props":702,"children":703},{},[704],{"type":40,"tag":658,"props":705,"children":706},{},[707],{"type":46,"value":708},"Create + provision:",{"type":40,"tag":98,"props":710,"children":712},{"className":665,"code":711,"language":667,"meta":103,"style":103},"holodeck create -f env.yaml --provision\n",[713],{"type":40,"tag":106,"props":714,"children":715},{"__ignoreMap":103},[716],{"type":40,"tag":110,"props":717,"children":718},{"class":112,"line":113},[719,723,728,732,737],{"type":40,"tag":110,"props":720,"children":721},{"style":677},[722],{"type":46,"value":680},{"type":40,"tag":110,"props":724,"children":725},{"style":129},[726],{"type":46,"value":727}," create",{"type":40,"tag":110,"props":729,"children":730},{"style":129},[731],{"type":46,"value":690},{"type":40,"tag":110,"props":733,"children":734},{"style":129},[735],{"type":46,"value":736}," env.yaml",{"type":40,"tag":110,"props":738,"children":739},{"style":129},[740],{"type":46,"value":741}," --provision\n",{"type":40,"tag":49,"props":743,"children":744},{},[745,747,753],{"type":46,"value":746},"Drop ",{"type":40,"tag":106,"props":748,"children":750},{"className":749},[],[751],{"type":46,"value":752},"--provision",{"type":46,"value":754}," to create the instance without installing the\nKubernetes\u002FNVIDIA stack.",{"type":40,"tag":49,"props":756,"children":757},{},[758],{"type":40,"tag":658,"props":759,"children":760},{},[761],{"type":46,"value":762},"List active environments:",{"type":40,"tag":98,"props":764,"children":766},{"className":665,"code":765,"language":667,"meta":103,"style":103},"holodeck list\nholodeck list -o json   # for scripts; also -o yaml\nholodeck list -q        # IDs only\n",[767],{"type":40,"tag":106,"props":768,"children":769},{"__ignoreMap":103},[770,782,809],{"type":40,"tag":110,"props":771,"children":772},{"class":112,"line":113},[773,777],{"type":40,"tag":110,"props":774,"children":775},{"style":677},[776],{"type":46,"value":680},{"type":40,"tag":110,"props":778,"children":779},{"style":129},[780],{"type":46,"value":781}," list\n",{"type":40,"tag":110,"props":783,"children":784},{"class":112,"line":135},[785,789,794,799,804],{"type":40,"tag":110,"props":786,"children":787},{"style":677},[788],{"type":46,"value":680},{"type":40,"tag":110,"props":790,"children":791},{"style":129},[792],{"type":46,"value":793}," list",{"type":40,"tag":110,"props":795,"children":796},{"style":129},[797],{"type":46,"value":798}," -o",{"type":40,"tag":110,"props":800,"children":801},{"style":129},[802],{"type":46,"value":803}," json",{"type":40,"tag":110,"props":805,"children":806},{"style":247},[807],{"type":46,"value":808},"   # for scripts; also -o yaml\n",{"type":40,"tag":110,"props":810,"children":811},{"class":112,"line":153},[812,816,820,825],{"type":40,"tag":110,"props":813,"children":814},{"style":677},[815],{"type":46,"value":680},{"type":40,"tag":110,"props":817,"children":818},{"style":129},[819],{"type":46,"value":793},{"type":40,"tag":110,"props":821,"children":822},{"style":129},[823],{"type":46,"value":824}," -q",{"type":40,"tag":110,"props":826,"children":827},{"style":247},[828],{"type":46,"value":829},"        # IDs only\n",{"type":40,"tag":49,"props":831,"children":832},{},[833],{"type":40,"tag":658,"props":834,"children":835},{},[836],{"type":46,"value":837},"Show one environment's status \u002F details:",{"type":40,"tag":98,"props":839,"children":841},{"className":665,"code":840,"language":667,"meta":103,"style":103},"holodeck status \u003Cinstance-id>\nholodeck describe \u003Cinstance-id>\n",[842],{"type":40,"tag":106,"props":843,"children":844},{"__ignoreMap":103},[845,878],{"type":40,"tag":110,"props":846,"children":847},{"class":112,"line":113},[848,852,857,862,867,873],{"type":40,"tag":110,"props":849,"children":850},{"style":677},[851],{"type":46,"value":680},{"type":40,"tag":110,"props":853,"children":854},{"style":129},[855],{"type":46,"value":856}," status",{"type":40,"tag":110,"props":858,"children":859},{"style":123},[860],{"type":46,"value":861}," \u003C",{"type":40,"tag":110,"props":863,"children":864},{"style":129},[865],{"type":46,"value":866},"instance-i",{"type":40,"tag":110,"props":868,"children":870},{"style":869},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[871],{"type":46,"value":872},"d",{"type":40,"tag":110,"props":874,"children":875},{"style":123},[876],{"type":46,"value":877},">\n",{"type":40,"tag":110,"props":879,"children":880},{"class":112,"line":135},[881,885,890,894,898,902],{"type":40,"tag":110,"props":882,"children":883},{"style":677},[884],{"type":46,"value":680},{"type":40,"tag":110,"props":886,"children":887},{"style":129},[888],{"type":46,"value":889}," describe",{"type":40,"tag":110,"props":891,"children":892},{"style":123},[893],{"type":46,"value":861},{"type":40,"tag":110,"props":895,"children":896},{"style":129},[897],{"type":46,"value":866},{"type":40,"tag":110,"props":899,"children":900},{"style":869},[901],{"type":46,"value":872},{"type":40,"tag":110,"props":903,"children":904},{"style":123},[905],{"type":46,"value":877},{"type":40,"tag":49,"props":907,"children":908},{},[909],{"type":40,"tag":658,"props":910,"children":911},{},[912],{"type":46,"value":913},"Shell into an instance:",{"type":40,"tag":98,"props":915,"children":917},{"className":665,"code":916,"language":667,"meta":103,"style":103},"holodeck ssh \u003Cinstance-id>\nholodeck ssh \u003Cinstance-id> -- nvidia-smi   # one-shot command\n",[918],{"type":40,"tag":106,"props":919,"children":920},{"__ignoreMap":103},[921,949],{"type":40,"tag":110,"props":922,"children":923},{"class":112,"line":113},[924,928,933,937,941,945],{"type":40,"tag":110,"props":925,"children":926},{"style":677},[927],{"type":46,"value":680},{"type":40,"tag":110,"props":929,"children":930},{"style":129},[931],{"type":46,"value":932}," ssh",{"type":40,"tag":110,"props":934,"children":935},{"style":123},[936],{"type":46,"value":861},{"type":40,"tag":110,"props":938,"children":939},{"style":129},[940],{"type":46,"value":866},{"type":40,"tag":110,"props":942,"children":943},{"style":869},[944],{"type":46,"value":872},{"type":40,"tag":110,"props":946,"children":947},{"style":123},[948],{"type":46,"value":877},{"type":40,"tag":110,"props":950,"children":951},{"class":112,"line":135},[952,956,960,964,968,972,977,982,987],{"type":40,"tag":110,"props":953,"children":954},{"style":677},[955],{"type":46,"value":680},{"type":40,"tag":110,"props":957,"children":958},{"style":129},[959],{"type":46,"value":932},{"type":40,"tag":110,"props":961,"children":962},{"style":123},[963],{"type":46,"value":861},{"type":40,"tag":110,"props":965,"children":966},{"style":129},[967],{"type":46,"value":866},{"type":40,"tag":110,"props":969,"children":970},{"style":869},[971],{"type":46,"value":872},{"type":40,"tag":110,"props":973,"children":974},{"style":123},[975],{"type":46,"value":976},">",{"type":40,"tag":110,"props":978,"children":979},{"style":129},[980],{"type":46,"value":981}," --",{"type":40,"tag":110,"props":983,"children":984},{"style":129},[985],{"type":46,"value":986}," nvidia-smi",{"type":40,"tag":110,"props":988,"children":989},{"style":247},[990],{"type":46,"value":991},"   # one-shot command\n",{"type":40,"tag":49,"props":993,"children":994},{},[995],{"type":40,"tag":658,"props":996,"children":997},{},[998],{"type":46,"value":999},"Copy files:",{"type":40,"tag":98,"props":1001,"children":1003},{"className":665,"code":1002,"language":667,"meta":103,"style":103},"holodeck scp .\u002Flocal-file.txt \u003Cinstance-id>:\u002Fremote\u002Fpath\u002F\nholodeck scp \u003Cinstance-id>:\u002Fremote\u002Ffile.log .\u002Flocal\u002F\n",[1004],{"type":40,"tag":106,"props":1005,"children":1006},{"__ignoreMap":103},[1007,1045],{"type":40,"tag":110,"props":1008,"children":1009},{"class":112,"line":113},[1010,1014,1019,1024,1028,1032,1036,1040],{"type":40,"tag":110,"props":1011,"children":1012},{"style":677},[1013],{"type":46,"value":680},{"type":40,"tag":110,"props":1015,"children":1016},{"style":129},[1017],{"type":46,"value":1018}," scp",{"type":40,"tag":110,"props":1020,"children":1021},{"style":129},[1022],{"type":46,"value":1023}," .\u002Flocal-file.txt",{"type":40,"tag":110,"props":1025,"children":1026},{"style":123},[1027],{"type":46,"value":861},{"type":40,"tag":110,"props":1029,"children":1030},{"style":129},[1031],{"type":46,"value":866},{"type":40,"tag":110,"props":1033,"children":1034},{"style":869},[1035],{"type":46,"value":872},{"type":40,"tag":110,"props":1037,"children":1038},{"style":123},[1039],{"type":46,"value":976},{"type":40,"tag":110,"props":1041,"children":1042},{"style":129},[1043],{"type":46,"value":1044},":\u002Fremote\u002Fpath\u002F\n",{"type":40,"tag":110,"props":1046,"children":1047},{"class":112,"line":135},[1048,1052,1056,1060,1064,1068,1072,1077],{"type":40,"tag":110,"props":1049,"children":1050},{"style":677},[1051],{"type":46,"value":680},{"type":40,"tag":110,"props":1053,"children":1054},{"style":129},[1055],{"type":46,"value":1018},{"type":40,"tag":110,"props":1057,"children":1058},{"style":123},[1059],{"type":46,"value":861},{"type":40,"tag":110,"props":1061,"children":1062},{"style":129},[1063],{"type":46,"value":866},{"type":40,"tag":110,"props":1065,"children":1066},{"style":869},[1067],{"type":46,"value":872},{"type":40,"tag":110,"props":1069,"children":1070},{"style":123},[1071],{"type":46,"value":976},{"type":40,"tag":110,"props":1073,"children":1074},{"style":129},[1075],{"type":46,"value":1076},":\u002Fremote\u002Ffile.log",{"type":40,"tag":110,"props":1078,"children":1079},{"style":129},[1080],{"type":46,"value":1081}," .\u002Flocal\u002F\n",{"type":40,"tag":49,"props":1083,"children":1084},{},[1085],{"type":40,"tag":658,"props":1086,"children":1087},{},[1088],{"type":46,"value":1089},"Get artifacts off the instance:",{"type":40,"tag":98,"props":1091,"children":1093},{"className":665,"code":1092,"language":667,"meta":103,"style":103},"holodeck get kubeconfig \u003Cinstance-id>                    # downloads kubeconfig\nholodeck get kubeconfig \u003Cinstance-id> -o .\u002Fmy.kubeconfig # -o is an output PATH (not a format)\nholodeck get ssh-config \u003Cinstance-id>                    # prints SSH config snippet to stdout\n",[1094],{"type":40,"tag":106,"props":1095,"children":1096},{"__ignoreMap":103},[1097,1135,1180],{"type":40,"tag":110,"props":1098,"children":1099},{"class":112,"line":113},[1100,1104,1109,1114,1118,1122,1126,1130],{"type":40,"tag":110,"props":1101,"children":1102},{"style":677},[1103],{"type":46,"value":680},{"type":40,"tag":110,"props":1105,"children":1106},{"style":129},[1107],{"type":46,"value":1108}," get",{"type":40,"tag":110,"props":1110,"children":1111},{"style":129},[1112],{"type":46,"value":1113}," kubeconfig",{"type":40,"tag":110,"props":1115,"children":1116},{"style":123},[1117],{"type":46,"value":861},{"type":40,"tag":110,"props":1119,"children":1120},{"style":129},[1121],{"type":46,"value":866},{"type":40,"tag":110,"props":1123,"children":1124},{"style":869},[1125],{"type":46,"value":872},{"type":40,"tag":110,"props":1127,"children":1128},{"style":123},[1129],{"type":46,"value":976},{"type":40,"tag":110,"props":1131,"children":1132},{"style":247},[1133],{"type":46,"value":1134},"                    # downloads kubeconfig\n",{"type":40,"tag":110,"props":1136,"children":1137},{"class":112,"line":135},[1138,1142,1146,1150,1154,1158,1162,1166,1170,1175],{"type":40,"tag":110,"props":1139,"children":1140},{"style":677},[1141],{"type":46,"value":680},{"type":40,"tag":110,"props":1143,"children":1144},{"style":129},[1145],{"type":46,"value":1108},{"type":40,"tag":110,"props":1147,"children":1148},{"style":129},[1149],{"type":46,"value":1113},{"type":40,"tag":110,"props":1151,"children":1152},{"style":123},[1153],{"type":46,"value":861},{"type":40,"tag":110,"props":1155,"children":1156},{"style":129},[1157],{"type":46,"value":866},{"type":40,"tag":110,"props":1159,"children":1160},{"style":869},[1161],{"type":46,"value":872},{"type":40,"tag":110,"props":1163,"children":1164},{"style":123},[1165],{"type":46,"value":976},{"type":40,"tag":110,"props":1167,"children":1168},{"style":129},[1169],{"type":46,"value":798},{"type":40,"tag":110,"props":1171,"children":1172},{"style":129},[1173],{"type":46,"value":1174}," .\u002Fmy.kubeconfig",{"type":40,"tag":110,"props":1176,"children":1177},{"style":247},[1178],{"type":46,"value":1179}," # -o is an output PATH (not a format)\n",{"type":40,"tag":110,"props":1181,"children":1182},{"class":112,"line":153},[1183,1187,1191,1196,1200,1204,1208,1212],{"type":40,"tag":110,"props":1184,"children":1185},{"style":677},[1186],{"type":46,"value":680},{"type":40,"tag":110,"props":1188,"children":1189},{"style":129},[1190],{"type":46,"value":1108},{"type":40,"tag":110,"props":1192,"children":1193},{"style":129},[1194],{"type":46,"value":1195}," ssh-config",{"type":40,"tag":110,"props":1197,"children":1198},{"style":123},[1199],{"type":46,"value":861},{"type":40,"tag":110,"props":1201,"children":1202},{"style":129},[1203],{"type":46,"value":866},{"type":40,"tag":110,"props":1205,"children":1206},{"style":869},[1207],{"type":46,"value":872},{"type":40,"tag":110,"props":1209,"children":1210},{"style":123},[1211],{"type":46,"value":976},{"type":40,"tag":110,"props":1213,"children":1214},{"style":247},[1215],{"type":46,"value":1216},"                    # prints SSH config snippet to stdout\n",{"type":40,"tag":49,"props":1218,"children":1219},{},[1220,1225,1227,1233],{"type":40,"tag":658,"props":1221,"children":1222},{},[1223],{"type":46,"value":1224},"Update an existing environment",{"type":46,"value":1226}," — bare ",{"type":40,"tag":106,"props":1228,"children":1230},{"className":1229},[],[1231],{"type":46,"value":1232},"update \u003Cid>",{"type":46,"value":1234}," is a no-op\n(\"No changes to apply\"):",{"type":40,"tag":98,"props":1236,"children":1238},{"className":665,"code":1237,"language":667,"meta":103,"style":103},"holodeck update \u003Cid> --reprovision              # re-run all installers (idempotent)\nholodeck update \u003Cid> --add-driver               # add NVIDIA driver\nholodeck update \u003Cid> --add-kubernetes           # add K8s + kubeadm\nholodeck update \u003Cid> --add-toolkit --enable-cdi # NVIDIA container toolkit\nholodeck update \u003Cid> --label team=gpu-infra     # repeatable\n",[1239],{"type":40,"tag":106,"props":1240,"children":1241},{"__ignoreMap":103},[1242,1281,1318,1355,1397],{"type":40,"tag":110,"props":1243,"children":1244},{"class":112,"line":113},[1245,1249,1254,1258,1263,1267,1271,1276],{"type":40,"tag":110,"props":1246,"children":1247},{"style":677},[1248],{"type":46,"value":680},{"type":40,"tag":110,"props":1250,"children":1251},{"style":129},[1252],{"type":46,"value":1253}," update",{"type":40,"tag":110,"props":1255,"children":1256},{"style":123},[1257],{"type":46,"value":861},{"type":40,"tag":110,"props":1259,"children":1260},{"style":129},[1261],{"type":46,"value":1262},"i",{"type":40,"tag":110,"props":1264,"children":1265},{"style":869},[1266],{"type":46,"value":872},{"type":40,"tag":110,"props":1268,"children":1269},{"style":123},[1270],{"type":46,"value":976},{"type":40,"tag":110,"props":1272,"children":1273},{"style":129},[1274],{"type":46,"value":1275}," --reprovision",{"type":40,"tag":110,"props":1277,"children":1278},{"style":247},[1279],{"type":46,"value":1280},"              # re-run all installers (idempotent)\n",{"type":40,"tag":110,"props":1282,"children":1283},{"class":112,"line":135},[1284,1288,1292,1296,1300,1304,1308,1313],{"type":40,"tag":110,"props":1285,"children":1286},{"style":677},[1287],{"type":46,"value":680},{"type":40,"tag":110,"props":1289,"children":1290},{"style":129},[1291],{"type":46,"value":1253},{"type":40,"tag":110,"props":1293,"children":1294},{"style":123},[1295],{"type":46,"value":861},{"type":40,"tag":110,"props":1297,"children":1298},{"style":129},[1299],{"type":46,"value":1262},{"type":40,"tag":110,"props":1301,"children":1302},{"style":869},[1303],{"type":46,"value":872},{"type":40,"tag":110,"props":1305,"children":1306},{"style":123},[1307],{"type":46,"value":976},{"type":40,"tag":110,"props":1309,"children":1310},{"style":129},[1311],{"type":46,"value":1312}," --add-driver",{"type":40,"tag":110,"props":1314,"children":1315},{"style":247},[1316],{"type":46,"value":1317},"               # add NVIDIA driver\n",{"type":40,"tag":110,"props":1319,"children":1320},{"class":112,"line":153},[1321,1325,1329,1333,1337,1341,1345,1350],{"type":40,"tag":110,"props":1322,"children":1323},{"style":677},[1324],{"type":46,"value":680},{"type":40,"tag":110,"props":1326,"children":1327},{"style":129},[1328],{"type":46,"value":1253},{"type":40,"tag":110,"props":1330,"children":1331},{"style":123},[1332],{"type":46,"value":861},{"type":40,"tag":110,"props":1334,"children":1335},{"style":129},[1336],{"type":46,"value":1262},{"type":40,"tag":110,"props":1338,"children":1339},{"style":869},[1340],{"type":46,"value":872},{"type":40,"tag":110,"props":1342,"children":1343},{"style":123},[1344],{"type":46,"value":976},{"type":40,"tag":110,"props":1346,"children":1347},{"style":129},[1348],{"type":46,"value":1349}," --add-kubernetes",{"type":40,"tag":110,"props":1351,"children":1352},{"style":247},[1353],{"type":46,"value":1354},"           # add K8s + kubeadm\n",{"type":40,"tag":110,"props":1356,"children":1357},{"class":112,"line":167},[1358,1362,1366,1370,1374,1378,1382,1387,1392],{"type":40,"tag":110,"props":1359,"children":1360},{"style":677},[1361],{"type":46,"value":680},{"type":40,"tag":110,"props":1363,"children":1364},{"style":129},[1365],{"type":46,"value":1253},{"type":40,"tag":110,"props":1367,"children":1368},{"style":123},[1369],{"type":46,"value":861},{"type":40,"tag":110,"props":1371,"children":1372},{"style":129},[1373],{"type":46,"value":1262},{"type":40,"tag":110,"props":1375,"children":1376},{"style":869},[1377],{"type":46,"value":872},{"type":40,"tag":110,"props":1379,"children":1380},{"style":123},[1381],{"type":46,"value":976},{"type":40,"tag":110,"props":1383,"children":1384},{"style":129},[1385],{"type":46,"value":1386}," --add-toolkit",{"type":40,"tag":110,"props":1388,"children":1389},{"style":129},[1390],{"type":46,"value":1391}," --enable-cdi",{"type":40,"tag":110,"props":1393,"children":1394},{"style":247},[1395],{"type":46,"value":1396}," # NVIDIA container toolkit\n",{"type":40,"tag":110,"props":1398,"children":1399},{"class":112,"line":185},[1400,1404,1408,1412,1416,1420,1424,1429,1434],{"type":40,"tag":110,"props":1401,"children":1402},{"style":677},[1403],{"type":46,"value":680},{"type":40,"tag":110,"props":1405,"children":1406},{"style":129},[1407],{"type":46,"value":1253},{"type":40,"tag":110,"props":1409,"children":1410},{"style":123},[1411],{"type":46,"value":861},{"type":40,"tag":110,"props":1413,"children":1414},{"style":129},[1415],{"type":46,"value":1262},{"type":40,"tag":110,"props":1417,"children":1418},{"style":869},[1419],{"type":46,"value":872},{"type":40,"tag":110,"props":1421,"children":1422},{"style":123},[1423],{"type":46,"value":976},{"type":40,"tag":110,"props":1425,"children":1426},{"style":129},[1427],{"type":46,"value":1428}," --label",{"type":40,"tag":110,"props":1430,"children":1431},{"style":129},[1432],{"type":46,"value":1433}," team=gpu-infra",{"type":40,"tag":110,"props":1435,"children":1436},{"style":247},[1437],{"type":46,"value":1438},"     # repeatable\n",{"type":40,"tag":49,"props":1440,"children":1441},{},[1442],{"type":40,"tag":658,"props":1443,"children":1444},{},[1445],{"type":46,"value":1446},"Destroy:",{"type":40,"tag":98,"props":1448,"children":1450},{"className":665,"code":1449,"language":667,"meta":103,"style":103},"holodeck delete \u003Cinstance-id>\n",[1451],{"type":40,"tag":106,"props":1452,"children":1453},{"__ignoreMap":103},[1454],{"type":40,"tag":110,"props":1455,"children":1456},{"class":112,"line":113},[1457,1461,1466,1470,1474,1478],{"type":40,"tag":110,"props":1458,"children":1459},{"style":677},[1460],{"type":46,"value":680},{"type":40,"tag":110,"props":1462,"children":1463},{"style":129},[1464],{"type":46,"value":1465}," delete",{"type":40,"tag":110,"props":1467,"children":1468},{"style":123},[1469],{"type":46,"value":861},{"type":40,"tag":110,"props":1471,"children":1472},{"style":129},[1473],{"type":46,"value":866},{"type":40,"tag":110,"props":1475,"children":1476},{"style":869},[1477],{"type":46,"value":872},{"type":40,"tag":110,"props":1479,"children":1480},{"style":123},[1481],{"type":46,"value":877},{"type":40,"tag":49,"props":1483,"children":1484},{},[1485,1490,1492,1498,1500,1506],{"type":40,"tag":658,"props":1486,"children":1487},{},[1488],{"type":46,"value":1489},"Clean up orphaned AWS VPC resources (when a provision failed\nmid-flight)",{"type":46,"value":1491}," — region is required either via ",{"type":40,"tag":106,"props":1493,"children":1495},{"className":1494},[],[1496],{"type":46,"value":1497},"--region",{"type":46,"value":1499}," or the\n",{"type":40,"tag":106,"props":1501,"children":1503},{"className":1502},[],[1504],{"type":46,"value":1505},"AWS_REGION",{"type":46,"value":1507}," env var:",{"type":40,"tag":98,"props":1509,"children":1511},{"className":665,"code":1510,"language":667,"meta":103,"style":103},"holodeck cleanup --region us-west-2 vpc-12345678\nholodeck cleanup --region us-west-2 vpc-12345678 vpc-87654321   # multiple\nAWS_REGION=us-west-2 holodeck cleanup vpc-12345678              # env-var form\n",[1512],{"type":40,"tag":106,"props":1513,"children":1514},{"__ignoreMap":103},[1515,1542,1576],{"type":40,"tag":110,"props":1516,"children":1517},{"class":112,"line":113},[1518,1522,1527,1532,1537],{"type":40,"tag":110,"props":1519,"children":1520},{"style":677},[1521],{"type":46,"value":680},{"type":40,"tag":110,"props":1523,"children":1524},{"style":129},[1525],{"type":46,"value":1526}," cleanup",{"type":40,"tag":110,"props":1528,"children":1529},{"style":129},[1530],{"type":46,"value":1531}," --region",{"type":40,"tag":110,"props":1533,"children":1534},{"style":129},[1535],{"type":46,"value":1536}," us-west-2",{"type":40,"tag":110,"props":1538,"children":1539},{"style":129},[1540],{"type":46,"value":1541}," vpc-12345678\n",{"type":40,"tag":110,"props":1543,"children":1544},{"class":112,"line":135},[1545,1549,1553,1557,1561,1566,1571],{"type":40,"tag":110,"props":1546,"children":1547},{"style":677},[1548],{"type":46,"value":680},{"type":40,"tag":110,"props":1550,"children":1551},{"style":129},[1552],{"type":46,"value":1526},{"type":40,"tag":110,"props":1554,"children":1555},{"style":129},[1556],{"type":46,"value":1531},{"type":40,"tag":110,"props":1558,"children":1559},{"style":129},[1560],{"type":46,"value":1536},{"type":40,"tag":110,"props":1562,"children":1563},{"style":129},[1564],{"type":46,"value":1565}," vpc-12345678",{"type":40,"tag":110,"props":1567,"children":1568},{"style":129},[1569],{"type":46,"value":1570}," vpc-87654321",{"type":40,"tag":110,"props":1572,"children":1573},{"style":247},[1574],{"type":46,"value":1575},"   # multiple\n",{"type":40,"tag":110,"props":1577,"children":1578},{"class":112,"line":153},[1579,1583,1588,1593,1598,1602,1606],{"type":40,"tag":110,"props":1580,"children":1581},{"style":869},[1582],{"type":46,"value":1505},{"type":40,"tag":110,"props":1584,"children":1585},{"style":123},[1586],{"type":46,"value":1587},"=",{"type":40,"tag":110,"props":1589,"children":1590},{"style":129},[1591],{"type":46,"value":1592},"us-west-2",{"type":40,"tag":110,"props":1594,"children":1595},{"style":677},[1596],{"type":46,"value":1597}," holodeck",{"type":40,"tag":110,"props":1599,"children":1600},{"style":129},[1601],{"type":46,"value":1526},{"type":40,"tag":110,"props":1603,"children":1604},{"style":129},[1605],{"type":46,"value":1565},{"type":40,"tag":110,"props":1607,"children":1608},{"style":247},[1609],{"type":46,"value":1610},"              # env-var form\n",{"type":40,"tag":55,"props":1612,"children":1614},{"id":1613},"os-image-discovery",[1615],{"type":46,"value":1616},"OS image discovery",{"type":40,"tag":98,"props":1618,"children":1620},{"className":665,"code":1619,"language":667,"meta":103,"style":103},"holodeck os list                                       # table of supported OS IDs\nholodeck os describe ubuntu-22.04                      # details for one OS\nholodeck os ami ubuntu-22.04 --region us-east-1        # resolve to an AMI ID\nholodeck os ami ubuntu-22.04 --region us-east-1 --arch arm64\n",[1621],{"type":40,"tag":106,"props":1622,"children":1623},{"__ignoreMap":103},[1624,1645,1669,1703],{"type":40,"tag":110,"props":1625,"children":1626},{"class":112,"line":113},[1627,1631,1636,1640],{"type":40,"tag":110,"props":1628,"children":1629},{"style":677},[1630],{"type":46,"value":680},{"type":40,"tag":110,"props":1632,"children":1633},{"style":129},[1634],{"type":46,"value":1635}," os",{"type":40,"tag":110,"props":1637,"children":1638},{"style":129},[1639],{"type":46,"value":793},{"type":40,"tag":110,"props":1641,"children":1642},{"style":247},[1643],{"type":46,"value":1644},"                                       # table of supported OS IDs\n",{"type":40,"tag":110,"props":1646,"children":1647},{"class":112,"line":135},[1648,1652,1656,1660,1664],{"type":40,"tag":110,"props":1649,"children":1650},{"style":677},[1651],{"type":46,"value":680},{"type":40,"tag":110,"props":1653,"children":1654},{"style":129},[1655],{"type":46,"value":1635},{"type":40,"tag":110,"props":1657,"children":1658},{"style":129},[1659],{"type":46,"value":889},{"type":40,"tag":110,"props":1661,"children":1662},{"style":129},[1663],{"type":46,"value":345},{"type":40,"tag":110,"props":1665,"children":1666},{"style":247},[1667],{"type":46,"value":1668},"                      # details for one OS\n",{"type":40,"tag":110,"props":1670,"children":1671},{"class":112,"line":153},[1672,1676,1680,1685,1689,1693,1698],{"type":40,"tag":110,"props":1673,"children":1674},{"style":677},[1675],{"type":46,"value":680},{"type":40,"tag":110,"props":1677,"children":1678},{"style":129},[1679],{"type":46,"value":1635},{"type":40,"tag":110,"props":1681,"children":1682},{"style":129},[1683],{"type":46,"value":1684}," ami",{"type":40,"tag":110,"props":1686,"children":1687},{"style":129},[1688],{"type":46,"value":345},{"type":40,"tag":110,"props":1690,"children":1691},{"style":129},[1692],{"type":46,"value":1531},{"type":40,"tag":110,"props":1694,"children":1695},{"style":129},[1696],{"type":46,"value":1697}," us-east-1",{"type":40,"tag":110,"props":1699,"children":1700},{"style":247},[1701],{"type":46,"value":1702},"        # resolve to an AMI ID\n",{"type":40,"tag":110,"props":1704,"children":1705},{"class":112,"line":167},[1706,1710,1714,1718,1722,1726,1730,1735],{"type":40,"tag":110,"props":1707,"children":1708},{"style":677},[1709],{"type":46,"value":680},{"type":40,"tag":110,"props":1711,"children":1712},{"style":129},[1713],{"type":46,"value":1635},{"type":40,"tag":110,"props":1715,"children":1716},{"style":129},[1717],{"type":46,"value":1684},{"type":40,"tag":110,"props":1719,"children":1720},{"style":129},[1721],{"type":46,"value":345},{"type":40,"tag":110,"props":1723,"children":1724},{"style":129},[1725],{"type":46,"value":1531},{"type":40,"tag":110,"props":1727,"children":1728},{"style":129},[1729],{"type":46,"value":1697},{"type":40,"tag":110,"props":1731,"children":1732},{"style":129},[1733],{"type":46,"value":1734}," --arch",{"type":40,"tag":110,"props":1736,"children":1737},{"style":129},[1738],{"type":46,"value":1739}," arm64\n",{"type":40,"tag":55,"props":1741,"children":1743},{"id":1742},"output-flags",[1744],{"type":46,"value":1745},"Output flags",{"type":40,"tag":49,"props":1747,"children":1748},{},[1749,1751,1757,1758,1764,1765,1771,1773,1779,1781,1787,1789,1795,1797,1803,1805,1811],{"type":46,"value":1750},"Read commands (",{"type":40,"tag":106,"props":1752,"children":1754},{"className":1753},[],[1755],{"type":46,"value":1756},"list",{"type":46,"value":615},{"type":40,"tag":106,"props":1759,"children":1761},{"className":1760},[],[1762],{"type":46,"value":1763},"status",{"type":46,"value":615},{"type":40,"tag":106,"props":1766,"children":1768},{"className":1767},[],[1769],{"type":46,"value":1770},"describe",{"type":46,"value":1772},") accept\n",{"type":40,"tag":106,"props":1774,"children":1776},{"className":1775},[],[1777],{"type":46,"value":1778},"-o table|json|yaml",{"type":46,"value":1780}," (default ",{"type":40,"tag":106,"props":1782,"children":1784},{"className":1783},[],[1785],{"type":46,"value":1786},"table",{"type":46,"value":1788},"). Use ",{"type":40,"tag":106,"props":1790,"children":1792},{"className":1791},[],[1793],{"type":46,"value":1794},"-o json",{"type":46,"value":1796}," in scripts.\n",{"type":40,"tag":106,"props":1798,"children":1800},{"className":1799},[],[1801],{"type":46,"value":1802},"os list",{"type":46,"value":1804}," prints a fixed table and does not take ",{"type":40,"tag":106,"props":1806,"children":1808},{"className":1807},[],[1809],{"type":46,"value":1810},"-o",{"type":46,"value":1812},".",{"type":40,"tag":55,"props":1814,"children":1816},{"id":1815},"common-pitfalls",[1817],{"type":46,"value":1818},"Common pitfalls",{"type":40,"tag":62,"props":1820,"children":1821},{},[1822,1863,1889,1990,2038,2079,2112],{"type":40,"tag":66,"props":1823,"children":1824},{},[1825,1830,1832,1838,1840,1846,1848,1854,1856,1861],{"type":40,"tag":658,"props":1826,"children":1827},{},[1828],{"type":46,"value":1829},"Instance IDs",{"type":46,"value":1831}," — short hex strings (e.g. ",{"type":40,"tag":106,"props":1833,"children":1835},{"className":1834},[],[1836],{"type":46,"value":1837},"878b6723",{"type":46,"value":1839},") shown by\n",{"type":40,"tag":106,"props":1841,"children":1843},{"className":1842},[],[1844],{"type":46,"value":1845},"holodeck list",{"type":46,"value":1847},". They are NOT AWS-style ",{"type":40,"tag":106,"props":1849,"children":1851},{"className":1850},[],[1852],{"type":46,"value":1853},"i-…",{"type":46,"value":1855}," IDs. Always grab the\nID from ",{"type":40,"tag":106,"props":1857,"children":1859},{"className":1858},[],[1860],{"type":46,"value":1845},{"type":46,"value":1862}," output, not the AWS console.",{"type":40,"tag":66,"props":1864,"children":1865},{},[1866,1871,1873,1879,1881,1887],{"type":40,"tag":658,"props":1867,"children":1868},{},[1869],{"type":46,"value":1870},"Flag ordering",{"type":46,"value":1872}," — flags and the positional ID can go in either\norder on every subcommand: ",{"type":40,"tag":106,"props":1874,"children":1876},{"className":1875},[],[1877],{"type":46,"value":1878},"update \u003Cid> --add-driver",{"type":46,"value":1880}," and\n",{"type":40,"tag":106,"props":1882,"children":1884},{"className":1883},[],[1885],{"type":46,"value":1886},"update --add-driver \u003Cid>",{"type":46,"value":1888}," both parse identically.",{"type":40,"tag":66,"props":1890,"children":1891},{},[1892,1897,1899,1905,1907,1913,1915,1920,1922,1928,1930,1935,1937,1942,1944,1949,1951,1956,1958,1964,1966,1972,1974,1980,1982,1988],{"type":40,"tag":658,"props":1893,"children":1894},{},[1895],{"type":46,"value":1896},"AWS credentials",{"type":46,"value":1898}," — the SDK reads ",{"type":40,"tag":106,"props":1900,"children":1902},{"className":1901},[],[1903],{"type":46,"value":1904},"AWS_ACCESS_KEY_ID",{"type":46,"value":1906}," \u002F\n",{"type":40,"tag":106,"props":1908,"children":1910},{"className":1909},[],[1911],{"type":46,"value":1912},"AWS_SECRET_ACCESS_KEY",{"type":46,"value":1914}," from the environment (or any other\nSDK-supported source: shared credentials file, IAM role, etc.).\nThese are ",{"type":40,"tag":658,"props":1916,"children":1917},{},[1918],{"type":46,"value":1919},"separate",{"type":46,"value":1921}," from ",{"type":40,"tag":106,"props":1923,"children":1925},{"className":1924},[],[1926],{"type":46,"value":1927},"auth.keyName",{"type":46,"value":1929}," \u002F ",{"type":40,"tag":106,"props":1931,"children":1933},{"className":1932},[],[1934],{"type":46,"value":592},{"type":46,"value":1936}," in\nenv.yaml: those are ",{"type":40,"tag":658,"props":1938,"children":1939},{},[1940],{"type":46,"value":1941},"literal",{"type":46,"value":1943}," values — ",{"type":40,"tag":106,"props":1945,"children":1947},{"className":1946},[],[1948],{"type":46,"value":1927},{"type":46,"value":1950}," is the EC2\nSSH key-pair name registered in the target region, and\n",{"type":40,"tag":106,"props":1952,"children":1954},{"className":1953},[],[1955],{"type":46,"value":592},{"type":46,"value":1957}," is a filesystem path to the ",{"type":40,"tag":106,"props":1959,"children":1961},{"className":1960},[],[1962],{"type":46,"value":1963},".pem",{"type":46,"value":1965}," on disk. Some\nexample files in ",{"type":40,"tag":106,"props":1967,"children":1969},{"className":1968},[],[1970],{"type":46,"value":1971},"examples\u002F",{"type":46,"value":1973}," use placeholder strings (e.g.\n",{"type":40,"tag":106,"props":1975,"children":1977},{"className":1976},[],[1978],{"type":46,"value":1979},"HOLODECK_AWS_ACCESS_KEY_ID",{"type":46,"value":1981},"); those are intended as\nuser-replaceable templates, NOT env-var references — holodeck does\nnot call ",{"type":40,"tag":106,"props":1983,"children":1985},{"className":1984},[],[1986],{"type":46,"value":1987},"os.Getenv",{"type":46,"value":1989}," on them. Substitute actual values before\nrunning.",{"type":40,"tag":66,"props":1991,"children":1992},{},[1993,1998,2000,2006,2008,2014,2016,2022,2024,2029,2030,2036],{"type":40,"tag":658,"props":1994,"children":1995},{},[1996],{"type":46,"value":1997},"Region",{"type":46,"value":1999}," — instance ",{"type":40,"tag":106,"props":2001,"children":2003},{"className":2002},[],[2004],{"type":46,"value":2005},"region",{"type":46,"value":2007}," must match a region with available\nGPU capacity. ",{"type":40,"tag":106,"props":2009,"children":2011},{"className":2010},[],[2012],{"type":46,"value":2013},"g4dn",{"type":46,"value":2015}," and ",{"type":40,"tag":106,"props":2017,"children":2019},{"className":2018},[],[2020],{"type":46,"value":2021},"p4",{"type":46,"value":2023}," families have limited inventory in\nsome regions; ",{"type":40,"tag":106,"props":2025,"children":2027},{"className":2026},[],[2028],{"type":46,"value":1592},{"type":46,"value":2015},{"type":40,"tag":106,"props":2031,"children":2033},{"className":2032},[],[2034],{"type":46,"value":2035},"us-east-1",{"type":46,"value":2037}," are reliable.",{"type":40,"tag":66,"props":2039,"children":2040},{},[2041,2046,2048,2053,2055,2061,2063,2069,2071,2077],{"type":40,"tag":658,"props":2042,"children":2043},{},[2044],{"type":46,"value":2045},"OS",{"type":46,"value":2047}," — only IDs listed by ",{"type":40,"tag":106,"props":2049,"children":2051},{"className":2050},[],[2052],{"type":46,"value":605},{"type":46,"value":2054}," are valid for\n",{"type":40,"tag":106,"props":2056,"children":2058},{"className":2057},[],[2059],{"type":46,"value":2060},"spec.instance.os",{"type":46,"value":2062},". For an explicit AMI, set\n",{"type":40,"tag":106,"props":2064,"children":2066},{"className":2065},[],[2067],{"type":46,"value":2068},"spec.instance.image.imageId",{"type":46,"value":2070}," instead (and omit ",{"type":40,"tag":106,"props":2072,"children":2074},{"className":2073},[],[2075],{"type":46,"value":2076},"os",{"type":46,"value":2078},").",{"type":40,"tag":66,"props":2080,"children":2081},{},[2082,2087,2089,2095,2097,2103,2105,2110],{"type":40,"tag":658,"props":2083,"children":2084},{},[2085],{"type":46,"value":2086},"Cache",{"type":46,"value":2088}," — instance metadata lives in ",{"type":40,"tag":106,"props":2090,"children":2092},{"className":2091},[],[2093],{"type":46,"value":2094},"~\u002F.cache\u002Fholodeck\u002F",{"type":46,"value":2096}," by\ndefault; pass ",{"type":40,"tag":106,"props":2098,"children":2100},{"className":2099},[],[2101],{"type":46,"value":2102},"--cachepath \u003Cdir>",{"type":46,"value":2104}," to override. ",{"type":40,"tag":106,"props":2106,"children":2108},{"className":2107},[],[2109],{"type":46,"value":1756},{"type":46,"value":2111}," shows only\ncached envs.",{"type":40,"tag":66,"props":2113,"children":2114},{},[2115,2120,2122,2128],{"type":40,"tag":658,"props":2116,"children":2117},{},[2118],{"type":46,"value":2119},"VPC leak",{"type":46,"value":2121}," — failed provisions sometimes leave VPCs orphaned. Use\n",{"type":40,"tag":106,"props":2123,"children":2125},{"className":2124},[],[2126],{"type":46,"value":2127},"holodeck cleanup vpc-\u003Cid>",{"type":46,"value":2129}," to remove them.",{"type":40,"tag":55,"props":2131,"children":2133},{"id":2132},"anti-patterns",[2134],{"type":46,"value":2135},"Anti-patterns",{"type":40,"tag":62,"props":2137,"children":2138},{},[2139,2160,2187],{"type":40,"tag":66,"props":2140,"children":2141},{},[2142,2144,2150,2152,2158],{"type":46,"value":2143},"Don't run ",{"type":40,"tag":106,"props":2145,"children":2147},{"className":2146},[],[2148],{"type":46,"value":2149},"create --provision",{"type":46,"value":2151}," against an unfamiliar config without\nrunning ",{"type":40,"tag":106,"props":2153,"children":2155},{"className":2154},[],[2156],{"type":46,"value":2157},"holodeck dryrun -f env.yaml",{"type":46,"value":2159}," first — provisioning failures\ncost real money.",{"type":40,"tag":66,"props":2161,"children":2162},{},[2163,2165,2170,2172,2177,2179,2185],{"type":46,"value":2164},"Don't commit a populated env.yaml — ",{"type":40,"tag":106,"props":2166,"children":2168},{"className":2167},[],[2169],{"type":46,"value":592},{"type":46,"value":2171}," resolves to a\nfilesystem path; keep it outside the repo and chmod the ",{"type":40,"tag":106,"props":2173,"children":2175},{"className":2174},[],[2176],{"type":46,"value":1963},{"type":46,"value":2178}," to\n",{"type":40,"tag":106,"props":2180,"children":2182},{"className":2181},[],[2183],{"type":46,"value":2184},"0600",{"type":46,"value":2186},". Source AWS credentials from the environment \u002F SDK chain,\nnot from env.yaml.",{"type":40,"tag":66,"props":2188,"children":2189},{},[2190,2192,2198,2200,2206],{"type":46,"value":2191},"Don't manually ",{"type":40,"tag":106,"props":2193,"children":2195},{"className":2194},[],[2196],{"type":46,"value":2197},"terraform destroy",{"type":46,"value":2199}," against a holodeck-managed env;\nuse ",{"type":40,"tag":106,"props":2201,"children":2203},{"className":2202},[],[2204],{"type":46,"value":2205},"holodeck delete \u003Cid>",{"type":46,"value":2207},", which cleans up both infra and cache.",{"type":40,"tag":2209,"props":2210,"children":2211},"style",{},[2212],{"type":46,"value":2213},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2215,"total":113},[2216],{"slug":4,"name":4,"fn":5,"description":6,"org":2217,"tags":2218,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2219,2220,2221,2222],{"name":13,"slug":14,"type":15},{"name":18,"slug":19,"type":15},{"name":9,"slug":8,"type":15},{"name":21,"slug":22,"type":15},{"items":2224,"total":2379},[2225,2243,2261,2272,2284,2298,2311,2325,2336,2345,2359,2368],{"slug":2226,"name":2226,"fn":2227,"description":2228,"org":2229,"tags":2230,"stars":2240,"repoUrl":2241,"updatedAt":2242},"nemoclaw-user-guide","retrieve NemoClaw documentation and configuration","Guides human users' AI agents to the NemoClaw docs MCP server and canonical Fern documentation in Markdown form. Use when users ask how to install, configure, operate, troubleshoot, secure, or learn NemoClaw with an AI coding assistant. Trigger keywords - nemoclaw docs, use nemoclaw with ai agent, nemoclaw mcp docs, nemoclaw install help, nemoclaw quickstart, nemoclaw markdown docs, llms.txt, agent skills.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2231,2234,2237],{"name":2232,"slug":2233,"type":15},"Documentation","documentation",{"name":2235,"slug":2236,"type":15},"MCP","mcp",{"name":2238,"slug":2239,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":2244,"name":2244,"fn":2245,"description":2246,"org":2247,"tags":2248,"stars":2258,"repoUrl":2259,"updatedAt":2260},"mcore-build-and-dependency","manage Megatron-LM development environments","Container-based dev environment setup and dependency management for Megatron-LM. Covers acquiring and launching the CI container, uv package management, and updating uv.lock.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2249,2252,2255],{"name":2250,"slug":2251,"type":15},"Containers","containers",{"name":2253,"slug":2254,"type":15},"Deployment","deployment",{"name":2256,"slug":2257,"type":15},"Python","python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":2262,"name":2262,"fn":2263,"description":2264,"org":2265,"tags":2266,"stars":2258,"repoUrl":2259,"updatedAt":2271},"mcore-bump-base-image","update NVIDIA PyTorch base images","Bump the NVIDIA PyTorch base image (`nvcr.io\u002Fnvidia\u002Fpytorch:YY.MM-py3`) used by Megatron-LM CI. Covers the two pin sites (GitHub CI in `docker\u002F.ngc_version.dev` and GitLab CI in `.gitlab\u002Fstages\u002F01.build.yml`), the post-bump CI loop (re-run functional tests, refresh golden values, mark broken tests), and the gotchas that bit PRs",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2267,2270],{"name":2268,"slug":2269,"type":15},"CI\u002FCD","ci-cd",{"name":2253,"slug":2254,"type":15},"2026-07-14T05:25:59.97109",{"slug":2273,"name":2273,"fn":2274,"description":2275,"org":2276,"tags":2277,"stars":2258,"repoUrl":2259,"updatedAt":2283},"mcore-cicd","manage CI\u002FCD pipelines for Megatron-LM","CI\u002FCD reference for Megatron-LM. Covers CI pipeline structure, PR scope labels, triggering internal GitLab CI (which force-pushes the current branch to a pull-request\u002FBRANCH ref — always dry-run and verify the destination first; never run against shared or protected branches), and CI failure investigation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2278,2279,2280],{"name":2268,"slug":2269,"type":15},{"name":2253,"slug":2254,"type":15},{"name":2281,"slug":2282,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":2285,"name":2285,"fn":2286,"description":2287,"org":2288,"tags":2289,"stars":2258,"repoUrl":2259,"updatedAt":2297},"mcore-create-issue","investigate CI failures and create issues","Investigate a failing GitHub Actions run or job and create a GitHub issue for the failure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2290,2293,2294],{"name":2291,"slug":2292,"type":15},"Debugging","debugging",{"name":2281,"slug":2282,"type":15},{"name":2295,"slug":2296,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":2299,"name":2299,"fn":2300,"description":2301,"org":2302,"tags":2303,"stars":2258,"repoUrl":2259,"updatedAt":2310},"mcore-linting-and-formatting","lint and format Megatron-LM code","Linting and formatting for Megatron-LM. Covers running autoformat.sh, tools (ruff, black, isort, pylint, mypy), and code style rules.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2304,2307],{"name":2305,"slug":2306,"type":15},"Best Practices","best-practices",{"name":2308,"slug":2309,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":2312,"name":2312,"fn":2313,"description":2314,"org":2315,"tags":2316,"stars":2258,"repoUrl":2259,"updatedAt":2324},"mcore-migrate-gpt-to-hybrid","migrate Megatron-LM models to HybridModel","Migration guide for moving Megatron Core GPTModel checkpoints, model providers, training commands, and layer mappings to HybridModel.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2317,2320,2323],{"name":2318,"slug":2319,"type":15},"Machine Learning","machine-learning",{"name":2321,"slug":2322,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":2326,"name":2326,"fn":2327,"description":2328,"org":2329,"tags":2330,"stars":2258,"repoUrl":2259,"updatedAt":2335},"mcore-onboard-gb200-1node-tests","onboard functional tests for GB200","Onboard 1-node GitHub MR functional tests for GB200 from existing mr-scoped 2-node tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2331,2334],{"name":2332,"slug":2333,"type":15},"QA","qa",{"name":21,"slug":22,"type":15},"2026-07-14T05:25:53.673039",{"slug":2337,"name":2337,"fn":2338,"description":2339,"org":2340,"tags":2341,"stars":2258,"repoUrl":2259,"updatedAt":2344},"mcore-run-on-slurm","launch distributed training jobs on SLURM","How to launch distributed Megatron-LM training jobs on a SLURM cluster. Covers a minimal sbatch skeleton, environment-variable setup for torch.distributed.run, CUDA_DEVICE_MAX_CONNECTIONS rules across hardware and parallelism modes, container conventions, monitoring, and per-rank failure diagnosis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2342,2343],{"name":2253,"slug":2254,"type":15},{"name":18,"slug":19,"type":15},"2026-07-14T05:25:49.362534",{"slug":2346,"name":2346,"fn":2347,"description":2348,"org":2349,"tags":2350,"stars":2258,"repoUrl":2259,"updatedAt":2358},"mcore-split-pr","split pull requests to reduce review load","Split a PR into multiple PRs to reduce the number of required CODEOWNERS reviewer groups.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2351,2354,2355],{"name":2352,"slug":2353,"type":15},"Code Review","code-review",{"name":2281,"slug":2282,"type":15},{"name":2356,"slug":2357,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":2360,"name":2360,"fn":2361,"description":2362,"org":2363,"tags":2364,"stars":2258,"repoUrl":2259,"updatedAt":2367},"mcore-testing","run and manage Megatron-LM tests","Test system for Megatron-LM. Covers test layout, recipe YAML structure, adding and running unit and functional tests, golden values, marker filters, and CI parity.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2365,2366],{"name":2332,"slug":2333,"type":15},{"name":21,"slug":22,"type":15},"2026-07-14T05:25:54.928983",{"slug":2369,"name":2369,"fn":2370,"description":2371,"org":2372,"tags":2373,"stars":2258,"repoUrl":2259,"updatedAt":2378},"nightly-sync","manage nightly main-to-dev sync workflows","Domain knowledge for the nightly main-to-dev sync workflow. Covers merge strategy, CI architecture, failure investigation, and known issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2374,2377],{"name":2375,"slug":2376,"type":15},"Automation","automation",{"name":2268,"slug":2269,"type":15},"2026-07-30T05:29:03.275638",496]