[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-nvidia-k8s-launch-kit-discover":3,"mdc--klpgsm-key":37,"related-repo-nvidia-k8s-launch-kit-discover":2514,"related-org-nvidia-k8s-launch-kit-discover":2601},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"k8s-launch-kit-discover","discover Kubernetes cluster network hardware capabilities","Use this skill when the user wants to discover their Kubernetes cluster's network hardware capabilities using k8s-launch-kit (l8k). Activate for: cluster discovery, hardware detection, NIC detection, finding what GPUs or NICs are in a cluster, creating a cluster config file, or when the user says 'discover' in the context of l8k or NVIDIA networking.",{"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,19,22,23],{"name":13,"slug":14,"type":15},"Operations","operations","tag",{"name":17,"slug":18,"type":15},"Networking","networking",{"name":20,"slug":21,"type":15},"Hardware","hardware",{"name":9,"slug":8,"type":15},{"name":24,"slug":25,"type":15},"Kubernetes","kubernetes",14,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fk8s-launch-kit","2026-07-14T05:31:58.825512",null,4,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"K8s Launch Kit (l8k) is a CLI tool for deploying and managing NVIDIA cloud-native solutions on Kubernetes. The tool helps provide flexible deployment workflows for optimal network performance with SR-IOV, RDMA, and other networking technologies.","https:\u002F\u002Fgithub.com\u002FNVIDIA\u002Fk8s-launch-kit\u002Ftree\u002FHEAD\u002Fskills\u002Fk8s-launch-kit-discover","---\nname: k8s-launch-kit-discover\nversion: 1.2.0\ndescription: \"Use this skill when the user wants to discover their Kubernetes cluster's network hardware capabilities using k8s-launch-kit (l8k). Activate for: cluster discovery, hardware detection, NIC detection, finding what GPUs or NICs are in a cluster, creating a cluster config file, or when the user says 'discover' in the context of l8k or NVIDIA networking.\"\nmetadata:\n  requires:\n    skills: [\"k8s-launch-kit-shared\"]\n---\n\n# l8k: Cluster Discovery\n\n> **PREREQUISITE:** Read `..\u002Fk8s-launch-kit-shared\u002FSKILL.md` for install paths, global flags, and output modes.\n\nDiscover cluster hardware and produce a `cluster-config.yaml` describing NICs, GPUs, rails, and node groups.\n\nThree things to know about the saved file:\n- **The resolved profile is persisted.** Discovery fills missing profile fields\n  from hardware\u002Fdefaults, preserves values from `--user-config`, applies\n  explicit CLI overrides last, and writes the final `profile:` block.\n- **North-south-only groups are dropped.** A node group whose NICs are all north-south (BlueField DPUs \u002F OOB NICs) produces no manifests and is omitted from `cluster-config.yaml` (it would otherwise consume an NV-IPAM subnet slice and shift the per-rail pools). North-south NICs alongside east-west NICs in a mixed group are still listed.\n- **Documentation comments are preserved.** The field-reference comments from the source config (`l8k-config.yaml` or `--user-config`) are carried over into the saved `cluster-config.yaml`, with a `Generated by l8k discover` banner at the top.\n\n**l8k discover is self-contained.** It does NOT require a pre-installed\nNetwork Operator. On every run it bootstraps the NIC Configuration Daemon\n(and the 5 nic-configuration-operator CRDs, only if missing) into a private\nnamespace `nvidia-k8s-launch-kit`, reads `NicDevice` CRs published by the\ndaemon, then tears the namespace down on exit (unless `--keep-namespace`\nis set). The daemon image is pulled from `\u003CnetworkOperator.repository>\u002F\nnic-configuration-operator-daemon:\u003CnetworkOperator.componentVersion>` (both\nfields come from `l8k-config.yaml`).\n\n## Usage (from AI agent)\n\n```bash\nl8k discover \\\n  --kubeconfig ~\u002F.kube\u002Fconfig \\\n  --save-cluster-config .\u002Fcluster-config.yaml \\\n  --output json 2>\u002Fdev\u002Fnull | jq .\n```\n\n## Usage (human-interactive)\n\n```bash\nl8k discover --save-cluster-config \u003COUTPUT> [--kubeconfig \u003CPATH>]\n```\n\n## Flags\n\n| Flag | Required | Default | Description |\n|------|----------|---------|-------------|\n| `--kubeconfig` | — | `$KUBECONFIG` env var | Path to kubeconfig (optional — falls back to env var) |\n| `--save-cluster-config` | Yes | — | Output path for cluster-config.yaml |\n| `--keep-namespace` | — | `false` | Skip teardown of the `nvidia-k8s-launch-kit` bootstrap namespace (for debugging) |\n| `--collapse-nic-rails` | — | `true` | Advertise one rail per NIC: collapse a NIC's multi-plane east-west PFs to its master PF, keeping a rail per port only for NICs whose VPD model is genuinely dual-port (\"2-port\"\u002F\"Dual-port\"). Set `=false` to keep one rail per PF (dev setups). See \"Rail collapsing\" below. |\n| `--network-operator-namespace` | — | — | **Deprecated for `discover`**: accepted but ignored. The daemon always runs in `nvidia-k8s-launch-kit`. Still used by `l8k generate` \u002F `l8k deploy`. |\n| `--user-config` | — | — | Base config to merge with discovered hardware |\n| `--node-selector` | — | `feature.node.kubernetes.io\u002Fpci-15b3.present=true` | Value written into the **saved** `cluster-config.yaml` `nodeSelector` (for deploy time). It does **not** gate discovery scheduling or the NicDevice wait set — the daemon is restricted to Ready schedulable nodes and NIC-bearing nodes are detected via a sysfs `0x15b3` probe. |\n| `--image-pull-secrets` | — | — | Image pull secret names (comma-separated). Forwarded onto the bootstrapped DaemonSet pod spec. |\n| `--fabric` | — | discovered unanimous link type | Fabric override: `ethernet` or `infiniband`. |\n| `--deployment-type` | — | `sriov` | Deployment override: `sriov`, `rdma_shared`, or `host_device`. |\n| `--multirail` | — | `true` | Multirail override. Use `--multirail=false` to opt out; explicit false is persisted. |\n| `--spectrum-x` | — | disabled | Enable Spectrum-X with an RA version (`RA2.1` or `RA2.2`). |\n| `--multiplane-mode` | — | derived with Spectrum-X | Spectrum-X mode override: `none`, `swplb`, `hwplb`, or `uniplane`. |\n| `--number-of-planes` | — | derived with Spectrum-X | Spectrum-X plane-count override: `1`, `2`, or `4`. |\n\n## Examples\n\n```bash\n# Basic discovery\nl8k discover \\\n  --kubeconfig ~\u002F.kube\u002Fconfig \\\n  --save-cluster-config .\u002Fcluster-config.yaml\n\n# Using $KUBECONFIG env var (no --kubeconfig needed)\nl8k discover --save-cluster-config .\u002Fcluster-config.yaml\n\n# Keep the bootstrap namespace for debugging\nl8k discover \\\n  --kubeconfig ~\u002F.kube\u002Fconfig \\\n  --keep-namespace \\\n  --save-cluster-config .\u002Fcluster-config.yaml\n\n# Merge with existing config\nl8k discover --user-config my-config.yaml \\\n  --kubeconfig ~\u002F.kube\u002Fconfig \\\n  --save-cluster-config .\u002Fcluster-config.yaml\n\n# Persist explicit profile overrides\nl8k discover \\\n  --kubeconfig ~\u002F.kube\u002Fconfig \\\n  --fabric infiniband --deployment-type rdma_shared \\\n  --multirail=false \\\n  --save-cluster-config .\u002Fcluster-config.yaml\n\n# Agent mode (JSON output)\nl8k discover \\\n  --kubeconfig ~\u002F.kube\u002Fconfig \\\n  --save-cluster-config .\u002Fcluster-config.yaml \\\n  --output json 2>\u002Fdev\u002Fnull\n```\n\n## Output Format\n\nThe generated `cluster-config.yaml` contains the final profile plus a\n`clusterConfig[]` hardware-group array:\n\n```yaml\nprofile:\n  fabric: ethernet\n  deployment: sriov\n  multirail: true\nclusterConfig:\n  - identifier: \"dgx-b200-nvidia-h100-nvl\"\n    machineType: DGX-B200\n    gpuType: NVIDIA-H100-NVL\n    capabilities:\n      nodes:\n        sriov: true\n        rdma: true\n    pfs:\n      - deviceID: \"101e\"\n        networkInterface: \"eth0\"\n        rail: 0\n    workerNodes: [node-01, node-02]\n    nodeSelector:\n      nvidia.kubernetes-launch-kit.machine: \"DGX-B200-NVIDIA-H100-NVL\"\n    thirdPartyRDMAModules: [nv_peer_mem]\n```\n\nDiscovery patches every node in the group with two labels:\n\n- `nvidia.kubernetes-launch-kit.machine: \u003CmachineType>-\u003CgpuType>` — per-source-group\n  identity, used as the source group's `nodeSelector`.\n- `nvidia.kubernetes-launch-kit.gpu: \u003CgpuType>` — used as the merged-group\n  `nodeSelector` when `l8k generate` auto-merges source groups sharing a GPU type.\n\nLabel values keep their original case (matching `nvidia.com\u002Fgpu.product` style) since\nupstream discovery already trims whitespace and replaces spaces with hyphens. Values\nthat would exceed the Kubernetes 63-char label-value limit are skipped (logged at\ndebug). The group's `identifier` is the lowercase resource-name form of the machine\nlabel (RFC 1123 — required for downstream NicNodePolicy \u002F SriovNetworkNodePolicy\nnaming). When `machineType` or `gpuType` couldn't be resolved (GPU operator labels\nabsent and hardware probe failed), a fallback `group-N` identifier is used and the\nmachine label is not written; the GPU label is still written when `gpuType` alone is\nresolved.\n\n## Prerequisites\n\n- Node Feature Discovery (NFD) is **not** required. Before bootstrapping the\n  daemon, discovery lists Nodes and renders node-name affinity for nodes that\n  are `Ready=True` and not `spec.unschedulable`. The DaemonSet still has no\n  NFD `nodeSelector` and tolerates taints, so eligible control-plane\u002Ftainted\n  nodes are included. NIC-bearing nodes are detected by a sysfs probe for PCI\n  vendor `0x15b3` rather than the NFD\n  `feature.node.kubernetes.io\u002Fpci-15b3.present` label.\n- Image-pull access from every worker node to\n  `\u003CnetworkOperator.repository>\u002Fnic-configuration-operator-daemon:\u003CnetworkOperator.componentVersion>`.\n  Use `--image-pull-secrets \u003Cname>` (or `networkOperator.imagePullSecrets`\n  in the config file) for private registries.\n- Network Operator does **NOT** need to be pre-installed.\n\n## Tips\n\n- Profile precedence is `hardware\u002Fdefault \u003C existing YAML \u003C explicit CLI`.\n  On a rerun with `--user-config`, only missing fields are recalculated.\n- A fresh discovery ignores the example profile in the installed reference\n  config. Supplying that file explicitly through `--user-config` makes its\n  profile values user input and therefore preserves them.\n- If fabric probes are mixed or unconfirmed, discovery still writes the file\n  with an empty `profile.fabric`; set `--fabric` on discovery or generation.\n\n- The bootstrap namespace is **always** `nvidia-k8s-launch-kit` — not configurable. The\n  daemon's SA \u002F ClusterRole \u002F ClusterRoleBinding are renamed to\n  `k8s-launch-kit-nic-config-daemon` so they don't collide with the cluster-scoped\n  names a coexisting Network Operator install would create.\n- CRDs (`nicdevices`, `nicconfigurationtemplates`, etc.) are applied **only when missing**.\n  If they already exist (because Network Operator or a prior l8k discover run created\n  them), they're left alone — discovery never overwrites a different version.\n- After discovery finishes the namespace is torn down (cascade-delete handles SA \u002F\n  RoleBinding \u002F DaemonSet \u002F pods \u002F NicDevice CRs); the CRDs intentionally persist so\n  any external NicDevice consumers survive. Cluster-scoped ClusterRole \u002F\n  ClusterRoleBinding are deleted explicitly.\n- Pass `--keep-namespace` to leave the namespace in place — useful when debugging\n  daemon pod start-up failures (`kubectl describe pod -n nvidia-k8s-launch-kit`).\n- Before bootstrapping, discovery pre-cleans the `nvidia-k8s-launch-kit` namespace\n  (deletes any leftover DaemonSet\u002Fpods\u002FNicDevice CRs from a crashed prior run and\n  waits up to 2 min for it to clear) so a fresh daemon is never layered on stale state.\n- Discovery waits up to 5 minutes for daemon pods to be Ready, but tolerates\n  stuck pods: if some pods are wedged (e.g. ImagePullBackOff\u002FCrashLoopBackOff on\n  an unrelated node) it proceeds with the Ready ones rather than blocking the\n  whole window, and only aborts if **no** pod ever becomes Ready. Common causes\n  of a total failure: image tag missing in your registry, pull-secret missing.\n- If discovery reports \"no nodes with an NVIDIA NIC (PCI vendor 15b3) were found\",\n  the daemon ran but no node's sysfs exposed a `0x15b3` device (no Mellanox\u002FNVIDIA\n  NICs, or `\u002Fsys` not mounted\u002Freadable in the pod).\n- After determining each group's `(machineType, gpuType)`, discovery looks up a topology preset under `presets\u002F` using **exact-match** lookup on that pair. A matching preset overrides heuristic-derived topology fields (traffic class, rail, NUMA, GPU affinity). There is no any-GPU fallback — a preset with empty `gpuType:` is rejected at load time. If no preset matches, discovery proceeds with heuristic classification.\n- If you already know the SKU and want to skip cluster discovery entirely, use `l8k generate --for \u003Cpreset>` (see `k8s-launch-kit-generate`).\n\n## Rail collapsing (one rail per NIC)\n\nBy default (`--collapse-nic-rails`, default `true`) discovery advertises **one\nrail per NIC**, not one per PF. A single NIC can expose several east-west PFs\nthat are *planes* of one physical port (Spectrum-X multi-plane ConnectX-8\u002F9). For\nthose, only the **master PF** (lowest PCI function) is written to\n`cluster-config.yaml`, so the rail count reflects physical NICs — e.g. an 8-PF\nConnectX-8 node yields 4 rails, not 8. The per-PF planes are reconstructed at\ngenerate time from the multiplane mode + `numberOfPlanes`.\n\nThe exception is a **genuinely dual-port NIC**: when the NIC's VPD model name\n(read from `NicDevice.Status.modelName`, surfaced as the `model` field on each\nPF) contains a port-count keyword like `2-port`\u002F`Dual-port`, each port is kept as\nits own rail. Single-port (`1P`) and multi-plane models (no port-count keyword)\ncollapse. An empty\u002Funreadable model collapses by default.\n\nPass `--collapse-nic-rails=false` to restore the legacy one-rail-per-PF behaviour\n(handy on dev setups). Note: a collapsed group no longer has the same PF count as\na full-PF topology preset, so such presets won't apply by exact match and the\nlive (collapsed) classification is kept (a preset-deviation warning is emitted).\n\n## See Also\n\n- [k8s-launch-kit-shared](..\u002Fk8s-launch-kit-shared\u002FSKILL.md) — Global flags and output modes\n- [k8s-launch-kit-config](..\u002Fk8s-launch-kit-config\u002FSKILL.md) — Understand the config file discovery produces\n- [k8s-launch-kit-generate](..\u002Fk8s-launch-kit-generate\u002FSKILL.md) — Generate manifests from cluster config\n",{"data":38,"body":44},{"name":4,"version":39,"description":6,"metadata":40},"1.2.0",{"requires":41},{"skills":42},[43],"k8s-launch-kit-shared",{"type":45,"children":46},"root",[47,56,81,94,99,187,236,243,353,359,431,437,1051,1057,1486,1492,1512,1905,1910,1955,2006,2012,2105,2111,2343,2349,2404,2456,2468,2474,2508],{"type":48,"tag":49,"props":50,"children":52},"element","h1",{"id":51},"l8k-cluster-discovery",[53],{"type":54,"value":55},"text","l8k: Cluster Discovery",{"type":48,"tag":57,"props":58,"children":59},"blockquote",{},[60],{"type":48,"tag":61,"props":62,"children":63},"p",{},[64,70,72,79],{"type":48,"tag":65,"props":66,"children":67},"strong",{},[68],{"type":54,"value":69},"PREREQUISITE:",{"type":54,"value":71}," Read ",{"type":48,"tag":73,"props":74,"children":76},"code",{"className":75},[],[77],{"type":54,"value":78},"..\u002Fk8s-launch-kit-shared\u002FSKILL.md",{"type":54,"value":80}," for install paths, global flags, and output modes.",{"type":48,"tag":61,"props":82,"children":83},{},[84,86,92],{"type":54,"value":85},"Discover cluster hardware and produce a ",{"type":48,"tag":73,"props":87,"children":89},{"className":88},[],[90],{"type":54,"value":91},"cluster-config.yaml",{"type":54,"value":93}," describing NICs, GPUs, rails, and node groups.",{"type":48,"tag":61,"props":95,"children":96},{},[97],{"type":54,"value":98},"Three things to know about the saved file:",{"type":48,"tag":100,"props":101,"children":102},"ul",{},[103,130,147],{"type":48,"tag":104,"props":105,"children":106},"li",{},[107,112,114,120,122,128],{"type":48,"tag":65,"props":108,"children":109},{},[110],{"type":54,"value":111},"The resolved profile is persisted.",{"type":54,"value":113}," Discovery fills missing profile fields\nfrom hardware\u002Fdefaults, preserves values from ",{"type":48,"tag":73,"props":115,"children":117},{"className":116},[],[118],{"type":54,"value":119},"--user-config",{"type":54,"value":121},", applies\nexplicit CLI overrides last, and writes the final ",{"type":48,"tag":73,"props":123,"children":125},{"className":124},[],[126],{"type":54,"value":127},"profile:",{"type":54,"value":129}," block.",{"type":48,"tag":104,"props":131,"children":132},{},[133,138,140,145],{"type":48,"tag":65,"props":134,"children":135},{},[136],{"type":54,"value":137},"North-south-only groups are dropped.",{"type":54,"value":139}," A node group whose NICs are all north-south (BlueField DPUs \u002F OOB NICs) produces no manifests and is omitted from ",{"type":48,"tag":73,"props":141,"children":143},{"className":142},[],[144],{"type":54,"value":91},{"type":54,"value":146}," (it would otherwise consume an NV-IPAM subnet slice and shift the per-rail pools). North-south NICs alongside east-west NICs in a mixed group are still listed.",{"type":48,"tag":104,"props":148,"children":149},{},[150,155,157,163,165,170,172,177,179,185],{"type":48,"tag":65,"props":151,"children":152},{},[153],{"type":54,"value":154},"Documentation comments are preserved.",{"type":54,"value":156}," The field-reference comments from the source config (",{"type":48,"tag":73,"props":158,"children":160},{"className":159},[],[161],{"type":54,"value":162},"l8k-config.yaml",{"type":54,"value":164}," or ",{"type":48,"tag":73,"props":166,"children":168},{"className":167},[],[169],{"type":54,"value":119},{"type":54,"value":171},") are carried over into the saved ",{"type":48,"tag":73,"props":173,"children":175},{"className":174},[],[176],{"type":54,"value":91},{"type":54,"value":178},", with a ",{"type":48,"tag":73,"props":180,"children":182},{"className":181},[],[183],{"type":54,"value":184},"Generated by l8k discover",{"type":54,"value":186}," banner at the top.",{"type":48,"tag":61,"props":188,"children":189},{},[190,195,197,203,205,211,213,219,221,227,229,234],{"type":48,"tag":65,"props":191,"children":192},{},[193],{"type":54,"value":194},"l8k discover is self-contained.",{"type":54,"value":196}," It does NOT require a pre-installed\nNetwork Operator. On every run it bootstraps the NIC Configuration Daemon\n(and the 5 nic-configuration-operator CRDs, only if missing) into a private\nnamespace ",{"type":48,"tag":73,"props":198,"children":200},{"className":199},[],[201],{"type":54,"value":202},"nvidia-k8s-launch-kit",{"type":54,"value":204},", reads ",{"type":48,"tag":73,"props":206,"children":208},{"className":207},[],[209],{"type":54,"value":210},"NicDevice",{"type":54,"value":212}," CRs published by the\ndaemon, then tears the namespace down on exit (unless ",{"type":48,"tag":73,"props":214,"children":216},{"className":215},[],[217],{"type":54,"value":218},"--keep-namespace",{"type":54,"value":220},"\nis set). The daemon image is pulled from ",{"type":48,"tag":73,"props":222,"children":224},{"className":223},[],[225],{"type":54,"value":226},"\u003CnetworkOperator.repository>\u002F nic-configuration-operator-daemon:\u003CnetworkOperator.componentVersion>",{"type":54,"value":228}," (both\nfields come from ",{"type":48,"tag":73,"props":230,"children":232},{"className":231},[],[233],{"type":54,"value":162},{"type":54,"value":235},").",{"type":48,"tag":237,"props":238,"children":240},"h2",{"id":239},"usage-from-ai-agent",[241],{"type":54,"value":242},"Usage (from AI agent)",{"type":48,"tag":244,"props":245,"children":250},"pre",{"className":246,"code":247,"language":248,"meta":249,"style":249},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","l8k discover \\\n  --kubeconfig ~\u002F.kube\u002Fconfig \\\n  --save-cluster-config .\u002Fcluster-config.yaml \\\n  --output json 2>\u002Fdev\u002Fnull | jq .\n","bash","",[251],{"type":48,"tag":73,"props":252,"children":253},{"__ignoreMap":249},[254,278,296,314],{"type":48,"tag":255,"props":256,"children":259},"span",{"class":257,"line":258},"line",1,[260,266,272],{"type":48,"tag":255,"props":261,"children":263},{"style":262},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[264],{"type":54,"value":265},"l8k",{"type":48,"tag":255,"props":267,"children":269},{"style":268},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[270],{"type":54,"value":271}," discover",{"type":48,"tag":255,"props":273,"children":275},{"style":274},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[276],{"type":54,"value":277}," \\\n",{"type":48,"tag":255,"props":279,"children":281},{"class":257,"line":280},2,[282,287,292],{"type":48,"tag":255,"props":283,"children":284},{"style":268},[285],{"type":54,"value":286},"  --kubeconfig",{"type":48,"tag":255,"props":288,"children":289},{"style":268},[290],{"type":54,"value":291}," ~\u002F.kube\u002Fconfig",{"type":48,"tag":255,"props":293,"children":294},{"style":274},[295],{"type":54,"value":277},{"type":48,"tag":255,"props":297,"children":299},{"class":257,"line":298},3,[300,305,310],{"type":48,"tag":255,"props":301,"children":302},{"style":268},[303],{"type":54,"value":304},"  --save-cluster-config",{"type":48,"tag":255,"props":306,"children":307},{"style":268},[308],{"type":54,"value":309}," .\u002Fcluster-config.yaml",{"type":48,"tag":255,"props":311,"children":312},{"style":274},[313],{"type":54,"value":277},{"type":48,"tag":255,"props":315,"children":316},{"class":257,"line":30},[317,322,327,333,338,343,348],{"type":48,"tag":255,"props":318,"children":319},{"style":268},[320],{"type":54,"value":321},"  --output",{"type":48,"tag":255,"props":323,"children":324},{"style":268},[325],{"type":54,"value":326}," json",{"type":48,"tag":255,"props":328,"children":330},{"style":329},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[331],{"type":54,"value":332}," 2>",{"type":48,"tag":255,"props":334,"children":335},{"style":268},[336],{"type":54,"value":337},"\u002Fdev\u002Fnull",{"type":48,"tag":255,"props":339,"children":340},{"style":329},[341],{"type":54,"value":342}," |",{"type":48,"tag":255,"props":344,"children":345},{"style":262},[346],{"type":54,"value":347}," jq",{"type":48,"tag":255,"props":349,"children":350},{"style":268},[351],{"type":54,"value":352}," .\n",{"type":48,"tag":237,"props":354,"children":356},{"id":355},"usage-human-interactive",[357],{"type":54,"value":358},"Usage (human-interactive)",{"type":48,"tag":244,"props":360,"children":362},{"className":246,"code":361,"language":248,"meta":249,"style":249},"l8k discover --save-cluster-config \u003COUTPUT> [--kubeconfig \u003CPATH>]\n",[363],{"type":48,"tag":73,"props":364,"children":365},{"__ignoreMap":249},[366],{"type":48,"tag":255,"props":367,"children":368},{"class":257,"line":258},[369,373,377,382,387,392,397,402,407,412,417,422,426],{"type":48,"tag":255,"props":370,"children":371},{"style":262},[372],{"type":54,"value":265},{"type":48,"tag":255,"props":374,"children":375},{"style":268},[376],{"type":54,"value":271},{"type":48,"tag":255,"props":378,"children":379},{"style":268},[380],{"type":54,"value":381}," --save-cluster-config",{"type":48,"tag":255,"props":383,"children":384},{"style":329},[385],{"type":54,"value":386}," \u003C",{"type":48,"tag":255,"props":388,"children":389},{"style":268},[390],{"type":54,"value":391},"OUTPU",{"type":48,"tag":255,"props":393,"children":394},{"style":274},[395],{"type":54,"value":396},"T",{"type":48,"tag":255,"props":398,"children":399},{"style":329},[400],{"type":54,"value":401},">",{"type":48,"tag":255,"props":403,"children":404},{"style":274},[405],{"type":54,"value":406}," [--kubeconfig ",{"type":48,"tag":255,"props":408,"children":409},{"style":329},[410],{"type":54,"value":411},"\u003C",{"type":48,"tag":255,"props":413,"children":414},{"style":268},[415],{"type":54,"value":416},"PAT",{"type":48,"tag":255,"props":418,"children":419},{"style":274},[420],{"type":54,"value":421},"H",{"type":48,"tag":255,"props":423,"children":424},{"style":329},[425],{"type":54,"value":401},{"type":48,"tag":255,"props":427,"children":428},{"style":268},[429],{"type":54,"value":430},"]\n",{"type":48,"tag":237,"props":432,"children":434},{"id":433},"flags",[435],{"type":54,"value":436},"Flags",{"type":48,"tag":438,"props":439,"children":440},"table",{},[441,470],{"type":48,"tag":442,"props":443,"children":444},"thead",{},[445],{"type":48,"tag":446,"props":447,"children":448},"tr",{},[449,455,460,465],{"type":48,"tag":450,"props":451,"children":452},"th",{},[453],{"type":54,"value":454},"Flag",{"type":48,"tag":450,"props":456,"children":457},{},[458],{"type":54,"value":459},"Required",{"type":48,"tag":450,"props":461,"children":462},{},[463],{"type":54,"value":464},"Default",{"type":48,"tag":450,"props":466,"children":467},{},[468],{"type":54,"value":469},"Description",{"type":48,"tag":471,"props":472,"children":473},"tbody",{},[474,508,534,570,608,667,691,757,782,822,874,911,951,1005],{"type":48,"tag":446,"props":475,"children":476},{},[477,487,492,503],{"type":48,"tag":478,"props":479,"children":480},"td",{},[481],{"type":48,"tag":73,"props":482,"children":484},{"className":483},[],[485],{"type":54,"value":486},"--kubeconfig",{"type":48,"tag":478,"props":488,"children":489},{},[490],{"type":54,"value":491},"—",{"type":48,"tag":478,"props":493,"children":494},{},[495,501],{"type":48,"tag":73,"props":496,"children":498},{"className":497},[],[499],{"type":54,"value":500},"$KUBECONFIG",{"type":54,"value":502}," env var",{"type":48,"tag":478,"props":504,"children":505},{},[506],{"type":54,"value":507},"Path to kubeconfig (optional — falls back to env var)",{"type":48,"tag":446,"props":509,"children":510},{},[511,520,525,529],{"type":48,"tag":478,"props":512,"children":513},{},[514],{"type":48,"tag":73,"props":515,"children":517},{"className":516},[],[518],{"type":54,"value":519},"--save-cluster-config",{"type":48,"tag":478,"props":521,"children":522},{},[523],{"type":54,"value":524},"Yes",{"type":48,"tag":478,"props":526,"children":527},{},[528],{"type":54,"value":491},{"type":48,"tag":478,"props":530,"children":531},{},[532],{"type":54,"value":533},"Output path for cluster-config.yaml",{"type":48,"tag":446,"props":535,"children":536},{},[537,545,549,558],{"type":48,"tag":478,"props":538,"children":539},{},[540],{"type":48,"tag":73,"props":541,"children":543},{"className":542},[],[544],{"type":54,"value":218},{"type":48,"tag":478,"props":546,"children":547},{},[548],{"type":54,"value":491},{"type":48,"tag":478,"props":550,"children":551},{},[552],{"type":48,"tag":73,"props":553,"children":555},{"className":554},[],[556],{"type":54,"value":557},"false",{"type":48,"tag":478,"props":559,"children":560},{},[561,563,568],{"type":54,"value":562},"Skip teardown of the ",{"type":48,"tag":73,"props":564,"children":566},{"className":565},[],[567],{"type":54,"value":202},{"type":54,"value":569}," bootstrap namespace (for debugging)",{"type":48,"tag":446,"props":571,"children":572},{},[573,582,586,595],{"type":48,"tag":478,"props":574,"children":575},{},[576],{"type":48,"tag":73,"props":577,"children":579},{"className":578},[],[580],{"type":54,"value":581},"--collapse-nic-rails",{"type":48,"tag":478,"props":583,"children":584},{},[585],{"type":54,"value":491},{"type":48,"tag":478,"props":587,"children":588},{},[589],{"type":48,"tag":73,"props":590,"children":592},{"className":591},[],[593],{"type":54,"value":594},"true",{"type":48,"tag":478,"props":596,"children":597},{},[598,600,606],{"type":54,"value":599},"Advertise one rail per NIC: collapse a NIC's multi-plane east-west PFs to its master PF, keeping a rail per port only for NICs whose VPD model is genuinely dual-port (\"2-port\"\u002F\"Dual-port\"). Set ",{"type":48,"tag":73,"props":601,"children":603},{"className":602},[],[604],{"type":54,"value":605},"=false",{"type":54,"value":607}," to keep one rail per PF (dev setups). See \"Rail collapsing\" below.",{"type":48,"tag":446,"props":609,"children":610},{},[611,620,624,628],{"type":48,"tag":478,"props":612,"children":613},{},[614],{"type":48,"tag":73,"props":615,"children":617},{"className":616},[],[618],{"type":54,"value":619},"--network-operator-namespace",{"type":48,"tag":478,"props":621,"children":622},{},[623],{"type":54,"value":491},{"type":48,"tag":478,"props":625,"children":626},{},[627],{"type":54,"value":491},{"type":48,"tag":478,"props":629,"children":630},{},[631,642,644,649,651,657,659,665],{"type":48,"tag":65,"props":632,"children":633},{},[634,636],{"type":54,"value":635},"Deprecated for ",{"type":48,"tag":73,"props":637,"children":639},{"className":638},[],[640],{"type":54,"value":641},"discover",{"type":54,"value":643},": accepted but ignored. The daemon always runs in ",{"type":48,"tag":73,"props":645,"children":647},{"className":646},[],[648],{"type":54,"value":202},{"type":54,"value":650},". Still used by ",{"type":48,"tag":73,"props":652,"children":654},{"className":653},[],[655],{"type":54,"value":656},"l8k generate",{"type":54,"value":658}," \u002F ",{"type":48,"tag":73,"props":660,"children":662},{"className":661},[],[663],{"type":54,"value":664},"l8k deploy",{"type":54,"value":666},".",{"type":48,"tag":446,"props":668,"children":669},{},[670,678,682,686],{"type":48,"tag":478,"props":671,"children":672},{},[673],{"type":48,"tag":73,"props":674,"children":676},{"className":675},[],[677],{"type":54,"value":119},{"type":48,"tag":478,"props":679,"children":680},{},[681],{"type":54,"value":491},{"type":48,"tag":478,"props":683,"children":684},{},[685],{"type":54,"value":491},{"type":48,"tag":478,"props":687,"children":688},{},[689],{"type":54,"value":690},"Base config to merge with discovered hardware",{"type":48,"tag":446,"props":692,"children":693},{},[694,703,707,716],{"type":48,"tag":478,"props":695,"children":696},{},[697],{"type":48,"tag":73,"props":698,"children":700},{"className":699},[],[701],{"type":54,"value":702},"--node-selector",{"type":48,"tag":478,"props":704,"children":705},{},[706],{"type":54,"value":491},{"type":48,"tag":478,"props":708,"children":709},{},[710],{"type":48,"tag":73,"props":711,"children":713},{"className":712},[],[714],{"type":54,"value":715},"feature.node.kubernetes.io\u002Fpci-15b3.present=true",{"type":48,"tag":478,"props":717,"children":718},{},[719,721,726,728,733,734,740,742,747,749,755],{"type":54,"value":720},"Value written into the ",{"type":48,"tag":65,"props":722,"children":723},{},[724],{"type":54,"value":725},"saved",{"type":54,"value":727}," ",{"type":48,"tag":73,"props":729,"children":731},{"className":730},[],[732],{"type":54,"value":91},{"type":54,"value":727},{"type":48,"tag":73,"props":735,"children":737},{"className":736},[],[738],{"type":54,"value":739},"nodeSelector",{"type":54,"value":741}," (for deploy time). It does ",{"type":48,"tag":65,"props":743,"children":744},{},[745],{"type":54,"value":746},"not",{"type":54,"value":748}," gate discovery scheduling or the NicDevice wait set — the daemon is restricted to Ready schedulable nodes and NIC-bearing nodes are detected via a sysfs ",{"type":48,"tag":73,"props":750,"children":752},{"className":751},[],[753],{"type":54,"value":754},"0x15b3",{"type":54,"value":756}," probe.",{"type":48,"tag":446,"props":758,"children":759},{},[760,769,773,777],{"type":48,"tag":478,"props":761,"children":762},{},[763],{"type":48,"tag":73,"props":764,"children":766},{"className":765},[],[767],{"type":54,"value":768},"--image-pull-secrets",{"type":48,"tag":478,"props":770,"children":771},{},[772],{"type":54,"value":491},{"type":48,"tag":478,"props":774,"children":775},{},[776],{"type":54,"value":491},{"type":48,"tag":478,"props":778,"children":779},{},[780],{"type":54,"value":781},"Image pull secret names (comma-separated). Forwarded onto the bootstrapped DaemonSet pod spec.",{"type":48,"tag":446,"props":783,"children":784},{},[785,794,798,803],{"type":48,"tag":478,"props":786,"children":787},{},[788],{"type":48,"tag":73,"props":789,"children":791},{"className":790},[],[792],{"type":54,"value":793},"--fabric",{"type":48,"tag":478,"props":795,"children":796},{},[797],{"type":54,"value":491},{"type":48,"tag":478,"props":799,"children":800},{},[801],{"type":54,"value":802},"discovered unanimous link type",{"type":48,"tag":478,"props":804,"children":805},{},[806,808,814,815,821],{"type":54,"value":807},"Fabric override: ",{"type":48,"tag":73,"props":809,"children":811},{"className":810},[],[812],{"type":54,"value":813},"ethernet",{"type":54,"value":164},{"type":48,"tag":73,"props":816,"children":818},{"className":817},[],[819],{"type":54,"value":820},"infiniband",{"type":54,"value":666},{"type":48,"tag":446,"props":823,"children":824},{},[825,834,838,847],{"type":48,"tag":478,"props":826,"children":827},{},[828],{"type":48,"tag":73,"props":829,"children":831},{"className":830},[],[832],{"type":54,"value":833},"--deployment-type",{"type":48,"tag":478,"props":835,"children":836},{},[837],{"type":54,"value":491},{"type":48,"tag":478,"props":839,"children":840},{},[841],{"type":48,"tag":73,"props":842,"children":844},{"className":843},[],[845],{"type":54,"value":846},"sriov",{"type":48,"tag":478,"props":848,"children":849},{},[850,852,857,859,865,867,873],{"type":54,"value":851},"Deployment override: ",{"type":48,"tag":73,"props":853,"children":855},{"className":854},[],[856],{"type":54,"value":846},{"type":54,"value":858},", ",{"type":48,"tag":73,"props":860,"children":862},{"className":861},[],[863],{"type":54,"value":864},"rdma_shared",{"type":54,"value":866},", or ",{"type":48,"tag":73,"props":868,"children":870},{"className":869},[],[871],{"type":54,"value":872},"host_device",{"type":54,"value":666},{"type":48,"tag":446,"props":875,"children":876},{},[877,886,890,898],{"type":48,"tag":478,"props":878,"children":879},{},[880],{"type":48,"tag":73,"props":881,"children":883},{"className":882},[],[884],{"type":54,"value":885},"--multirail",{"type":48,"tag":478,"props":887,"children":888},{},[889],{"type":54,"value":491},{"type":48,"tag":478,"props":891,"children":892},{},[893],{"type":48,"tag":73,"props":894,"children":896},{"className":895},[],[897],{"type":54,"value":594},{"type":48,"tag":478,"props":899,"children":900},{},[901,903,909],{"type":54,"value":902},"Multirail override. Use ",{"type":48,"tag":73,"props":904,"children":906},{"className":905},[],[907],{"type":54,"value":908},"--multirail=false",{"type":54,"value":910}," to opt out; explicit false is persisted.",{"type":48,"tag":446,"props":912,"children":913},{},[914,923,927,932],{"type":48,"tag":478,"props":915,"children":916},{},[917],{"type":48,"tag":73,"props":918,"children":920},{"className":919},[],[921],{"type":54,"value":922},"--spectrum-x",{"type":48,"tag":478,"props":924,"children":925},{},[926],{"type":54,"value":491},{"type":48,"tag":478,"props":928,"children":929},{},[930],{"type":54,"value":931},"disabled",{"type":48,"tag":478,"props":933,"children":934},{},[935,937,943,944,950],{"type":54,"value":936},"Enable Spectrum-X with an RA version (",{"type":48,"tag":73,"props":938,"children":940},{"className":939},[],[941],{"type":54,"value":942},"RA2.1",{"type":54,"value":164},{"type":48,"tag":73,"props":945,"children":947},{"className":946},[],[948],{"type":54,"value":949},"RA2.2",{"type":54,"value":235},{"type":48,"tag":446,"props":952,"children":953},{},[954,963,967,972],{"type":48,"tag":478,"props":955,"children":956},{},[957],{"type":48,"tag":73,"props":958,"children":960},{"className":959},[],[961],{"type":54,"value":962},"--multiplane-mode",{"type":48,"tag":478,"props":964,"children":965},{},[966],{"type":54,"value":491},{"type":48,"tag":478,"props":968,"children":969},{},[970],{"type":54,"value":971},"derived with Spectrum-X",{"type":48,"tag":478,"props":973,"children":974},{},[975,977,983,984,990,991,997,998,1004],{"type":54,"value":976},"Spectrum-X mode override: ",{"type":48,"tag":73,"props":978,"children":980},{"className":979},[],[981],{"type":54,"value":982},"none",{"type":54,"value":858},{"type":48,"tag":73,"props":985,"children":987},{"className":986},[],[988],{"type":54,"value":989},"swplb",{"type":54,"value":858},{"type":48,"tag":73,"props":992,"children":994},{"className":993},[],[995],{"type":54,"value":996},"hwplb",{"type":54,"value":866},{"type":48,"tag":73,"props":999,"children":1001},{"className":1000},[],[1002],{"type":54,"value":1003},"uniplane",{"type":54,"value":666},{"type":48,"tag":446,"props":1006,"children":1007},{},[1008,1017,1021,1025],{"type":48,"tag":478,"props":1009,"children":1010},{},[1011],{"type":48,"tag":73,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":54,"value":1016},"--number-of-planes",{"type":48,"tag":478,"props":1018,"children":1019},{},[1020],{"type":54,"value":491},{"type":48,"tag":478,"props":1022,"children":1023},{},[1024],{"type":54,"value":971},{"type":48,"tag":478,"props":1026,"children":1027},{},[1028,1030,1036,1037,1043,1044,1050],{"type":54,"value":1029},"Spectrum-X plane-count override: ",{"type":48,"tag":73,"props":1031,"children":1033},{"className":1032},[],[1034],{"type":54,"value":1035},"1",{"type":54,"value":858},{"type":48,"tag":73,"props":1038,"children":1040},{"className":1039},[],[1041],{"type":54,"value":1042},"2",{"type":54,"value":866},{"type":48,"tag":73,"props":1045,"children":1047},{"className":1046},[],[1048],{"type":54,"value":1049},"4",{"type":54,"value":666},{"type":48,"tag":237,"props":1052,"children":1054},{"id":1053},"examples",[1055],{"type":54,"value":1056},"Examples",{"type":48,"tag":244,"props":1058,"children":1060},{"className":246,"code":1059,"language":248,"meta":249,"style":249},"# Basic discovery\nl8k discover \\\n  --kubeconfig ~\u002F.kube\u002Fconfig \\\n  --save-cluster-config .\u002Fcluster-config.yaml\n\n# Using $KUBECONFIG env var (no --kubeconfig needed)\nl8k discover --save-cluster-config .\u002Fcluster-config.yaml\n\n# Keep the bootstrap namespace for debugging\nl8k discover \\\n  --kubeconfig ~\u002F.kube\u002Fconfig \\\n  --keep-namespace \\\n  --save-cluster-config .\u002Fcluster-config.yaml\n\n# Merge with existing config\nl8k discover --user-config my-config.yaml \\\n  --kubeconfig ~\u002F.kube\u002Fconfig \\\n  --save-cluster-config .\u002Fcluster-config.yaml\n\n# Persist explicit profile overrides\nl8k discover \\\n  --kubeconfig ~\u002F.kube\u002Fconfig \\\n  --fabric infiniband --deployment-type rdma_shared \\\n  --multirail=false \\\n  --save-cluster-config .\u002Fcluster-config.yaml\n\n# Agent mode (JSON output)\nl8k discover \\\n  --kubeconfig ~\u002F.kube\u002Fconfig \\\n  --save-cluster-config .\u002Fcluster-config.yaml \\\n  --output json 2>\u002Fdev\u002Fnull\n",[1061],{"type":48,"tag":73,"props":1062,"children":1063},{"__ignoreMap":249},[1064,1073,1088,1103,1115,1125,1134,1154,1162,1171,1187,1203,1216,1228,1235,1244,1270,1286,1298,1306,1315,1331,1347,1375,1388,1400,1408,1417,1433,1449,1465],{"type":48,"tag":255,"props":1065,"children":1066},{"class":257,"line":258},[1067],{"type":48,"tag":255,"props":1068,"children":1070},{"style":1069},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1071],{"type":54,"value":1072},"# Basic discovery\n",{"type":48,"tag":255,"props":1074,"children":1075},{"class":257,"line":280},[1076,1080,1084],{"type":48,"tag":255,"props":1077,"children":1078},{"style":262},[1079],{"type":54,"value":265},{"type":48,"tag":255,"props":1081,"children":1082},{"style":268},[1083],{"type":54,"value":271},{"type":48,"tag":255,"props":1085,"children":1086},{"style":274},[1087],{"type":54,"value":277},{"type":48,"tag":255,"props":1089,"children":1090},{"class":257,"line":298},[1091,1095,1099],{"type":48,"tag":255,"props":1092,"children":1093},{"style":268},[1094],{"type":54,"value":286},{"type":48,"tag":255,"props":1096,"children":1097},{"style":268},[1098],{"type":54,"value":291},{"type":48,"tag":255,"props":1100,"children":1101},{"style":274},[1102],{"type":54,"value":277},{"type":48,"tag":255,"props":1104,"children":1105},{"class":257,"line":30},[1106,1110],{"type":48,"tag":255,"props":1107,"children":1108},{"style":268},[1109],{"type":54,"value":304},{"type":48,"tag":255,"props":1111,"children":1112},{"style":268},[1113],{"type":54,"value":1114}," .\u002Fcluster-config.yaml\n",{"type":48,"tag":255,"props":1116,"children":1118},{"class":257,"line":1117},5,[1119],{"type":48,"tag":255,"props":1120,"children":1122},{"emptyLinePlaceholder":1121},true,[1123],{"type":54,"value":1124},"\n",{"type":48,"tag":255,"props":1126,"children":1128},{"class":257,"line":1127},6,[1129],{"type":48,"tag":255,"props":1130,"children":1131},{"style":1069},[1132],{"type":54,"value":1133},"# Using $KUBECONFIG env var (no --kubeconfig needed)\n",{"type":48,"tag":255,"props":1135,"children":1137},{"class":257,"line":1136},7,[1138,1142,1146,1150],{"type":48,"tag":255,"props":1139,"children":1140},{"style":262},[1141],{"type":54,"value":265},{"type":48,"tag":255,"props":1143,"children":1144},{"style":268},[1145],{"type":54,"value":271},{"type":48,"tag":255,"props":1147,"children":1148},{"style":268},[1149],{"type":54,"value":381},{"type":48,"tag":255,"props":1151,"children":1152},{"style":268},[1153],{"type":54,"value":1114},{"type":48,"tag":255,"props":1155,"children":1157},{"class":257,"line":1156},8,[1158],{"type":48,"tag":255,"props":1159,"children":1160},{"emptyLinePlaceholder":1121},[1161],{"type":54,"value":1124},{"type":48,"tag":255,"props":1163,"children":1165},{"class":257,"line":1164},9,[1166],{"type":48,"tag":255,"props":1167,"children":1168},{"style":1069},[1169],{"type":54,"value":1170},"# Keep the bootstrap namespace for debugging\n",{"type":48,"tag":255,"props":1172,"children":1174},{"class":257,"line":1173},10,[1175,1179,1183],{"type":48,"tag":255,"props":1176,"children":1177},{"style":262},[1178],{"type":54,"value":265},{"type":48,"tag":255,"props":1180,"children":1181},{"style":268},[1182],{"type":54,"value":271},{"type":48,"tag":255,"props":1184,"children":1185},{"style":274},[1186],{"type":54,"value":277},{"type":48,"tag":255,"props":1188,"children":1190},{"class":257,"line":1189},11,[1191,1195,1199],{"type":48,"tag":255,"props":1192,"children":1193},{"style":268},[1194],{"type":54,"value":286},{"type":48,"tag":255,"props":1196,"children":1197},{"style":268},[1198],{"type":54,"value":291},{"type":48,"tag":255,"props":1200,"children":1201},{"style":274},[1202],{"type":54,"value":277},{"type":48,"tag":255,"props":1204,"children":1206},{"class":257,"line":1205},12,[1207,1212],{"type":48,"tag":255,"props":1208,"children":1209},{"style":268},[1210],{"type":54,"value":1211},"  --keep-namespace",{"type":48,"tag":255,"props":1213,"children":1214},{"style":274},[1215],{"type":54,"value":277},{"type":48,"tag":255,"props":1217,"children":1219},{"class":257,"line":1218},13,[1220,1224],{"type":48,"tag":255,"props":1221,"children":1222},{"style":268},[1223],{"type":54,"value":304},{"type":48,"tag":255,"props":1225,"children":1226},{"style":268},[1227],{"type":54,"value":1114},{"type":48,"tag":255,"props":1229,"children":1230},{"class":257,"line":26},[1231],{"type":48,"tag":255,"props":1232,"children":1233},{"emptyLinePlaceholder":1121},[1234],{"type":54,"value":1124},{"type":48,"tag":255,"props":1236,"children":1238},{"class":257,"line":1237},15,[1239],{"type":48,"tag":255,"props":1240,"children":1241},{"style":1069},[1242],{"type":54,"value":1243},"# Merge with existing config\n",{"type":48,"tag":255,"props":1245,"children":1247},{"class":257,"line":1246},16,[1248,1252,1256,1261,1266],{"type":48,"tag":255,"props":1249,"children":1250},{"style":262},[1251],{"type":54,"value":265},{"type":48,"tag":255,"props":1253,"children":1254},{"style":268},[1255],{"type":54,"value":271},{"type":48,"tag":255,"props":1257,"children":1258},{"style":268},[1259],{"type":54,"value":1260}," --user-config",{"type":48,"tag":255,"props":1262,"children":1263},{"style":268},[1264],{"type":54,"value":1265}," my-config.yaml",{"type":48,"tag":255,"props":1267,"children":1268},{"style":274},[1269],{"type":54,"value":277},{"type":48,"tag":255,"props":1271,"children":1273},{"class":257,"line":1272},17,[1274,1278,1282],{"type":48,"tag":255,"props":1275,"children":1276},{"style":268},[1277],{"type":54,"value":286},{"type":48,"tag":255,"props":1279,"children":1280},{"style":268},[1281],{"type":54,"value":291},{"type":48,"tag":255,"props":1283,"children":1284},{"style":274},[1285],{"type":54,"value":277},{"type":48,"tag":255,"props":1287,"children":1289},{"class":257,"line":1288},18,[1290,1294],{"type":48,"tag":255,"props":1291,"children":1292},{"style":268},[1293],{"type":54,"value":304},{"type":48,"tag":255,"props":1295,"children":1296},{"style":268},[1297],{"type":54,"value":1114},{"type":48,"tag":255,"props":1299,"children":1301},{"class":257,"line":1300},19,[1302],{"type":48,"tag":255,"props":1303,"children":1304},{"emptyLinePlaceholder":1121},[1305],{"type":54,"value":1124},{"type":48,"tag":255,"props":1307,"children":1309},{"class":257,"line":1308},20,[1310],{"type":48,"tag":255,"props":1311,"children":1312},{"style":1069},[1313],{"type":54,"value":1314},"# Persist explicit profile overrides\n",{"type":48,"tag":255,"props":1316,"children":1318},{"class":257,"line":1317},21,[1319,1323,1327],{"type":48,"tag":255,"props":1320,"children":1321},{"style":262},[1322],{"type":54,"value":265},{"type":48,"tag":255,"props":1324,"children":1325},{"style":268},[1326],{"type":54,"value":271},{"type":48,"tag":255,"props":1328,"children":1329},{"style":274},[1330],{"type":54,"value":277},{"type":48,"tag":255,"props":1332,"children":1334},{"class":257,"line":1333},22,[1335,1339,1343],{"type":48,"tag":255,"props":1336,"children":1337},{"style":268},[1338],{"type":54,"value":286},{"type":48,"tag":255,"props":1340,"children":1341},{"style":268},[1342],{"type":54,"value":291},{"type":48,"tag":255,"props":1344,"children":1345},{"style":274},[1346],{"type":54,"value":277},{"type":48,"tag":255,"props":1348,"children":1350},{"class":257,"line":1349},23,[1351,1356,1361,1366,1371],{"type":48,"tag":255,"props":1352,"children":1353},{"style":268},[1354],{"type":54,"value":1355},"  --fabric",{"type":48,"tag":255,"props":1357,"children":1358},{"style":268},[1359],{"type":54,"value":1360}," infiniband",{"type":48,"tag":255,"props":1362,"children":1363},{"style":268},[1364],{"type":54,"value":1365}," --deployment-type",{"type":48,"tag":255,"props":1367,"children":1368},{"style":268},[1369],{"type":54,"value":1370}," rdma_shared",{"type":48,"tag":255,"props":1372,"children":1373},{"style":274},[1374],{"type":54,"value":277},{"type":48,"tag":255,"props":1376,"children":1378},{"class":257,"line":1377},24,[1379,1384],{"type":48,"tag":255,"props":1380,"children":1381},{"style":268},[1382],{"type":54,"value":1383},"  --multirail=false",{"type":48,"tag":255,"props":1385,"children":1386},{"style":274},[1387],{"type":54,"value":277},{"type":48,"tag":255,"props":1389,"children":1391},{"class":257,"line":1390},25,[1392,1396],{"type":48,"tag":255,"props":1393,"children":1394},{"style":268},[1395],{"type":54,"value":304},{"type":48,"tag":255,"props":1397,"children":1398},{"style":268},[1399],{"type":54,"value":1114},{"type":48,"tag":255,"props":1401,"children":1403},{"class":257,"line":1402},26,[1404],{"type":48,"tag":255,"props":1405,"children":1406},{"emptyLinePlaceholder":1121},[1407],{"type":54,"value":1124},{"type":48,"tag":255,"props":1409,"children":1411},{"class":257,"line":1410},27,[1412],{"type":48,"tag":255,"props":1413,"children":1414},{"style":1069},[1415],{"type":54,"value":1416},"# Agent mode (JSON output)\n",{"type":48,"tag":255,"props":1418,"children":1420},{"class":257,"line":1419},28,[1421,1425,1429],{"type":48,"tag":255,"props":1422,"children":1423},{"style":262},[1424],{"type":54,"value":265},{"type":48,"tag":255,"props":1426,"children":1427},{"style":268},[1428],{"type":54,"value":271},{"type":48,"tag":255,"props":1430,"children":1431},{"style":274},[1432],{"type":54,"value":277},{"type":48,"tag":255,"props":1434,"children":1436},{"class":257,"line":1435},29,[1437,1441,1445],{"type":48,"tag":255,"props":1438,"children":1439},{"style":268},[1440],{"type":54,"value":286},{"type":48,"tag":255,"props":1442,"children":1443},{"style":268},[1444],{"type":54,"value":291},{"type":48,"tag":255,"props":1446,"children":1447},{"style":274},[1448],{"type":54,"value":277},{"type":48,"tag":255,"props":1450,"children":1452},{"class":257,"line":1451},30,[1453,1457,1461],{"type":48,"tag":255,"props":1454,"children":1455},{"style":268},[1456],{"type":54,"value":304},{"type":48,"tag":255,"props":1458,"children":1459},{"style":268},[1460],{"type":54,"value":309},{"type":48,"tag":255,"props":1462,"children":1463},{"style":274},[1464],{"type":54,"value":277},{"type":48,"tag":255,"props":1466,"children":1468},{"class":257,"line":1467},31,[1469,1473,1477,1481],{"type":48,"tag":255,"props":1470,"children":1471},{"style":268},[1472],{"type":54,"value":321},{"type":48,"tag":255,"props":1474,"children":1475},{"style":268},[1476],{"type":54,"value":326},{"type":48,"tag":255,"props":1478,"children":1479},{"style":329},[1480],{"type":54,"value":332},{"type":48,"tag":255,"props":1482,"children":1483},{"style":268},[1484],{"type":54,"value":1485},"\u002Fdev\u002Fnull\n",{"type":48,"tag":237,"props":1487,"children":1489},{"id":1488},"output-format",[1490],{"type":54,"value":1491},"Output Format",{"type":48,"tag":61,"props":1493,"children":1494},{},[1495,1497,1502,1504,1510],{"type":54,"value":1496},"The generated ",{"type":48,"tag":73,"props":1498,"children":1500},{"className":1499},[],[1501],{"type":54,"value":91},{"type":54,"value":1503}," contains the final profile plus a\n",{"type":48,"tag":73,"props":1505,"children":1507},{"className":1506},[],[1508],{"type":54,"value":1509},"clusterConfig[]",{"type":54,"value":1511}," hardware-group array:",{"type":48,"tag":244,"props":1513,"children":1517},{"className":1514,"code":1515,"language":1516,"meta":249,"style":249},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","profile:\n  fabric: ethernet\n  deployment: sriov\n  multirail: true\nclusterConfig:\n  - identifier: \"dgx-b200-nvidia-h100-nvl\"\n    machineType: DGX-B200\n    gpuType: NVIDIA-H100-NVL\n    capabilities:\n      nodes:\n        sriov: true\n        rdma: true\n    pfs:\n      - deviceID: \"101e\"\n        networkInterface: \"eth0\"\n        rail: 0\n    workerNodes: [node-01, node-02]\n    nodeSelector:\n      nvidia.kubernetes-launch-kit.machine: \"DGX-B200-NVIDIA-H100-NVL\"\n    thirdPartyRDMAModules: [nv_peer_mem]\n","yaml",[1518],{"type":48,"tag":73,"props":1519,"children":1520},{"__ignoreMap":249},[1521,1535,1553,1570,1588,1600,1632,1649,1666,1678,1690,1706,1722,1734,1764,1789,1807,1843,1855,1880],{"type":48,"tag":255,"props":1522,"children":1523},{"class":257,"line":258},[1524,1530],{"type":48,"tag":255,"props":1525,"children":1527},{"style":1526},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1528],{"type":54,"value":1529},"profile",{"type":48,"tag":255,"props":1531,"children":1532},{"style":329},[1533],{"type":54,"value":1534},":\n",{"type":48,"tag":255,"props":1536,"children":1537},{"class":257,"line":280},[1538,1543,1548],{"type":48,"tag":255,"props":1539,"children":1540},{"style":1526},[1541],{"type":54,"value":1542},"  fabric",{"type":48,"tag":255,"props":1544,"children":1545},{"style":329},[1546],{"type":54,"value":1547},":",{"type":48,"tag":255,"props":1549,"children":1550},{"style":268},[1551],{"type":54,"value":1552}," ethernet\n",{"type":48,"tag":255,"props":1554,"children":1555},{"class":257,"line":298},[1556,1561,1565],{"type":48,"tag":255,"props":1557,"children":1558},{"style":1526},[1559],{"type":54,"value":1560},"  deployment",{"type":48,"tag":255,"props":1562,"children":1563},{"style":329},[1564],{"type":54,"value":1547},{"type":48,"tag":255,"props":1566,"children":1567},{"style":268},[1568],{"type":54,"value":1569}," sriov\n",{"type":48,"tag":255,"props":1571,"children":1572},{"class":257,"line":30},[1573,1578,1582],{"type":48,"tag":255,"props":1574,"children":1575},{"style":1526},[1576],{"type":54,"value":1577},"  multirail",{"type":48,"tag":255,"props":1579,"children":1580},{"style":329},[1581],{"type":54,"value":1547},{"type":48,"tag":255,"props":1583,"children":1585},{"style":1584},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[1586],{"type":54,"value":1587}," true\n",{"type":48,"tag":255,"props":1589,"children":1590},{"class":257,"line":1117},[1591,1596],{"type":48,"tag":255,"props":1592,"children":1593},{"style":1526},[1594],{"type":54,"value":1595},"clusterConfig",{"type":48,"tag":255,"props":1597,"children":1598},{"style":329},[1599],{"type":54,"value":1534},{"type":48,"tag":255,"props":1601,"children":1602},{"class":257,"line":1127},[1603,1608,1613,1617,1622,1627],{"type":48,"tag":255,"props":1604,"children":1605},{"style":329},[1606],{"type":54,"value":1607},"  -",{"type":48,"tag":255,"props":1609,"children":1610},{"style":1526},[1611],{"type":54,"value":1612}," identifier",{"type":48,"tag":255,"props":1614,"children":1615},{"style":329},[1616],{"type":54,"value":1547},{"type":48,"tag":255,"props":1618,"children":1619},{"style":329},[1620],{"type":54,"value":1621}," \"",{"type":48,"tag":255,"props":1623,"children":1624},{"style":268},[1625],{"type":54,"value":1626},"dgx-b200-nvidia-h100-nvl",{"type":48,"tag":255,"props":1628,"children":1629},{"style":329},[1630],{"type":54,"value":1631},"\"\n",{"type":48,"tag":255,"props":1633,"children":1634},{"class":257,"line":1136},[1635,1640,1644],{"type":48,"tag":255,"props":1636,"children":1637},{"style":1526},[1638],{"type":54,"value":1639},"    machineType",{"type":48,"tag":255,"props":1641,"children":1642},{"style":329},[1643],{"type":54,"value":1547},{"type":48,"tag":255,"props":1645,"children":1646},{"style":268},[1647],{"type":54,"value":1648}," DGX-B200\n",{"type":48,"tag":255,"props":1650,"children":1651},{"class":257,"line":1156},[1652,1657,1661],{"type":48,"tag":255,"props":1653,"children":1654},{"style":1526},[1655],{"type":54,"value":1656},"    gpuType",{"type":48,"tag":255,"props":1658,"children":1659},{"style":329},[1660],{"type":54,"value":1547},{"type":48,"tag":255,"props":1662,"children":1663},{"style":268},[1664],{"type":54,"value":1665}," NVIDIA-H100-NVL\n",{"type":48,"tag":255,"props":1667,"children":1668},{"class":257,"line":1164},[1669,1674],{"type":48,"tag":255,"props":1670,"children":1671},{"style":1526},[1672],{"type":54,"value":1673},"    capabilities",{"type":48,"tag":255,"props":1675,"children":1676},{"style":329},[1677],{"type":54,"value":1534},{"type":48,"tag":255,"props":1679,"children":1680},{"class":257,"line":1173},[1681,1686],{"type":48,"tag":255,"props":1682,"children":1683},{"style":1526},[1684],{"type":54,"value":1685},"      nodes",{"type":48,"tag":255,"props":1687,"children":1688},{"style":329},[1689],{"type":54,"value":1534},{"type":48,"tag":255,"props":1691,"children":1692},{"class":257,"line":1189},[1693,1698,1702],{"type":48,"tag":255,"props":1694,"children":1695},{"style":1526},[1696],{"type":54,"value":1697},"        sriov",{"type":48,"tag":255,"props":1699,"children":1700},{"style":329},[1701],{"type":54,"value":1547},{"type":48,"tag":255,"props":1703,"children":1704},{"style":1584},[1705],{"type":54,"value":1587},{"type":48,"tag":255,"props":1707,"children":1708},{"class":257,"line":1205},[1709,1714,1718],{"type":48,"tag":255,"props":1710,"children":1711},{"style":1526},[1712],{"type":54,"value":1713},"        rdma",{"type":48,"tag":255,"props":1715,"children":1716},{"style":329},[1717],{"type":54,"value":1547},{"type":48,"tag":255,"props":1719,"children":1720},{"style":1584},[1721],{"type":54,"value":1587},{"type":48,"tag":255,"props":1723,"children":1724},{"class":257,"line":1218},[1725,1730],{"type":48,"tag":255,"props":1726,"children":1727},{"style":1526},[1728],{"type":54,"value":1729},"    pfs",{"type":48,"tag":255,"props":1731,"children":1732},{"style":329},[1733],{"type":54,"value":1534},{"type":48,"tag":255,"props":1735,"children":1736},{"class":257,"line":26},[1737,1742,1747,1751,1755,1760],{"type":48,"tag":255,"props":1738,"children":1739},{"style":329},[1740],{"type":54,"value":1741},"      -",{"type":48,"tag":255,"props":1743,"children":1744},{"style":1526},[1745],{"type":54,"value":1746}," deviceID",{"type":48,"tag":255,"props":1748,"children":1749},{"style":329},[1750],{"type":54,"value":1547},{"type":48,"tag":255,"props":1752,"children":1753},{"style":329},[1754],{"type":54,"value":1621},{"type":48,"tag":255,"props":1756,"children":1757},{"style":268},[1758],{"type":54,"value":1759},"101e",{"type":48,"tag":255,"props":1761,"children":1762},{"style":329},[1763],{"type":54,"value":1631},{"type":48,"tag":255,"props":1765,"children":1766},{"class":257,"line":1237},[1767,1772,1776,1780,1785],{"type":48,"tag":255,"props":1768,"children":1769},{"style":1526},[1770],{"type":54,"value":1771},"        networkInterface",{"type":48,"tag":255,"props":1773,"children":1774},{"style":329},[1775],{"type":54,"value":1547},{"type":48,"tag":255,"props":1777,"children":1778},{"style":329},[1779],{"type":54,"value":1621},{"type":48,"tag":255,"props":1781,"children":1782},{"style":268},[1783],{"type":54,"value":1784},"eth0",{"type":48,"tag":255,"props":1786,"children":1787},{"style":329},[1788],{"type":54,"value":1631},{"type":48,"tag":255,"props":1790,"children":1791},{"class":257,"line":1246},[1792,1797,1801],{"type":48,"tag":255,"props":1793,"children":1794},{"style":1526},[1795],{"type":54,"value":1796},"        rail",{"type":48,"tag":255,"props":1798,"children":1799},{"style":329},[1800],{"type":54,"value":1547},{"type":48,"tag":255,"props":1802,"children":1804},{"style":1803},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1805],{"type":54,"value":1806}," 0\n",{"type":48,"tag":255,"props":1808,"children":1809},{"class":257,"line":1272},[1810,1815,1819,1824,1829,1834,1839],{"type":48,"tag":255,"props":1811,"children":1812},{"style":1526},[1813],{"type":54,"value":1814},"    workerNodes",{"type":48,"tag":255,"props":1816,"children":1817},{"style":329},[1818],{"type":54,"value":1547},{"type":48,"tag":255,"props":1820,"children":1821},{"style":329},[1822],{"type":54,"value":1823}," [",{"type":48,"tag":255,"props":1825,"children":1826},{"style":268},[1827],{"type":54,"value":1828},"node-01",{"type":48,"tag":255,"props":1830,"children":1831},{"style":329},[1832],{"type":54,"value":1833},",",{"type":48,"tag":255,"props":1835,"children":1836},{"style":268},[1837],{"type":54,"value":1838}," node-02",{"type":48,"tag":255,"props":1840,"children":1841},{"style":329},[1842],{"type":54,"value":430},{"type":48,"tag":255,"props":1844,"children":1845},{"class":257,"line":1288},[1846,1851],{"type":48,"tag":255,"props":1847,"children":1848},{"style":1526},[1849],{"type":54,"value":1850},"    nodeSelector",{"type":48,"tag":255,"props":1852,"children":1853},{"style":329},[1854],{"type":54,"value":1534},{"type":48,"tag":255,"props":1856,"children":1857},{"class":257,"line":1300},[1858,1863,1867,1871,1876],{"type":48,"tag":255,"props":1859,"children":1860},{"style":1526},[1861],{"type":54,"value":1862},"      nvidia.kubernetes-launch-kit.machine",{"type":48,"tag":255,"props":1864,"children":1865},{"style":329},[1866],{"type":54,"value":1547},{"type":48,"tag":255,"props":1868,"children":1869},{"style":329},[1870],{"type":54,"value":1621},{"type":48,"tag":255,"props":1872,"children":1873},{"style":268},[1874],{"type":54,"value":1875},"DGX-B200-NVIDIA-H100-NVL",{"type":48,"tag":255,"props":1877,"children":1878},{"style":329},[1879],{"type":54,"value":1631},{"type":48,"tag":255,"props":1881,"children":1882},{"class":257,"line":1308},[1883,1888,1892,1896,1901],{"type":48,"tag":255,"props":1884,"children":1885},{"style":1526},[1886],{"type":54,"value":1887},"    thirdPartyRDMAModules",{"type":48,"tag":255,"props":1889,"children":1890},{"style":329},[1891],{"type":54,"value":1547},{"type":48,"tag":255,"props":1893,"children":1894},{"style":329},[1895],{"type":54,"value":1823},{"type":48,"tag":255,"props":1897,"children":1898},{"style":268},[1899],{"type":54,"value":1900},"nv_peer_mem",{"type":48,"tag":255,"props":1902,"children":1903},{"style":329},[1904],{"type":54,"value":430},{"type":48,"tag":61,"props":1906,"children":1907},{},[1908],{"type":54,"value":1909},"Discovery patches every node in the group with two labels:",{"type":48,"tag":100,"props":1911,"children":1912},{},[1913,1930],{"type":48,"tag":104,"props":1914,"children":1915},{},[1916,1922,1924,1929],{"type":48,"tag":73,"props":1917,"children":1919},{"className":1918},[],[1920],{"type":54,"value":1921},"nvidia.kubernetes-launch-kit.machine: \u003CmachineType>-\u003CgpuType>",{"type":54,"value":1923}," — per-source-group\nidentity, used as the source group's ",{"type":48,"tag":73,"props":1925,"children":1927},{"className":1926},[],[1928],{"type":54,"value":739},{"type":54,"value":666},{"type":48,"tag":104,"props":1931,"children":1932},{},[1933,1939,1941,1946,1948,1953],{"type":48,"tag":73,"props":1934,"children":1936},{"className":1935},[],[1937],{"type":54,"value":1938},"nvidia.kubernetes-launch-kit.gpu: \u003CgpuType>",{"type":54,"value":1940}," — used as the merged-group\n",{"type":48,"tag":73,"props":1942,"children":1944},{"className":1943},[],[1945],{"type":54,"value":739},{"type":54,"value":1947}," when ",{"type":48,"tag":73,"props":1949,"children":1951},{"className":1950},[],[1952],{"type":54,"value":656},{"type":54,"value":1954}," auto-merges source groups sharing a GPU type.",{"type":48,"tag":61,"props":1956,"children":1957},{},[1958,1960,1966,1968,1974,1976,1982,1983,1989,1991,1997,1999,2004],{"type":54,"value":1959},"Label values keep their original case (matching ",{"type":48,"tag":73,"props":1961,"children":1963},{"className":1962},[],[1964],{"type":54,"value":1965},"nvidia.com\u002Fgpu.product",{"type":54,"value":1967}," style) since\nupstream discovery already trims whitespace and replaces spaces with hyphens. Values\nthat would exceed the Kubernetes 63-char label-value limit are skipped (logged at\ndebug). The group's ",{"type":48,"tag":73,"props":1969,"children":1971},{"className":1970},[],[1972],{"type":54,"value":1973},"identifier",{"type":54,"value":1975}," is the lowercase resource-name form of the machine\nlabel (RFC 1123 — required for downstream NicNodePolicy \u002F SriovNetworkNodePolicy\nnaming). When ",{"type":48,"tag":73,"props":1977,"children":1979},{"className":1978},[],[1980],{"type":54,"value":1981},"machineType",{"type":54,"value":164},{"type":48,"tag":73,"props":1984,"children":1986},{"className":1985},[],[1987],{"type":54,"value":1988},"gpuType",{"type":54,"value":1990}," couldn't be resolved (GPU operator labels\nabsent and hardware probe failed), a fallback ",{"type":48,"tag":73,"props":1992,"children":1994},{"className":1993},[],[1995],{"type":54,"value":1996},"group-N",{"type":54,"value":1998}," identifier is used and the\nmachine label is not written; the GPU label is still written when ",{"type":48,"tag":73,"props":2000,"children":2002},{"className":2001},[],[2003],{"type":54,"value":1988},{"type":54,"value":2005}," alone is\nresolved.",{"type":48,"tag":237,"props":2007,"children":2009},{"id":2008},"prerequisites",[2010],{"type":54,"value":2011},"Prerequisites",{"type":48,"tag":100,"props":2013,"children":2014},{},[2015,2064,2093],{"type":48,"tag":104,"props":2016,"children":2017},{},[2018,2020,2024,2026,2032,2034,2040,2042,2047,2049,2054,2056,2062],{"type":54,"value":2019},"Node Feature Discovery (NFD) is ",{"type":48,"tag":65,"props":2021,"children":2022},{},[2023],{"type":54,"value":746},{"type":54,"value":2025}," required. Before bootstrapping the\ndaemon, discovery lists Nodes and renders node-name affinity for nodes that\nare ",{"type":48,"tag":73,"props":2027,"children":2029},{"className":2028},[],[2030],{"type":54,"value":2031},"Ready=True",{"type":54,"value":2033}," and not ",{"type":48,"tag":73,"props":2035,"children":2037},{"className":2036},[],[2038],{"type":54,"value":2039},"spec.unschedulable",{"type":54,"value":2041},". The DaemonSet still has no\nNFD ",{"type":48,"tag":73,"props":2043,"children":2045},{"className":2044},[],[2046],{"type":54,"value":739},{"type":54,"value":2048}," and tolerates taints, so eligible control-plane\u002Ftainted\nnodes are included. NIC-bearing nodes are detected by a sysfs probe for PCI\nvendor ",{"type":48,"tag":73,"props":2050,"children":2052},{"className":2051},[],[2053],{"type":54,"value":754},{"type":54,"value":2055}," rather than the NFD\n",{"type":48,"tag":73,"props":2057,"children":2059},{"className":2058},[],[2060],{"type":54,"value":2061},"feature.node.kubernetes.io\u002Fpci-15b3.present",{"type":54,"value":2063}," label.",{"type":48,"tag":104,"props":2065,"children":2066},{},[2067,2069,2075,2077,2083,2085,2091],{"type":54,"value":2068},"Image-pull access from every worker node to\n",{"type":48,"tag":73,"props":2070,"children":2072},{"className":2071},[],[2073],{"type":54,"value":2074},"\u003CnetworkOperator.repository>\u002Fnic-configuration-operator-daemon:\u003CnetworkOperator.componentVersion>",{"type":54,"value":2076},".\nUse ",{"type":48,"tag":73,"props":2078,"children":2080},{"className":2079},[],[2081],{"type":54,"value":2082},"--image-pull-secrets \u003Cname>",{"type":54,"value":2084}," (or ",{"type":48,"tag":73,"props":2086,"children":2088},{"className":2087},[],[2089],{"type":54,"value":2090},"networkOperator.imagePullSecrets",{"type":54,"value":2092},"\nin the config file) for private registries.",{"type":48,"tag":104,"props":2094,"children":2095},{},[2096,2098,2103],{"type":54,"value":2097},"Network Operator does ",{"type":48,"tag":65,"props":2099,"children":2100},{},[2101],{"type":54,"value":2102},"NOT",{"type":54,"value":2104}," need to be pre-installed.",{"type":48,"tag":237,"props":2106,"children":2108},{"id":2107},"tips",[2109],{"type":54,"value":2110},"Tips",{"type":48,"tag":100,"props":2112,"children":2113},{},[2114,2134,2146,2166,2192,2219,2224,2243,2255,2267,2287,2323],{"type":48,"tag":104,"props":2115,"children":2116},{},[2117,2119,2125,2127,2132],{"type":54,"value":2118},"Profile precedence is ",{"type":48,"tag":73,"props":2120,"children":2122},{"className":2121},[],[2123],{"type":54,"value":2124},"hardware\u002Fdefault \u003C existing YAML \u003C explicit CLI",{"type":54,"value":2126},".\nOn a rerun with ",{"type":48,"tag":73,"props":2128,"children":2130},{"className":2129},[],[2131],{"type":54,"value":119},{"type":54,"value":2133},", only missing fields are recalculated.",{"type":48,"tag":104,"props":2135,"children":2136},{},[2137,2139,2144],{"type":54,"value":2138},"A fresh discovery ignores the example profile in the installed reference\nconfig. Supplying that file explicitly through ",{"type":48,"tag":73,"props":2140,"children":2142},{"className":2141},[],[2143],{"type":54,"value":119},{"type":54,"value":2145}," makes its\nprofile values user input and therefore preserves them.",{"type":48,"tag":104,"props":2147,"children":2148},{},[2149,2151,2157,2159,2164],{"type":54,"value":2150},"If fabric probes are mixed or unconfirmed, discovery still writes the file\nwith an empty ",{"type":48,"tag":73,"props":2152,"children":2154},{"className":2153},[],[2155],{"type":54,"value":2156},"profile.fabric",{"type":54,"value":2158},"; set ",{"type":48,"tag":73,"props":2160,"children":2162},{"className":2161},[],[2163],{"type":54,"value":793},{"type":54,"value":2165}," on discovery or generation.",{"type":48,"tag":104,"props":2167,"children":2168},{},[2169,2171,2176,2177,2182,2184,2190],{"type":54,"value":2170},"The bootstrap namespace is ",{"type":48,"tag":65,"props":2172,"children":2173},{},[2174],{"type":54,"value":2175},"always",{"type":54,"value":727},{"type":48,"tag":73,"props":2178,"children":2180},{"className":2179},[],[2181],{"type":54,"value":202},{"type":54,"value":2183}," — not configurable. The\ndaemon's SA \u002F ClusterRole \u002F ClusterRoleBinding are renamed to\n",{"type":48,"tag":73,"props":2185,"children":2187},{"className":2186},[],[2188],{"type":54,"value":2189},"k8s-launch-kit-nic-config-daemon",{"type":54,"value":2191}," so they don't collide with the cluster-scoped\nnames a coexisting Network Operator install would create.",{"type":48,"tag":104,"props":2193,"children":2194},{},[2195,2197,2203,2204,2210,2212,2217],{"type":54,"value":2196},"CRDs (",{"type":48,"tag":73,"props":2198,"children":2200},{"className":2199},[],[2201],{"type":54,"value":2202},"nicdevices",{"type":54,"value":858},{"type":48,"tag":73,"props":2205,"children":2207},{"className":2206},[],[2208],{"type":54,"value":2209},"nicconfigurationtemplates",{"type":54,"value":2211},", etc.) are applied ",{"type":48,"tag":65,"props":2213,"children":2214},{},[2215],{"type":54,"value":2216},"only when missing",{"type":54,"value":2218},".\nIf they already exist (because Network Operator or a prior l8k discover run created\nthem), they're left alone — discovery never overwrites a different version.",{"type":48,"tag":104,"props":2220,"children":2221},{},[2222],{"type":54,"value":2223},"After discovery finishes the namespace is torn down (cascade-delete handles SA \u002F\nRoleBinding \u002F DaemonSet \u002F pods \u002F NicDevice CRs); the CRDs intentionally persist so\nany external NicDevice consumers survive. Cluster-scoped ClusterRole \u002F\nClusterRoleBinding are deleted explicitly.",{"type":48,"tag":104,"props":2225,"children":2226},{},[2227,2229,2234,2236,2242],{"type":54,"value":2228},"Pass ",{"type":48,"tag":73,"props":2230,"children":2232},{"className":2231},[],[2233],{"type":54,"value":218},{"type":54,"value":2235}," to leave the namespace in place — useful when debugging\ndaemon pod start-up failures (",{"type":48,"tag":73,"props":2237,"children":2239},{"className":2238},[],[2240],{"type":54,"value":2241},"kubectl describe pod -n nvidia-k8s-launch-kit",{"type":54,"value":235},{"type":48,"tag":104,"props":2244,"children":2245},{},[2246,2248,2253],{"type":54,"value":2247},"Before bootstrapping, discovery pre-cleans the ",{"type":48,"tag":73,"props":2249,"children":2251},{"className":2250},[],[2252],{"type":54,"value":202},{"type":54,"value":2254}," namespace\n(deletes any leftover DaemonSet\u002Fpods\u002FNicDevice CRs from a crashed prior run and\nwaits up to 2 min for it to clear) so a fresh daemon is never layered on stale state.",{"type":48,"tag":104,"props":2256,"children":2257},{},[2258,2260,2265],{"type":54,"value":2259},"Discovery waits up to 5 minutes for daemon pods to be Ready, but tolerates\nstuck pods: if some pods are wedged (e.g. ImagePullBackOff\u002FCrashLoopBackOff on\nan unrelated node) it proceeds with the Ready ones rather than blocking the\nwhole window, and only aborts if ",{"type":48,"tag":65,"props":2261,"children":2262},{},[2263],{"type":54,"value":2264},"no",{"type":54,"value":2266}," pod ever becomes Ready. Common causes\nof a total failure: image tag missing in your registry, pull-secret missing.",{"type":48,"tag":104,"props":2268,"children":2269},{},[2270,2272,2277,2279,2285],{"type":54,"value":2271},"If discovery reports \"no nodes with an NVIDIA NIC (PCI vendor 15b3) were found\",\nthe daemon ran but no node's sysfs exposed a ",{"type":48,"tag":73,"props":2273,"children":2275},{"className":2274},[],[2276],{"type":54,"value":754},{"type":54,"value":2278}," device (no Mellanox\u002FNVIDIA\nNICs, or ",{"type":48,"tag":73,"props":2280,"children":2282},{"className":2281},[],[2283],{"type":54,"value":2284},"\u002Fsys",{"type":54,"value":2286}," not mounted\u002Freadable in the pod).",{"type":48,"tag":104,"props":2288,"children":2289},{},[2290,2292,2298,2300,2306,2308,2313,2315,2321],{"type":54,"value":2291},"After determining each group's ",{"type":48,"tag":73,"props":2293,"children":2295},{"className":2294},[],[2296],{"type":54,"value":2297},"(machineType, gpuType)",{"type":54,"value":2299},", discovery looks up a topology preset under ",{"type":48,"tag":73,"props":2301,"children":2303},{"className":2302},[],[2304],{"type":54,"value":2305},"presets\u002F",{"type":54,"value":2307}," using ",{"type":48,"tag":65,"props":2309,"children":2310},{},[2311],{"type":54,"value":2312},"exact-match",{"type":54,"value":2314}," lookup on that pair. A matching preset overrides heuristic-derived topology fields (traffic class, rail, NUMA, GPU affinity). There is no any-GPU fallback — a preset with empty ",{"type":48,"tag":73,"props":2316,"children":2318},{"className":2317},[],[2319],{"type":54,"value":2320},"gpuType:",{"type":54,"value":2322}," is rejected at load time. If no preset matches, discovery proceeds with heuristic classification.",{"type":48,"tag":104,"props":2324,"children":2325},{},[2326,2328,2334,2336,2342],{"type":54,"value":2327},"If you already know the SKU and want to skip cluster discovery entirely, use ",{"type":48,"tag":73,"props":2329,"children":2331},{"className":2330},[],[2332],{"type":54,"value":2333},"l8k generate --for \u003Cpreset>",{"type":54,"value":2335}," (see ",{"type":48,"tag":73,"props":2337,"children":2339},{"className":2338},[],[2340],{"type":54,"value":2341},"k8s-launch-kit-generate",{"type":54,"value":235},{"type":48,"tag":237,"props":2344,"children":2346},{"id":2345},"rail-collapsing-one-rail-per-nic",[2347],{"type":54,"value":2348},"Rail collapsing (one rail per NIC)",{"type":48,"tag":61,"props":2350,"children":2351},{},[2352,2354,2359,2361,2366,2368,2373,2375,2381,2383,2388,2390,2395,2397,2403],{"type":54,"value":2353},"By default (",{"type":48,"tag":73,"props":2355,"children":2357},{"className":2356},[],[2358],{"type":54,"value":581},{"type":54,"value":2360},", default ",{"type":48,"tag":73,"props":2362,"children":2364},{"className":2363},[],[2365],{"type":54,"value":594},{"type":54,"value":2367},") discovery advertises ",{"type":48,"tag":65,"props":2369,"children":2370},{},[2371],{"type":54,"value":2372},"one\nrail per NIC",{"type":54,"value":2374},", not one per PF. A single NIC can expose several east-west PFs\nthat are ",{"type":48,"tag":2376,"props":2377,"children":2378},"em",{},[2379],{"type":54,"value":2380},"planes",{"type":54,"value":2382}," of one physical port (Spectrum-X multi-plane ConnectX-8\u002F9). For\nthose, only the ",{"type":48,"tag":65,"props":2384,"children":2385},{},[2386],{"type":54,"value":2387},"master PF",{"type":54,"value":2389}," (lowest PCI function) is written to\n",{"type":48,"tag":73,"props":2391,"children":2393},{"className":2392},[],[2394],{"type":54,"value":91},{"type":54,"value":2396},", so the rail count reflects physical NICs — e.g. an 8-PF\nConnectX-8 node yields 4 rails, not 8. The per-PF planes are reconstructed at\ngenerate time from the multiplane mode + ",{"type":48,"tag":73,"props":2398,"children":2400},{"className":2399},[],[2401],{"type":54,"value":2402},"numberOfPlanes",{"type":54,"value":666},{"type":48,"tag":61,"props":2405,"children":2406},{},[2407,2409,2414,2416,2422,2424,2430,2432,2438,2440,2446,2448,2454],{"type":54,"value":2408},"The exception is a ",{"type":48,"tag":65,"props":2410,"children":2411},{},[2412],{"type":54,"value":2413},"genuinely dual-port NIC",{"type":54,"value":2415},": when the NIC's VPD model name\n(read from ",{"type":48,"tag":73,"props":2417,"children":2419},{"className":2418},[],[2420],{"type":54,"value":2421},"NicDevice.Status.modelName",{"type":54,"value":2423},", surfaced as the ",{"type":48,"tag":73,"props":2425,"children":2427},{"className":2426},[],[2428],{"type":54,"value":2429},"model",{"type":54,"value":2431}," field on each\nPF) contains a port-count keyword like ",{"type":48,"tag":73,"props":2433,"children":2435},{"className":2434},[],[2436],{"type":54,"value":2437},"2-port",{"type":54,"value":2439},"\u002F",{"type":48,"tag":73,"props":2441,"children":2443},{"className":2442},[],[2444],{"type":54,"value":2445},"Dual-port",{"type":54,"value":2447},", each port is kept as\nits own rail. Single-port (",{"type":48,"tag":73,"props":2449,"children":2451},{"className":2450},[],[2452],{"type":54,"value":2453},"1P",{"type":54,"value":2455},") and multi-plane models (no port-count keyword)\ncollapse. An empty\u002Funreadable model collapses by default.",{"type":48,"tag":61,"props":2457,"children":2458},{},[2459,2460,2466],{"type":54,"value":2228},{"type":48,"tag":73,"props":2461,"children":2463},{"className":2462},[],[2464],{"type":54,"value":2465},"--collapse-nic-rails=false",{"type":54,"value":2467}," to restore the legacy one-rail-per-PF behaviour\n(handy on dev setups). Note: a collapsed group no longer has the same PF count as\na full-PF topology preset, so such presets won't apply by exact match and the\nlive (collapsed) classification is kept (a preset-deviation warning is emitted).",{"type":48,"tag":237,"props":2469,"children":2471},{"id":2470},"see-also",[2472],{"type":54,"value":2473},"See Also",{"type":48,"tag":100,"props":2475,"children":2476},{},[2477,2487,2498],{"type":48,"tag":104,"props":2478,"children":2479},{},[2480,2485],{"type":48,"tag":2481,"props":2482,"children":2483},"a",{"href":78},[2484],{"type":54,"value":43},{"type":54,"value":2486}," — Global flags and output modes",{"type":48,"tag":104,"props":2488,"children":2489},{},[2490,2496],{"type":48,"tag":2481,"props":2491,"children":2493},{"href":2492},"..\u002Fk8s-launch-kit-config\u002FSKILL.md",[2494],{"type":54,"value":2495},"k8s-launch-kit-config",{"type":54,"value":2497}," — Understand the config file discovery produces",{"type":48,"tag":104,"props":2499,"children":2500},{},[2501,2506],{"type":48,"tag":2481,"props":2502,"children":2504},{"href":2503},"..\u002Fk8s-launch-kit-generate\u002FSKILL.md",[2505],{"type":54,"value":2341},{"type":54,"value":2507}," — Generate manifests from cluster config",{"type":48,"tag":2509,"props":2510,"children":2511},"style",{},[2512],{"type":54,"value":2513},"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":2515,"total":1173},[2516,2530,2541,2549,2561,2573,2587],{"slug":2495,"name":2495,"fn":2517,"description":2518,"org":2519,"tags":2520,"stars":26,"repoUrl":27,"updatedAt":2529},"configure k8s-launch-kit clusters","Use this skill when the user needs help understanding, creating, or editing a k8s-launch-kit (l8k) configuration file (l8k-config.yaml or cluster-config.yaml). Activate for: config file questions, parameter tuning, subnet configuration, NV-IPAM setup, DOCA driver settings, maintenance concurrency, NIC configuration operator settings, changing MTU, VFs, resource names, or understanding what any config field does.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2521,2524,2527,2528],{"name":2522,"slug":2523,"type":15},"Configuration","configuration",{"name":2525,"slug":2526,"type":15},"Deployment","deployment",{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:29:15.229216",{"slug":2531,"name":2531,"fn":2532,"description":2533,"org":2534,"tags":2535,"stars":26,"repoUrl":27,"updatedAt":2540},"k8s-launch-kit-deploy","deploy NVIDIA networking manifests to Kubernetes","Use this skill when the user wants to deploy generated NVIDIA networking manifests to a Kubernetes cluster using k8s-launch-kit (l8k). Activate for: applying manifests, deploying to cluster, the `l8k deploy` subcommand or the legacy --deploy flag on `l8k generate`, applying generated files, or any mention of pushing l8k output to a live cluster. Even if the user just says 'apply these' or 'push to cluster' after generating manifests, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2536,2537,2538,2539],{"name":2525,"slug":2526,"type":15},{"name":24,"slug":25,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},"2026-07-14T05:31:50.114923",{"slug":4,"name":4,"fn":5,"description":6,"org":2542,"tags":2543,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2544,2545,2546,2547,2548],{"name":20,"slug":21,"type":15},{"name":24,"slug":25,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":2550,"name":2550,"fn":2551,"description":2552,"org":2553,"tags":2554,"stars":26,"repoUrl":27,"updatedAt":2560},"k8s-launch-kit-dryrun","preview NVIDIA networking deployment changes","Use this skill when the user wants to preview what k8s-launch-kit (l8k) would deploy without making changes, or wants to safely validate their configuration before applying. Activate for: dry-run, preview, validation, 'what would happen if', testing configurations, schema discovery, checking generated manifests, or any cautious pre-deployment step. Also use when the user asks 'is my config valid' or 'show me what would be created' -- even without mentioning dry-run explicitly.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2555,2556,2557,2558,2559],{"name":2522,"slug":2523,"type":15},{"name":2525,"slug":2526,"type":15},{"name":24,"slug":25,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},"2026-07-14T05:31:56.325698",{"slug":2341,"name":2341,"fn":2562,"description":2563,"org":2564,"tags":2565,"stars":26,"repoUrl":27,"updatedAt":2572},"generate Kubernetes manifests for NVIDIA networking","Use this skill when the user wants to generate Kubernetes YAML manifests for NVIDIA networking deployment using k8s-launch-kit (l8k). Activate for: manifest generation, profile selection, choosing between SR-IOV\u002Fhost-device\u002FRDMA-shared\u002FIPoIB\u002FMacVLAN\u002FSpectrum-X, creating deployment files, or when the user asks 'which profile should I use' or needs help choosing a network configuration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2566,2567,2568,2569,2570],{"name":2525,"slug":2526,"type":15},{"name":24,"slug":25,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},{"name":2571,"slug":1516,"type":15},"YAML","2026-07-14T05:31:51.352013",{"slug":2574,"name":2574,"fn":2575,"description":2576,"org":2577,"tags":2578,"stars":26,"repoUrl":27,"updatedAt":2586},"k8s-launch-kit-pipeline","run end-to-end NVIDIA networking deployment pipelines","Use this skill when the user wants to run the full k8s-launch-kit (l8k) pipeline end-to-end: discover cluster hardware, select a profile, generate manifests, and deploy them all in one command. Also activate for CI\u002FCD integration, automation pipelines, 'one-liner', 'complete workflow', or end-to-end NVIDIA networking deployment.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2579,2582,2583,2584,2585],{"name":2580,"slug":2581,"type":15},"Automation","automation",{"name":2525,"slug":2526,"type":15},{"name":24,"slug":25,"type":15},{"name":17,"slug":18,"type":15},{"name":9,"slug":8,"type":15},"2026-07-14T05:31:55.07782",{"slug":43,"name":43,"fn":2588,"description":2589,"org":2590,"tags":2591,"stars":26,"repoUrl":27,"updatedAt":2600},"manage NVIDIA k8s-launch-kit CLI patterns","k8s-launch-kit (l8k) CLI: Shared patterns for binary location, global flags, output formatting, exit codes, and error handling. Read this before using any other k8s-launch-kit skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[2592,2595,2598,2599],{"name":2593,"slug":2594,"type":15},"CLI","cli",{"name":2596,"slug":2597,"type":15},"Engineering","engineering",{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},"2026-07-14T05:32:01.309487",{"items":2602,"total":2757},[2603,2621,2637,2648,2660,2674,2687,2701,2714,2725,2739,2748],{"slug":2604,"name":2604,"fn":2605,"description":2606,"org":2607,"tags":2608,"stars":2618,"repoUrl":2619,"updatedAt":2620},"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},[2609,2612,2615],{"name":2610,"slug":2611,"type":15},"Documentation","documentation",{"name":2613,"slug":2614,"type":15},"MCP","mcp",{"name":2616,"slug":2617,"type":15},"Search","search",21777,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FNemoClaw","2026-07-20T06:00:01.461044",{"slug":2622,"name":2622,"fn":2623,"description":2624,"org":2625,"tags":2626,"stars":2634,"repoUrl":2635,"updatedAt":2636},"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},[2627,2630,2631],{"name":2628,"slug":2629,"type":15},"Containers","containers",{"name":2525,"slug":2526,"type":15},{"name":2632,"slug":2633,"type":15},"Python","python",17049,"https:\u002F\u002Fgithub.com\u002FNVIDIA\u002FMegatron-LM","2026-07-27T06:06:11.249662",{"slug":2638,"name":2638,"fn":2639,"description":2640,"org":2641,"tags":2642,"stars":2634,"repoUrl":2635,"updatedAt":2647},"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},[2643,2646],{"name":2644,"slug":2645,"type":15},"CI\u002FCD","ci-cd",{"name":2525,"slug":2526,"type":15},"2026-07-14T05:25:59.97109",{"slug":2649,"name":2649,"fn":2650,"description":2651,"org":2652,"tags":2653,"stars":2634,"repoUrl":2635,"updatedAt":2659},"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},[2654,2655,2656],{"name":2644,"slug":2645,"type":15},{"name":2525,"slug":2526,"type":15},{"name":2657,"slug":2658,"type":15},"GitHub","github","2026-07-27T06:06:12.278222",{"slug":2661,"name":2661,"fn":2662,"description":2663,"org":2664,"tags":2665,"stars":2634,"repoUrl":2635,"updatedAt":2673},"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},[2666,2669,2670],{"name":2667,"slug":2668,"type":15},"Debugging","debugging",{"name":2657,"slug":2658,"type":15},{"name":2671,"slug":2672,"type":15},"Triage","triage","2026-07-14T05:25:57.442089",{"slug":2675,"name":2675,"fn":2676,"description":2677,"org":2678,"tags":2679,"stars":2634,"repoUrl":2635,"updatedAt":2686},"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},[2680,2683],{"name":2681,"slug":2682,"type":15},"Best Practices","best-practices",{"name":2684,"slug":2685,"type":15},"Code Analysis","code-analysis","2026-07-14T05:25:56.18433",{"slug":2688,"name":2688,"fn":2689,"description":2690,"org":2691,"tags":2692,"stars":2634,"repoUrl":2635,"updatedAt":2700},"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},[2693,2696,2699],{"name":2694,"slug":2695,"type":15},"Machine Learning","machine-learning",{"name":2697,"slug":2698,"type":15},"Migration","migration",{"name":9,"slug":8,"type":15},"2026-07-17T06:07:11.777011",{"slug":2702,"name":2702,"fn":2703,"description":2704,"org":2705,"tags":2706,"stars":2634,"repoUrl":2635,"updatedAt":2713},"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},[2707,2710],{"name":2708,"slug":2709,"type":15},"QA","qa",{"name":2711,"slug":2712,"type":15},"Testing","testing","2026-07-14T05:25:53.673039",{"slug":2715,"name":2715,"fn":2716,"description":2717,"org":2718,"tags":2719,"stars":2634,"repoUrl":2635,"updatedAt":2724},"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},[2720,2721],{"name":2525,"slug":2526,"type":15},{"name":2722,"slug":2723,"type":15},"Infrastructure","infrastructure","2026-07-14T05:25:49.362534",{"slug":2726,"name":2726,"fn":2727,"description":2728,"org":2729,"tags":2730,"stars":2634,"repoUrl":2635,"updatedAt":2738},"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},[2731,2734,2735],{"name":2732,"slug":2733,"type":15},"Code Review","code-review",{"name":2657,"slug":2658,"type":15},{"name":2736,"slug":2737,"type":15},"Pull Requests","pull-requests","2026-07-14T05:26:01.226578",{"slug":2740,"name":2740,"fn":2741,"description":2742,"org":2743,"tags":2744,"stars":2634,"repoUrl":2635,"updatedAt":2747},"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},[2745,2746],{"name":2708,"slug":2709,"type":15},{"name":2711,"slug":2712,"type":15},"2026-07-14T05:25:54.928983",{"slug":2749,"name":2749,"fn":2750,"description":2751,"org":2752,"tags":2753,"stars":2634,"repoUrl":2635,"updatedAt":2756},"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},[2754,2755],{"name":2580,"slug":2581,"type":15},{"name":2644,"slug":2645,"type":15},"2026-07-30T05:29:03.275638",496]