PageSourceSearch

https://www.civo.com/docs/assets/js/8caf5834.6b2f845c.js

js civo.com collected 2026-09-24 18:18:43 UTC 20,589 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkcivo_documentation=self.webpackChunkcivo_documentation||[]).push([[3355],{319:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>a,metadata:()=>r,toc:()=>d});const r=JSON.parse('{"id":"kubernetes/advanced/gpu-config","title":"GPU Clusters on Civo Kubernetes","description":"Learn which GPU types are supported on Civo Kubernetes, how to install the NVIDIA GPU Operator with the right settings for Civo\'s image, and the extra step needed for single-GPU H100 nodes.","source":"@site/content/docs/kubernetes/advanced/gpu-config.md","sourceDirName":"kubernetes/advanced","slug":"/kubernetes/advanced/gpu-config","permalink":"/docs/kubernetes/advanced/gpu-config","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedAt":null,"frontMatter":{"title":"GPU Clusters on Civo Kubernetes","description":"Learn which GPU types are supported on Civo Kubernetes, how to install the NVIDIA GPU Operator with the right settings for Civo\'s image, and the extra step needed for single-GPU H100 nodes."},"sidebar":"mainSidebar","previous":{"title":"Advanced Kubernetes Configurations","permalink":"/docs/kubernetes/advanced"},"next":{"title":"Managing a Kubernetes cluster\'s node pools","permalink":"/docs/kubernetes/advanced/managing-node-pools"}}');var s=t(4848),i=t(8453);t(1470),t(9365);const a={title:"GPU Clusters on Civo Kubernetes",description:"Learn which GPU types are supported on Civo Kubernetes, how to install the NVIDIA GPU Operator with the right settings for Civo's image, and the extra step needed for single-GPU H100 nodes."},o=void 0,l={},d=[{value:"Overview",id:"overview",level:2},{value:"GPU Types",id:"gpu-types",level:2},{value:"Installing the NVIDIA GPU Operator",id:"installing-the-nvidia-gpu-operator",level:2},{value:"Before you start",id:"before-you-start",level:3},{value:"Install the Operator",id:"install-the-operator",level:3},{value:"Single-GPU H100 nodes: NVLink workaround",id:"single-gpu-h100-nodes-nvlink-workaround",level:3},{value:"Verify the installation",id:"verify-the-installation",level:3},{value:"Troubleshooting",id:"troubleshooting",level:2}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",h3:"h3",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.R)(),...e.components},{Head:r}=n;return r||function(e,n){throw new Error("Expected "+(n?"component":"object")+" `"+e+"` to be defined: you likely forgot to import, pass, or provide it.")}("Head",!0),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(r,{children:(0,s.jsx)("title",{children:"Creating a GPU Cluster | Civo Documentation"})}),"\n",(0,s.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,s.jsx)(n.p,{children:"GPU workloads on Kubernetes power everything from large-language-model training to real-time inference and 3D rendering. Civo Kubernetes lets you add GPU node pools to a cluster and run those workloads with the standard NVIDIA tooling."}),"\n",(0,s.jsx)(n.p,{children:"This page covers:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The GPU types Civo offers"}),"\n",(0,s.jsx)(n.li,{children:"How to install the NVIDIA GPU Operator on a Civo Kubernetes cluster"}),"\n",(0,s.jsxs)(n.li,{children:["The extra step required for ",(0,s.jsx)(n.strong,{children:"single-GPU H100 nodes"})]}),"\n",(0,s.jsx)(n.li,{children:"Verification and troubleshooting"}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"gpu-types",children:"GPU Types"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.strong,{children:"Civo provides the following GPU types:"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"NVIDIA A100 Tensor Core GPU"})," \u2014 available in 40 GB and 80 GB variants. Well suited to model training, LLMs, and scientific computing; delivers over 312 TFLOPS of FP16 performance across 1,248 Tensor cores."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"NVIDIA H100 Tensor Core GPU"})," \u2014 Hopper-generation GPU built for AI training and inference, ideal for large models such as chatbots and recommendation engines. Single-GPU H100 nodes need one extra install step \u2014 see ",(0,s.jsx)(n.a,{href:"#single-gpu-h100-nodes-nvlink-workaround",children:"Single-GPU H100 nodes: NVLink workaround"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"NVIDIA L40S GPU"})," \u2014 48 GB of GDDR6 memory. A good fit for mixed AI + graphics workloads such as 3D rendering and LLM training."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"NVIDIA B200 Tensor Core GPU"})," \u2014 Blackwell-generation GPU for the most demanding training and inference workloads. Runs with the standard install shown below."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"NVIDIA GH200 Grace Hopper Superchip"})," \u2014 integrated CPU + GPU package tailored for generative AI, large-scale inference, and HPC workloads."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["To use GPUs on Kubernetes, ",(0,s.jsx)(n.a,{href:"/docs/kubernetes/advanced/managing-node-pools",children:"add a GPU node pool to your cluster"}),", then install the NVIDIA GPU Operator as described below."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"GPU nodes use a separate instance SKU from standard Kubernetes nodes. Pricing and availability are shown in the Civo Dashboard when you add a node pool."})}),"\n",(0,s.jsx)(n.h2,{id:"installing-the-nvidia-gpu-operator",children:"Installing the NVIDIA GPU Operator"}),"\n",(0,s.jsx)(n.p,{children:"The NVIDIA GPU Operator installs and manages the GPU driver, the device plugin, and GPU Feature Discovery. You install it once per cluster \u2014 after that, any GPU node pool you add is detected automatically."}),"\n",(0,s.jsx)(n.h3,{id:"before-you-start",children:"Before you start"}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:"A Civo Kubernetes cluster with a GPU node pool."})," If you don't have one yet, follow ",(0,s.jsx)(n.a,{href:"/docs/kubernetes/create-a-cluster",children:"Creating a Kubernetes cluster"})," and add a GPU node pool."]}
1),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsxs)(n.strong,{children:["The cluster's ",(0,s.jsx)(n.code,{children:"kubeconfig"})]}),", downloaded from the Civo Dashboard and set as your current context."]}),"\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.strong,{children:(0,s.jsx)(n.a,{href:"https://helm.sh/docs/intro/install/",children:"Helm"})})," installed on the machine you're running the install from."]}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Confirm ",(0,s.jsx)(n.code,{children:"kubectl"})," is pointed at the right cluster:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"kubectl get nodes\n"})}),"\n",(0,s.jsx)(n.p,{children:"You should see your cluster's nodes, including the GPU worker(s)."}),"\n",(0,s.jsx)(n.h3,{id:"install-the-operator",children:"Install the Operator"}),"\n",(0,s.jsxs)(n.p,{children:["Civo's GPU images ship with the NVIDIA container toolkit already installed, so the Operator should ",(0,s.jsx)(n.strong,{children:"not"})," re-install it. Use the command below \u2014 the flags match how Civo's GPU images are built."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["The flags and workarounds on this page have been validated against ",(0,s.jsx)(n.strong,{children:"NVIDIA GPU Operator chart v25.10.1"})," (app version v25.10.1). Newer chart versions should work with the same flags, but this is the version Civo has tested end-to-end. You can pin to it with ",(0,s.jsx)(n.code,{children:"--version 25.10.1"})," on the ",(0,s.jsx)(n.code,{children:"helm upgrade --install"})," command."]})}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"helm repo add nvidia https://helm.ngc.nvidia.com/nvidia\nhelm repo update\n\nhelm upgrade --install gpu-operator \\\n  -n gpu-operator --create-namespace \\\n  nvidia/gpu-operator \\\n  --set driver.enabled=true \\\n  --set toolkit.enabled=false \\\n  --set devicePlugin.enabled=true \\\n  --set gfd.enabled=true \\\n  --set operator.defaultRuntime=containerd \\\n  --set validator.cuda.runtimeClassName=nvidia\n"})}),"\n",(0,s.jsx)(n.p,{children:"What each flag does:"}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Flag"}),(0,s.jsx)(n.th,{children:"Purpose"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"driver.enabled=true"})}),(0,s.jsx)(n.td,{children:"Let the Operator install the matching NVIDIA driver on the GPU node."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"toolkit.enabled=false"})}),(0,s.jsx)(n.td,{children:"Skip container-toolkit install \u2014 it's already baked into the Civo image."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"devicePlugin.enabled=true"})}),(0,s.jsxs)(n.td,{children:["Expose GPUs to Kubernetes as schedulable resources (",(0,s.jsx)(n.code,{children:"nvidia.com/gpu"}),")."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"gfd.enabled=true"})}),(0,s.jsx)(n.td,{children:"Run GPU Feature Discovery so nodes are labelled with their GPU model and capabilities."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"operator.defaultRuntime=containerd"})}),(0,s.jsxs)(n.td,{children:["Use the ",(0,s.jsx)(n.code,{children:"containerd"})," runtime that Civo Kubernetes ships with."]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"validator.cuda.runtimeClassName=nvidia"})}),(0,s.jsxs)(n.td,{children:["Run the Operator's CUDA validator with the ",(0,s.jsx)(n.code,{children:"nvidia"})," runtime class."]})]})]})]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"You do not need to upgrade the Operator manually \u2014 it tracks newer driver versions and reconciles the node automatically."})}),"\n",(0,s.jsx)(n.h3,{id:"single-gpu-h100-nodes-nvlink-workaround",children:"Single-GPU H100 nodes: NVLink workaround"}),"\n",(0,s.jsxs)(n.p,{children:["On a node with ",(0,s.jsx)(n.strong,{children:"only one H100"}),", the NVIDIA driver tries to bring up NVLink at load time, fails (because there is no peer GPU to link with), and the driver never becomes ready. The fix is to disable NVLink in a small kernel-module config and pass it to the Operator at install time."]}),"\n",(0,s.jsxs)(n.p,{children:["Apply this ",(0,s.jsx)(n.strong,{children:"in addition to"})," the standard install above \u2014 it only affects driver loading, nothing else."]}),"\n",(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Create a ConfigMap in the ",(0,s.jsx)(n.code,{children:"gpu-operator"})," namespace that disables NVLink:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"kubectl create namespace gpu-operator --dry-run=client -o yaml | kubectl apply -f -\n\nkubectl -n gpu-operator create configmap nvidia-kernel-config \\\n  --from-literal=nvidia.c
1onf='options nvidia NVreg_NvLinkDisable=1' \\\n  --dry-run=client -o yaml | kubectl apply -f -\n"})}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Install (or re-install) the Operator, adding ",(0,s.jsx)(n.code,{children:"driver.kernelModuleConfig.name=nvidia-kernel-config"})," to the command from the previous section:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"helm upgrade --install gpu-operator \\\n  -n gpu-operator --create-namespace \\\n  nvidia/gpu-operator \\\n  --set driver.enabled=true \\\n  --set driver.kernelModuleConfig.name=nvidia-kernel-config \\\n  --set toolkit.enabled=false \\\n  --set devicePlugin.enabled=true \\\n  --set gfd.enabled=true \\\n  --set operator.defaultRuntime=containerd \\\n  --set validator.cuda.runtimeClassName=nvidia\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.admonition,{type:"warning",children:(0,s.jsxs)(n.p,{children:["Only apply this workaround on ",(0,s.jsx)(n.strong,{children:"single-H100 nodes"}),". On multi-H100 nodes the GPUs use NVLink to talk to each other \u2014 disabling it will reduce peer-to-peer bandwidth between GPUs."]})}),"\n",(0,s.jsx)(n.h3,{id:"verify-the-installation",children:"Verify the installation"}),"\n",(0,s.jsx)(n.p,{children:"Check that the Operator pods are running:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"kubectl -n gpu-operator get pods\n"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"List GPU Operator pods in Kubernetes",src:t(8064).A+"",width:"2164",height:"300"})}),"\n",(0,s.jsxs)(n.p,{children:["Then confirm the GPU node has been labelled with its GPU model and ",(0,s.jsx)(n.code,{children:"nvidia.com/gpu.present=true"}),":"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"kubectl describe node <your-gpu-node>\n"})}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.img,{alt:"NVIDIA GPU node labels in Kubernetes",src:t(6488).A+"",width:"2151",height:"966"})}),"\n",(0,s.jsxs)(n.p,{children:["Your cluster can now schedule pods that request ",(0,s.jsx)(n.code,{children:"nvidia.com/gpu"})," resources."]}),"\n",(0,s.jsx)(n.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"A Helm install timed out."})," Re-run the same ",(0,s.jsx)(n.code,{children:"helm upgrade --install \u2026"})," command \u2014 it is idempotent. If you prefer a one-liner that re-runs whichever release is already installed:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"export HELM_RELEASE_NAME=$(helm list -n gpu-operator -q)\nhelm upgrade $HELM_RELEASE_NAME nvidia/gpu-operator -n gpu-operator\n"})}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsxs)(n.strong,{children:["Driver pod on an H100 node is stuck in ",(0,s.jsx)(n.code,{children:"CrashLoopBackOff"})," or ",(0,s.jsx)(n.code,{children:"Init:Error"}),"."]})," This is the NVLink issue described above. Follow ",(0,s.jsx)(n.a,{href:"#single-gpu-h100-nodes-nvlink-workaround",children:"Single-GPU H100 nodes: NVLink workaround"}),", then run ",(0,s.jsx)(n.code,{children:"kubectl -n gpu-operator rollout restart daemonset/nvidia-driver-daemonset"})," to pick up the new config."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsxs)(n.strong,{children:["Pods that request ",(0,s.jsx)(n.code,{children:"nvidia.com/gpu"})," stay ",(0,s.jsx)(n.code,{children:"Pending"}),"."]})," Confirm the node has the label ",(0,s.jsx)(n.code,{children:"nvidia.com/gpu.present=true"})," and that GPU Feature Discovery is running (",(0,s.jsx)(n.code,{children:"kubectl -n gpu-operator get pods -l app=gpu-feature-discovery"}),"). If the labels are missing, the Operator hasn't finished provisioning the node yet \u2014 give it another minute or inspect the driver pod logs."]})]})}function u(e={}){const{wrapper:n}={...(0,i.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},1470:(e,n,t)=>{t.d(n,{A:()=>y});var r=t(6540),s=t(8215),i=t(7559),a=t(3104),o=t(6347),l=t(205),d=t(7485),c=t(1682),u=t(9466);function h(e){return r.Children.toArray(e).filter((e=>"\n"!==e)).map((e=>{if(!e||(0,r.isValidElement)(e)&&function(e){const{props:n}=e;return!!n&&"object"==typeof n&&"value"in n}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs>
1 child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)}))?.filter(Boolean)??[]}function p(e){const{values:n,children:t}=e;return(0,r.useMemo)((()=>{const e=n??function(e){return h(e).map((({props:{value:e,label:n,attributes:t,default:r}})=>({value:e,label:n,attributes:t,default:r})))}(t);return function(e){const n=(0,c.XI)(e,((e,n)=>e.value===n.value));if(n.length>0)throw new Error(`Docusaurus error: Duplicate values "${n.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[n,t])}function g({value:e,tabValues:n}){return n.some((n=>n.value===e))}function v({queryString:e=!1,groupId:n}){const t=(0,o.W6)(),s=function({queryString:e=!1,groupId:n}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:e,groupId:n});return[(0,d.aZ)(s),(0,r.useCallback)((e=>{if(!s)return;const n=new URLSearchParams(t.location.search);n.set(s,e),t.replace({...t.location,search:n.toString()})}),[s,t])]}function m(e){const{defaultValue:n,queryString:t=!1,groupId:s}=e,i=p(e),[a,o]=(0,r.useState)((()=>function({defaultValue:e,tabValues:n}){if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!g({value:e,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const t=n.find((e=>e.default))??n[0];if(!t)throw new Error("Unexpected error: 0 tabValues");return t.value}({defaultValue:n,tabValues:i}))),[d,c]=v({queryString:t,groupId:s}),[h,m]=function({groupId:e}){const n=function(e){return e?`docusaurus.tab.${e}`:null}(e),[t,s]=(0,u.Dv)(n);return[t,(0,r.useCallback)((e=>{n&&s.set(e)}),[n,s])]}({groupId:s}),b=(()=>{const e=d??h;return g({value:e,tabValues:i})?e:null})();(0,l.A)((()=>{b&&o(b)}),[b]);return{selectedValue:a,selectValue:(0,r.useCallback)((e=>{if(!g({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);o(e),c(e),m(e)}),[c,m,i]),tabValues:i}}var b=t(2303);const x={tabList:"tabList__CuJ",tabItem:"tabItem_LNqP"};var f=t(4848);function j({className:e,block:n,selectedValue:t,selectValue:r,tabValues:i}){const o=[],{blockElementScrollPositionUntilNextRender:l}=(0,a.a_)(),d=e=>{const n=e.currentTarget,s=o.indexOf(n),a=i[s].value;a!==t&&(l(n),r(a))},c=e=>{let n=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const t=o.indexOf(e.currentTarget)+1;n=o[t]??o[0];break}case"ArrowLeft":{const t=o.indexOf(e.currentTarget)-1;n=o[t]??o[o.length-1];break}}n?.focus()};return(0,f.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,s.A)("tabs",{"tabs--block":n},e),children:i.map((({value:e,label:n,attributes:r})=>(0,f.jsx)("li",{role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>{o.push(e)},onKeyDown:c,onClick:d,...r,className:(0,s.A)("tabs__item",x.tabItem,r?.className,{"tabs__item--active":t===e}),children:n??e},e)))})}function k({lazy:e,children:n,selectedValue:t}){const i=(Array.isArray(n)?n:[n]).filter(Boolean);if(e){const e=i.find((e=>e.props.value===t));return e?(0,r.cloneElement)(e,{className:(0,s.A)("margin-top--md",e.props.className)}):null}return(0,f.jsx)("div",{className:"margin-top--md",children:i.map(((e,n)=>(0,r.cloneElement)(e,{key:n,hidden:e.props.value!==t})))})}function w(e){const n=m(e);return(0,f.jsxs)("div",{className:(0,s.A)(i.G.tabs.container,"tabs-container",x.tabList),children:[(0,f.jsx)(j,{...n,...e}),(0,f.jsx)(k,{...n,...e})]})}function y(e){const n=(0,b.A)();return(0,f.jsx)(w,{...e,children:h(e.children)},String(n))}},6488:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/k8s-gpu-node-label-bd943eed7c9a90c5d0a86af17a6b6d9b.png"},8064:(e,n,t)=>{t.d(n,{A:()=>r});const r=t.p+"assets/images/kubectl-list-gpu-operator-831ad987ef3278e812b10891a24fa106.png"},8453:(e,n,t)=>{t.d(n,{R:()=>a,x:()=>o});var r=t(6540);const s={},i=r.createContext(s);function a(e){const n=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),r.createElement(i.Provider,{value:n},e.children)}},9365:(e,n,t)=>{t.d(n,{A:()=>a});t(6540);var r=t(8215);const s={tabItem:"tabItem_Ymn6"};var i=t(4848);function a({children:e,hidden:n,className:t}){return(0,i.jsx)("div",{role:"tabpanel",className:(0,r.A)(s.tabItem,t),hidden:n,children:e})}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.