[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-together-ai-together-volcano":3,"mdc-r139o2-key":37,"related-org-together-ai-together-volcano":1609,"related-repo-together-ai-together-volcano":1790},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"together-volcano","schedule batch GPU jobs with Volcano","Install and use the Volcano batch scheduler on a Together AI Kubernetes GPU cluster for gang scheduling. Covers installing Volcano, creating queues, submitting all-or-nothing gang-scheduled jobs (vcjobs), and verifying placement. Reach for it when a job on a Together cluster needs its pods scheduled all-at-once or not at all, such as distributed multi-node training, rather than per-pod best-effort scheduling. Pins Volcano v1.15.0.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"together-ai","Together AI","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Ftogether-ai.jpg","togethercomputer",[13,17,20,23],{"name":14,"slug":15,"type":16},"Scaling","scaling","tag",{"name":18,"slug":19,"type":16},"Engineering","engineering",{"name":21,"slug":22,"type":16},"AI Infrastructure","ai-infrastructure",{"name":24,"slug":25,"type":16},"Kubernetes","kubernetes",31,"https:\u002F\u002Fgithub.com\u002Ftogethercomputer\u002Fskills","2026-07-17T06:06:12.859718",null,4,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Skills to help your coding agents use Together AI products.","https:\u002F\u002Fgithub.com\u002Ftogethercomputer\u002Fskills\u002Ftree\u002FHEAD\u002Fskills\u002Ftogether-volcano","---\nname: together-volcano\ndescription: Install and use the Volcano batch scheduler on a Together AI Kubernetes GPU cluster for gang scheduling. Covers installing Volcano, creating queues, submitting all-or-nothing gang-scheduled jobs (vcjobs), and verifying placement. Reach for it when a job on a Together cluster needs its pods scheduled all-at-once or not at all, such as distributed multi-node training, rather than per-pod best-effort scheduling. Pins Volcano v1.15.0.\n---\n\n# Volcano on Together GPU clusters\n\nVolcano is a Kubernetes-native batch scheduler. Its key property is gang scheduling: a group of pods is placed all-at-once or not at all, so distributed training never starts with only some workers running. Use it when a job needs N pods to run together or not at all.\n\nPublic cookbook: https:\u002F\u002Fdocs.together.ai\u002Fdocs\u002Fvolcano-on-gpu-clusters. Pair this skill with the `together-gpu-clusters` skill, which covers creating the cluster and configuring `kubectl`.\n\n## Preconditions\n\n- A Together Kubernetes GPU cluster in the `Ready` state, with `kubectl` pointed at it (`tg beta clusters get-credentials \u003Ccluster_id> --set-default-context`).\n- GPU nodes expose `nvidia.com\u002Fgpu`; the NVIDIA device plugin is preinstalled on Together clusters. Confirm with:\n\n```bash\nkubectl get nodes -o custom-columns='NODE:.metadata.name,GPU:.status.allocatable.nvidia\\.com\u002Fgpu'\n```\n\n## Install\n\nPin the version. Do not use `master`.\n\n```bash\nkubectl apply -f https:\u002F\u002Fraw.githubusercontent.com\u002Fvolcano-sh\u002Fvolcano\u002Fv1.15.0\u002Finstaller\u002Fvolcano-development.yaml\nkubectl -n volcano-system wait --for=condition=Available deployment --all --timeout=180s\n```\n\nA `default` queue is created automatically (`kubectl get queue`). Helm is an alternative: `helm repo add volcano-sh https:\u002F\u002Fvolcano-sh.github.io\u002Fhelm-charts && helm install volcano volcano-sh\u002Fvolcano -n volcano-system --create-namespace`.\n\n## Create a queue\n\nA queue caps and weights the resources a set of jobs can use.\n\n```yaml\napiVersion: scheduling.volcano.sh\u002Fv1beta1\nkind: Queue\nmetadata:\n  name: research\nspec:\n  reclaimable: true          # give idle capacity back to other queues\n  weight: 1                  # relative share under contention\n  capability:                # hard ceiling for this queue\n    nvidia.com\u002Fgpu: 8\n```\n\n## Attach shared storage (optional)\n\nTogether provisions a static PersistentVolume named after the cluster's shared volume. Bind a `ReadWriteMany` PVC to it so every worker shares datasets and checkpoints, then mount it in the job (below).\n\n```yaml\napiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: shared-pvc\nspec:\n  accessModes: [\"ReadWriteMany\"]\n  storageClassName: shared-wekafs   # Together default shared storage class\n  volumeName: \u003Cshared-volume-name>  # the static PV named after your shared volume\n  resources:\n    requests:\n      storage: 100Gi\n```\n\n## Run a gang-scheduled job\n\nThe gang guarantee comes from `minAvailable` on a Volcano `Job` (`vcjob`). Set `schedulerName: volcano` and a `queue`. The `volumes`\u002F`volumeMounts` blocks are optional; drop them if the job needs no shared storage.\n\n```yaml\napiVersion: batch.volcano.sh\u002Fv1alpha1\nkind: Job\nmetadata:\n  name: gpu-gang\nspec:\n  minAvailable: 4            # schedule all 4 pods together or none\n  schedulerName: volcano\n  queue: research\n  policies:\n    - event: PodEvicted\n      action: RestartJob     # restart the whole gang if a pod is evicted\n  tasks:\n    - replicas: 4\n      name: worker\n      template:\n        spec:\n          restartPolicy: OnFailure\n          containers:\n            - name: worker\n              image: nvidia\u002Fcuda:12.4.0-base-ubuntu22.04\n              command: [\"bash\", \"-c\", \"nvidia-smi -L; sleep 300\"]\n              resources:\n                limits:\n                  nvidia.com\u002Fgpu: 2   # 4 x 2 = 8 GPUs\n              volumeMounts:\n                - name: shared\n                  mountPath: \u002Fmnt\u002Fshared\n          volumes:\n            - name: shared\n              persistentVolumeClaim:\n                claimName: shared-pvc\n```\n\n## Verify\n\n- `kubectl get vcjob \u003Cname>` should show `STATUS Running` and `RUNNINGS` equal to `minAvailable`.\n- `kubectl get podgroup` shows the gang; a `Running` phase means the whole group is placed.\n- A gang that cannot fit stays `Inqueue` with **zero** pods running (all-or-nothing). This is the signal Volcano is working, not a failure. Never \"fix\" it by lowering `minAvailable` below the job's real parallelism.\n\n## Rules and gotchas\n\n- Always pin the Volcano version in the install URL.\n- `schedulerName: volcano` must be on the pod template (on a `vcjob` it goes under `spec`). Without it, the default scheduler grabs the pods and there is no gang guarantee.\n- A job whose total request exceeds the queue's `capability` is rejected. Raise the cap or split the job.\n- To gang-schedule non-vcjob workloads (for example MPIJobs from the preinstalled MPI Operator), set `schedulerName: volcano` and attach a `PodGroup`. See https:\u002F\u002Fvolcano.sh\u002Fen\u002Fdocs\u002Fpodgroup\u002F.\n- Volcano and Kueue can coexist on one cluster: Volcano owns pods with `schedulerName: volcano`; Kueue admits jobs on the default scheduler. Pick one per workload; do not point a single job at both.\n\n## Reference\n\n- Volcano docs: https:\u002F\u002Fvolcano.sh\u002Fen\u002Fdocs\u002F\n- Installation: https:\u002F\u002Fvolcano.sh\u002Fen\u002Fdocs\u002Finstallation\u002F\n- Gang scheduling: https:\u002F\u002Fvolcano.sh\u002Fen\u002Fdocs\u002Fgang_scheduling\u002F\n- Queue: https:\u002F\u002Fvolcano.sh\u002Fen\u002Fdocs\u002Fqueue\u002F\n- vcjob: https:\u002F\u002Fvolcano.sh\u002Fen\u002Fdocs\u002Fvcjob\u002F\n",{"data":38,"body":39},{"name":4,"description":6},{"type":40,"children":41},"root",[42,51,57,89,96,142,201,207,219,291,319,325,330,504,510,523,722,728,789,1360,1366,1449,1455,1539,1545,1603],{"type":43,"tag":44,"props":45,"children":47},"element","h1",{"id":46},"volcano-on-together-gpu-clusters",[48],{"type":49,"value":50},"text","Volcano on Together GPU clusters",{"type":43,"tag":52,"props":53,"children":54},"p",{},[55],{"type":49,"value":56},"Volcano is a Kubernetes-native batch scheduler. Its key property is gang scheduling: a group of pods is placed all-at-once or not at all, so distributed training never starts with only some workers running. Use it when a job needs N pods to run together or not at all.",{"type":43,"tag":52,"props":58,"children":59},{},[60,62,70,72,79,81,87],{"type":49,"value":61},"Public cookbook: ",{"type":43,"tag":63,"props":64,"children":68},"a",{"href":65,"rel":66},"https:\u002F\u002Fdocs.together.ai\u002Fdocs\u002Fvolcano-on-gpu-clusters",[67],"nofollow",[69],{"type":49,"value":65},{"type":49,"value":71},". Pair this skill with the ",{"type":43,"tag":73,"props":74,"children":76},"code",{"className":75},[],[77],{"type":49,"value":78},"together-gpu-clusters",{"type":49,"value":80}," skill, which covers creating the cluster and configuring ",{"type":43,"tag":73,"props":82,"children":84},{"className":83},[],[85],{"type":49,"value":86},"kubectl",{"type":49,"value":88},".",{"type":43,"tag":90,"props":91,"children":93},"h2",{"id":92},"preconditions",[94],{"type":49,"value":95},"Preconditions",{"type":43,"tag":97,"props":98,"children":99},"ul",{},[100,129],{"type":43,"tag":101,"props":102,"children":103},"li",{},[104,106,112,114,119,121,127],{"type":49,"value":105},"A Together Kubernetes GPU cluster in the ",{"type":43,"tag":73,"props":107,"children":109},{"className":108},[],[110],{"type":49,"value":111},"Ready",{"type":49,"value":113}," state, with ",{"type":43,"tag":73,"props":115,"children":117},{"className":116},[],[118],{"type":49,"value":86},{"type":49,"value":120}," pointed at it (",{"type":43,"tag":73,"props":122,"children":124},{"className":123},[],[125],{"type":49,"value":126},"tg beta clusters get-credentials \u003Ccluster_id> --set-default-context",{"type":49,"value":128},").",{"type":43,"tag":101,"props":130,"children":131},{},[132,134,140],{"type":49,"value":133},"GPU nodes expose ",{"type":43,"tag":73,"props":135,"children":137},{"className":136},[],[138],{"type":49,"value":139},"nvidia.com\u002Fgpu",{"type":49,"value":141},"; the NVIDIA device plugin is preinstalled on Together clusters. Confirm with:",{"type":43,"tag":143,"props":144,"children":149},"pre",{"className":145,"code":146,"language":147,"meta":148,"style":148},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","kubectl get nodes -o custom-columns='NODE:.metadata.name,GPU:.status.allocatable.nvidia\\.com\u002Fgpu'\n","bash","",[150],{"type":43,"tag":73,"props":151,"children":152},{"__ignoreMap":148},[153],{"type":43,"tag":154,"props":155,"children":158},"span",{"class":156,"line":157},"line",1,[159,164,170,175,180,185,191,196],{"type":43,"tag":154,"props":160,"children":162},{"style":161},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[163],{"type":49,"value":86},{"type":43,"tag":154,"props":165,"children":167},{"style":166},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[168],{"type":49,"value":169}," get",{"type":43,"tag":154,"props":171,"children":172},{"style":166},[173],{"type":49,"value":174}," nodes",{"type":43,"tag":154,"props":176,"children":177},{"style":166},[178],{"type":49,"value":179}," -o",{"type":43,"tag":154,"props":181,"children":182},{"style":166},[183],{"type":49,"value":184}," custom-columns=",{"type":43,"tag":154,"props":186,"children":188},{"style":187},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[189],{"type":49,"value":190},"'",{"type":43,"tag":154,"props":192,"children":193},{"style":166},[194],{"type":49,"value":195},"NODE:.metadata.name,GPU:.status.allocatable.nvidia\\.com\u002Fgpu",{"type":43,"tag":154,"props":197,"children":198},{"style":187},[199],{"type":49,"value":200},"'\n",{"type":43,"tag":90,"props":202,"children":204},{"id":203},"install",[205],{"type":49,"value":206},"Install",{"type":43,"tag":52,"props":208,"children":209},{},[210,212,218],{"type":49,"value":211},"Pin the version. Do not use ",{"type":43,"tag":73,"props":213,"children":215},{"className":214},[],[216],{"type":49,"value":217},"master",{"type":49,"value":88},{"type":43,"tag":143,"props":220,"children":222},{"className":145,"code":221,"language":147,"meta":148,"style":148},"kubectl apply -f https:\u002F\u002Fraw.githubusercontent.com\u002Fvolcano-sh\u002Fvolcano\u002Fv1.15.0\u002Finstaller\u002Fvolcano-development.yaml\nkubectl -n volcano-system wait --for=condition=Available deployment --all --timeout=180s\n",[223],{"type":43,"tag":73,"props":224,"children":225},{"__ignoreMap":148},[226,248],{"type":43,"tag":154,"props":227,"children":228},{"class":156,"line":157},[229,233,238,243],{"type":43,"tag":154,"props":230,"children":231},{"style":161},[232],{"type":49,"value":86},{"type":43,"tag":154,"props":234,"children":235},{"style":166},[236],{"type":49,"value":237}," apply",{"type":43,"tag":154,"props":239,"children":240},{"style":166},[241],{"type":49,"value":242}," -f",{"type":43,"tag":154,"props":244,"children":245},{"style":166},[246],{"type":49,"value":247}," https:\u002F\u002Fraw.githubusercontent.com\u002Fvolcano-sh\u002Fvolcano\u002Fv1.15.0\u002Finstaller\u002Fvolcano-development.yaml\n",{"type":43,"tag":154,"props":249,"children":251},{"class":156,"line":250},2,[252,256,261,266,271,276,281,286],{"type":43,"tag":154,"props":253,"children":254},{"style":161},[255],{"type":49,"value":86},{"type":43,"tag":154,"props":257,"children":258},{"style":166},[259],{"type":49,"value":260}," -n",{"type":43,"tag":154,"props":262,"children":263},{"style":166},[264],{"type":49,"value":265}," volcano-system",{"type":43,"tag":154,"props":267,"children":268},{"style":166},[269],{"type":49,"value":270}," wait",{"type":43,"tag":154,"props":272,"children":273},{"style":166},[274],{"type":49,"value":275}," --for=condition=Available",{"type":43,"tag":154,"props":277,"children":278},{"style":166},[279],{"type":49,"value":280}," deployment",{"type":43,"tag":154,"props":282,"children":283},{"style":166},[284],{"type":49,"value":285}," --all",{"type":43,"tag":154,"props":287,"children":288},{"style":166},[289],{"type":49,"value":290}," --timeout=180s\n",{"type":43,"tag":52,"props":292,"children":293},{},[294,296,302,304,310,312,318],{"type":49,"value":295},"A ",{"type":43,"tag":73,"props":297,"children":299},{"className":298},[],[300],{"type":49,"value":301},"default",{"type":49,"value":303}," queue is created automatically (",{"type":43,"tag":73,"props":305,"children":307},{"className":306},[],[308],{"type":49,"value":309},"kubectl get queue",{"type":49,"value":311},"). Helm is an alternative: ",{"type":43,"tag":73,"props":313,"children":315},{"className":314},[],[316],{"type":49,"value":317},"helm repo add volcano-sh https:\u002F\u002Fvolcano-sh.github.io\u002Fhelm-charts && helm install volcano volcano-sh\u002Fvolcano -n volcano-system --create-namespace",{"type":49,"value":88},{"type":43,"tag":90,"props":320,"children":322},{"id":321},"create-a-queue",[323],{"type":49,"value":324},"Create a queue",{"type":43,"tag":52,"props":326,"children":327},{},[328],{"type":49,"value":329},"A queue caps and weights the resources a set of jobs can use.",{"type":43,"tag":143,"props":331,"children":335},{"className":332,"code":333,"language":334,"meta":148,"style":148},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","apiVersion: scheduling.volcano.sh\u002Fv1beta1\nkind: Queue\nmetadata:\n  name: research\nspec:\n  reclaimable: true          # give idle capacity back to other queues\n  weight: 1                  # relative share under contention\n  capability:                # hard ceiling for this queue\n    nvidia.com\u002Fgpu: 8\n","yaml",[336],{"type":43,"tag":73,"props":337,"children":338},{"__ignoreMap":148},[339,358,375,389,406,419,444,468,486],{"type":43,"tag":154,"props":340,"children":341},{"class":156,"line":157},[342,348,353],{"type":43,"tag":154,"props":343,"children":345},{"style":344},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[346],{"type":49,"value":347},"apiVersion",{"type":43,"tag":154,"props":349,"children":350},{"style":187},[351],{"type":49,"value":352},":",{"type":43,"tag":154,"props":354,"children":355},{"style":166},[356],{"type":49,"value":357}," scheduling.volcano.sh\u002Fv1beta1\n",{"type":43,"tag":154,"props":359,"children":360},{"class":156,"line":250},[361,366,370],{"type":43,"tag":154,"props":362,"children":363},{"style":344},[364],{"type":49,"value":365},"kind",{"type":43,"tag":154,"props":367,"children":368},{"style":187},[369],{"type":49,"value":352},{"type":43,"tag":154,"props":371,"children":372},{"style":166},[373],{"type":49,"value":374}," Queue\n",{"type":43,"tag":154,"props":376,"children":378},{"class":156,"line":377},3,[379,384],{"type":43,"tag":154,"props":380,"children":381},{"style":344},[382],{"type":49,"value":383},"metadata",{"type":43,"tag":154,"props":385,"children":386},{"style":187},[387],{"type":49,"value":388},":\n",{"type":43,"tag":154,"props":390,"children":391},{"class":156,"line":30},[392,397,401],{"type":43,"tag":154,"props":393,"children":394},{"style":344},[395],{"type":49,"value":396},"  name",{"type":43,"tag":154,"props":398,"children":399},{"style":187},[400],{"type":49,"value":352},{"type":43,"tag":154,"props":402,"children":403},{"style":166},[404],{"type":49,"value":405}," research\n",{"type":43,"tag":154,"props":407,"children":409},{"class":156,"line":408},5,[410,415],{"type":43,"tag":154,"props":411,"children":412},{"style":344},[413],{"type":49,"value":414},"spec",{"type":43,"tag":154,"props":416,"children":417},{"style":187},[418],{"type":49,"value":388},{"type":43,"tag":154,"props":420,"children":422},{"class":156,"line":421},6,[423,428,432,438],{"type":43,"tag":154,"props":424,"children":425},{"style":344},[426],{"type":49,"value":427},"  reclaimable",{"type":43,"tag":154,"props":429,"children":430},{"style":187},[431],{"type":49,"value":352},{"type":43,"tag":154,"props":433,"children":435},{"style":434},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[436],{"type":49,"value":437}," true",{"type":43,"tag":154,"props":439,"children":441},{"style":440},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[442],{"type":49,"value":443},"          # give idle capacity back to other queues\n",{"type":43,"tag":154,"props":445,"children":447},{"class":156,"line":446},7,[448,453,457,463],{"type":43,"tag":154,"props":449,"children":450},{"style":344},[451],{"type":49,"value":452},"  weight",{"type":43,"tag":154,"props":454,"children":455},{"style":187},[456],{"type":49,"value":352},{"type":43,"tag":154,"props":458,"children":460},{"style":459},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[461],{"type":49,"value":462}," 1",{"type":43,"tag":154,"props":464,"children":465},{"style":440},[466],{"type":49,"value":467},"                  # relative share under contention\n",{"type":43,"tag":154,"props":469,"children":471},{"class":156,"line":470},8,[472,477,481],{"type":43,"tag":154,"props":473,"children":474},{"style":344},[475],{"type":49,"value":476},"  capability",{"type":43,"tag":154,"props":478,"children":479},{"style":187},[480],{"type":49,"value":352},{"type":43,"tag":154,"props":482,"children":483},{"style":440},[484],{"type":49,"value":485},"                # hard ceiling for this queue\n",{"type":43,"tag":154,"props":487,"children":489},{"class":156,"line":488},9,[490,495,499],{"type":43,"tag":154,"props":491,"children":492},{"style":344},[493],{"type":49,"value":494},"    nvidia.com\u002Fgpu",{"type":43,"tag":154,"props":496,"children":497},{"style":187},[498],{"type":49,"value":352},{"type":43,"tag":154,"props":500,"children":501},{"style":459},[502],{"type":49,"value":503}," 8\n",{"type":43,"tag":90,"props":505,"children":507},{"id":506},"attach-shared-storage-optional",[508],{"type":49,"value":509},"Attach shared storage (optional)",{"type":43,"tag":52,"props":511,"children":512},{},[513,515,521],{"type":49,"value":514},"Together provisions a static PersistentVolume named after the cluster's shared volume. Bind a ",{"type":43,"tag":73,"props":516,"children":518},{"className":517},[],[519],{"type":49,"value":520},"ReadWriteMany",{"type":49,"value":522}," PVC to it so every worker shares datasets and checkpoints, then mount it in the job (below).",{"type":43,"tag":143,"props":524,"children":526},{"className":332,"code":525,"language":334,"meta":148,"style":148},"apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:\n  name: shared-pvc\nspec:\n  accessModes: [\"ReadWriteMany\"]\n  storageClassName: shared-wekafs   # Together default shared storage class\n  volumeName: \u003Cshared-volume-name>  # the static PV named after your shared volume\n  resources:\n    requests:\n      storage: 100Gi\n",[527],{"type":43,"tag":73,"props":528,"children":529},{"__ignoreMap":148},[530,546,562,573,589,600,635,657,679,691,704],{"type":43,"tag":154,"props":531,"children":532},{"class":156,"line":157},[533,537,541],{"type":43,"tag":154,"props":534,"children":535},{"style":344},[536],{"type":49,"value":347},{"type":43,"tag":154,"props":538,"children":539},{"style":187},[540],{"type":49,"value":352},{"type":43,"tag":154,"props":542,"children":543},{"style":166},[544],{"type":49,"value":545}," v1\n",{"type":43,"tag":154,"props":547,"children":548},{"class":156,"line":250},[549,553,557],{"type":43,"tag":154,"props":550,"children":551},{"style":344},[552],{"type":49,"value":365},{"type":43,"tag":154,"props":554,"children":555},{"style":187},[556],{"type":49,"value":352},{"type":43,"tag":154,"props":558,"children":559},{"style":166},[560],{"type":49,"value":561}," PersistentVolumeClaim\n",{"type":43,"tag":154,"props":563,"children":564},{"class":156,"line":377},[565,569],{"type":43,"tag":154,"props":566,"children":567},{"style":344},[568],{"type":49,"value":383},{"type":43,"tag":154,"props":570,"children":571},{"style":187},[572],{"type":49,"value":388},{"type":43,"tag":154,"props":574,"children":575},{"class":156,"line":30},[576,580,584],{"type":43,"tag":154,"props":577,"children":578},{"style":344},[579],{"type":49,"value":396},{"type":43,"tag":154,"props":581,"children":582},{"style":187},[583],{"type":49,"value":352},{"type":43,"tag":154,"props":585,"children":586},{"style":166},[587],{"type":49,"value":588}," shared-pvc\n",{"type":43,"tag":154,"props":590,"children":591},{"class":156,"line":408},[592,596],{"type":43,"tag":154,"props":593,"children":594},{"style":344},[595],{"type":49,"value":414},{"type":43,"tag":154,"props":597,"children":598},{"style":187},[599],{"type":49,"value":388},{"type":43,"tag":154,"props":601,"children":602},{"class":156,"line":421},[603,608,612,617,622,626,630],{"type":43,"tag":154,"props":604,"children":605},{"style":344},[606],{"type":49,"value":607},"  accessModes",{"type":43,"tag":154,"props":609,"children":610},{"style":187},[611],{"type":49,"value":352},{"type":43,"tag":154,"props":613,"children":614},{"style":187},[615],{"type":49,"value":616}," [",{"type":43,"tag":154,"props":618,"children":619},{"style":187},[620],{"type":49,"value":621},"\"",{"type":43,"tag":154,"props":623,"children":624},{"style":166},[625],{"type":49,"value":520},{"type":43,"tag":154,"props":627,"children":628},{"style":187},[629],{"type":49,"value":621},{"type":43,"tag":154,"props":631,"children":632},{"style":187},[633],{"type":49,"value":634},"]\n",{"type":43,"tag":154,"props":636,"children":637},{"class":156,"line":446},[638,643,647,652],{"type":43,"tag":154,"props":639,"children":640},{"style":344},[641],{"type":49,"value":642},"  storageClassName",{"type":43,"tag":154,"props":644,"children":645},{"style":187},[646],{"type":49,"value":352},{"type":43,"tag":154,"props":648,"children":649},{"style":166},[650],{"type":49,"value":651}," shared-wekafs",{"type":43,"tag":154,"props":653,"children":654},{"style":440},[655],{"type":49,"value":656},"   # Together default shared storage class\n",{"type":43,"tag":154,"props":658,"children":659},{"class":156,"line":470},[660,665,669,674],{"type":43,"tag":154,"props":661,"children":662},{"style":344},[663],{"type":49,"value":664},"  volumeName",{"type":43,"tag":154,"props":666,"children":667},{"style":187},[668],{"type":49,"value":352},{"type":43,"tag":154,"props":670,"children":671},{"style":166},[672],{"type":49,"value":673}," \u003Cshared-volume-name>",{"type":43,"tag":154,"props":675,"children":676},{"style":440},[677],{"type":49,"value":678},"  # the static PV named after your shared volume\n",{"type":43,"tag":154,"props":680,"children":681},{"class":156,"line":488},[682,687],{"type":43,"tag":154,"props":683,"children":684},{"style":344},[685],{"type":49,"value":686},"  resources",{"type":43,"tag":154,"props":688,"children":689},{"style":187},[690],{"type":49,"value":388},{"type":43,"tag":154,"props":692,"children":694},{"class":156,"line":693},10,[695,700],{"type":43,"tag":154,"props":696,"children":697},{"style":344},[698],{"type":49,"value":699},"    requests",{"type":43,"tag":154,"props":701,"children":702},{"style":187},[703],{"type":49,"value":388},{"type":43,"tag":154,"props":705,"children":707},{"class":156,"line":706},11,[708,713,717],{"type":43,"tag":154,"props":709,"children":710},{"style":344},[711],{"type":49,"value":712},"      storage",{"type":43,"tag":154,"props":714,"children":715},{"style":187},[716],{"type":49,"value":352},{"type":43,"tag":154,"props":718,"children":719},{"style":166},[720],{"type":49,"value":721}," 100Gi\n",{"type":43,"tag":90,"props":723,"children":725},{"id":724},"run-a-gang-scheduled-job",[726],{"type":49,"value":727},"Run a gang-scheduled job",{"type":43,"tag":52,"props":729,"children":730},{},[731,733,739,741,747,749,755,757,763,765,771,773,779,781,787],{"type":49,"value":732},"The gang guarantee comes from ",{"type":43,"tag":73,"props":734,"children":736},{"className":735},[],[737],{"type":49,"value":738},"minAvailable",{"type":49,"value":740}," on a Volcano ",{"type":43,"tag":73,"props":742,"children":744},{"className":743},[],[745],{"type":49,"value":746},"Job",{"type":49,"value":748}," (",{"type":43,"tag":73,"props":750,"children":752},{"className":751},[],[753],{"type":49,"value":754},"vcjob",{"type":49,"value":756},"). Set ",{"type":43,"tag":73,"props":758,"children":760},{"className":759},[],[761],{"type":49,"value":762},"schedulerName: volcano",{"type":49,"value":764}," and a ",{"type":43,"tag":73,"props":766,"children":768},{"className":767},[],[769],{"type":49,"value":770},"queue",{"type":49,"value":772},". The ",{"type":43,"tag":73,"props":774,"children":776},{"className":775},[],[777],{"type":49,"value":778},"volumes",{"type":49,"value":780},"\u002F",{"type":43,"tag":73,"props":782,"children":784},{"className":783},[],[785],{"type":49,"value":786},"volumeMounts",{"type":49,"value":788}," blocks are optional; drop them if the job needs no shared storage.",{"type":43,"tag":143,"props":790,"children":792},{"className":332,"code":791,"language":334,"meta":148,"style":148},"apiVersion: batch.volcano.sh\u002Fv1alpha1\nkind: Job\nmetadata:\n  name: gpu-gang\nspec:\n  minAvailable: 4            # schedule all 4 pods together or none\n  schedulerName: volcano\n  queue: research\n  policies:\n    - event: PodEvicted\n      action: RestartJob     # restart the whole gang if a pod is evicted\n  tasks:\n    - replicas: 4\n      name: worker\n      template:\n        spec:\n          restartPolicy: OnFailure\n          containers:\n            - name: worker\n              image: nvidia\u002Fcuda:12.4.0-base-ubuntu22.04\n              command: [\"bash\", \"-c\", \"nvidia-smi -L; sleep 300\"]\n              resources:\n                limits:\n                  nvidia.com\u002Fgpu: 2   # 4 x 2 = 8 GPUs\n              volumeMounts:\n                - name: shared\n                  mountPath: \u002Fmnt\u002Fshared\n          volumes:\n            - name: shared\n              persistentVolumeClaim:\n                claimName: shared-pvc\n",[793],{"type":43,"tag":73,"props":794,"children":795},{"__ignoreMap":148},[796,812,828,839,855,866,888,905,921,933,955,977,990,1012,1030,1043,1056,1074,1087,1109,1127,1196,1209,1222,1245,1258,1280,1298,1311,1331,1344],{"type":43,"tag":154,"props":797,"children":798},{"class":156,"line":157},[799,803,807],{"type":43,"tag":154,"props":800,"children":801},{"style":344},[802],{"type":49,"value":347},{"type":43,"tag":154,"props":804,"children":805},{"style":187},[806],{"type":49,"value":352},{"type":43,"tag":154,"props":808,"children":809},{"style":166},[810],{"type":49,"value":811}," batch.volcano.sh\u002Fv1alpha1\n",{"type":43,"tag":154,"props":813,"children":814},{"class":156,"line":250},[815,819,823],{"type":43,"tag":154,"props":816,"children":817},{"style":344},[818],{"type":49,"value":365},{"type":43,"tag":154,"props":820,"children":821},{"style":187},[822],{"type":49,"value":352},{"type":43,"tag":154,"props":824,"children":825},{"style":166},[826],{"type":49,"value":827}," Job\n",{"type":43,"tag":154,"props":829,"children":830},{"class":156,"line":377},[831,835],{"type":43,"tag":154,"props":832,"children":833},{"style":344},[834],{"type":49,"value":383},{"type":43,"tag":154,"props":836,"children":837},{"style":187},[838],{"type":49,"value":388},{"type":43,"tag":154,"props":840,"children":841},{"class":156,"line":30},[842,846,850],{"type":43,"tag":154,"props":843,"children":844},{"style":344},[845],{"type":49,"value":396},{"type":43,"tag":154,"props":847,"children":848},{"style":187},[849],{"type":49,"value":352},{"type":43,"tag":154,"props":851,"children":852},{"style":166},[853],{"type":49,"value":854}," gpu-gang\n",{"type":43,"tag":154,"props":856,"children":857},{"class":156,"line":408},[858,862],{"type":43,"tag":154,"props":859,"children":860},{"style":344},[861],{"type":49,"value":414},{"type":43,"tag":154,"props":863,"children":864},{"style":187},[865],{"type":49,"value":388},{"type":43,"tag":154,"props":867,"children":868},{"class":156,"line":421},[869,874,878,883],{"type":43,"tag":154,"props":870,"children":871},{"style":344},[872],{"type":49,"value":873},"  minAvailable",{"type":43,"tag":154,"props":875,"children":876},{"style":187},[877],{"type":49,"value":352},{"type":43,"tag":154,"props":879,"children":880},{"style":459},[881],{"type":49,"value":882}," 4",{"type":43,"tag":154,"props":884,"children":885},{"style":440},[886],{"type":49,"value":887},"            # schedule all 4 pods together or none\n",{"type":43,"tag":154,"props":889,"children":890},{"class":156,"line":446},[891,896,900],{"type":43,"tag":154,"props":892,"children":893},{"style":344},[894],{"type":49,"value":895},"  schedulerName",{"type":43,"tag":154,"props":897,"children":898},{"style":187},[899],{"type":49,"value":352},{"type":43,"tag":154,"props":901,"children":902},{"style":166},[903],{"type":49,"value":904}," volcano\n",{"type":43,"tag":154,"props":906,"children":907},{"class":156,"line":470},[908,913,917],{"type":43,"tag":154,"props":909,"children":910},{"style":344},[911],{"type":49,"value":912},"  queue",{"type":43,"tag":154,"props":914,"children":915},{"style":187},[916],{"type":49,"value":352},{"type":43,"tag":154,"props":918,"children":919},{"style":166},[920],{"type":49,"value":405},{"type":43,"tag":154,"props":922,"children":923},{"class":156,"line":488},[924,929],{"type":43,"tag":154,"props":925,"children":926},{"style":344},[927],{"type":49,"value":928},"  policies",{"type":43,"tag":154,"props":930,"children":931},{"style":187},[932],{"type":49,"value":388},{"type":43,"tag":154,"props":934,"children":935},{"class":156,"line":693},[936,941,946,950],{"type":43,"tag":154,"props":937,"children":938},{"style":187},[939],{"type":49,"value":940},"    -",{"type":43,"tag":154,"props":942,"children":943},{"style":344},[944],{"type":49,"value":945}," event",{"type":43,"tag":154,"props":947,"children":948},{"style":187},[949],{"type":49,"value":352},{"type":43,"tag":154,"props":951,"children":952},{"style":166},[953],{"type":49,"value":954}," PodEvicted\n",{"type":43,"tag":154,"props":956,"children":957},{"class":156,"line":706},[958,963,967,972],{"type":43,"tag":154,"props":959,"children":960},{"style":344},[961],{"type":49,"value":962},"      action",{"type":43,"tag":154,"props":964,"children":965},{"style":187},[966],{"type":49,"value":352},{"type":43,"tag":154,"props":968,"children":969},{"style":166},[970],{"type":49,"value":971}," RestartJob",{"type":43,"tag":154,"props":973,"children":974},{"style":440},[975],{"type":49,"value":976},"     # restart the whole gang if a pod is evicted\n",{"type":43,"tag":154,"props":978,"children":980},{"class":156,"line":979},12,[981,986],{"type":43,"tag":154,"props":982,"children":983},{"style":344},[984],{"type":49,"value":985},"  tasks",{"type":43,"tag":154,"props":987,"children":988},{"style":187},[989],{"type":49,"value":388},{"type":43,"tag":154,"props":991,"children":993},{"class":156,"line":992},13,[994,998,1003,1007],{"type":43,"tag":154,"props":995,"children":996},{"style":187},[997],{"type":49,"value":940},{"type":43,"tag":154,"props":999,"children":1000},{"style":344},[1001],{"type":49,"value":1002}," replicas",{"type":43,"tag":154,"props":1004,"children":1005},{"style":187},[1006],{"type":49,"value":352},{"type":43,"tag":154,"props":1008,"children":1009},{"style":459},[1010],{"type":49,"value":1011}," 4\n",{"type":43,"tag":154,"props":1013,"children":1015},{"class":156,"line":1014},14,[1016,1021,1025],{"type":43,"tag":154,"props":1017,"children":1018},{"style":344},[1019],{"type":49,"value":1020},"      name",{"type":43,"tag":154,"props":1022,"children":1023},{"style":187},[1024],{"type":49,"value":352},{"type":43,"tag":154,"props":1026,"children":1027},{"style":166},[1028],{"type":49,"value":1029}," worker\n",{"type":43,"tag":154,"props":1031,"children":1033},{"class":156,"line":1032},15,[1034,1039],{"type":43,"tag":154,"props":1035,"children":1036},{"style":344},[1037],{"type":49,"value":1038},"      template",{"type":43,"tag":154,"props":1040,"children":1041},{"style":187},[1042],{"type":49,"value":388},{"type":43,"tag":154,"props":1044,"children":1046},{"class":156,"line":1045},16,[1047,1052],{"type":43,"tag":154,"props":1048,"children":1049},{"style":344},[1050],{"type":49,"value":1051},"        spec",{"type":43,"tag":154,"props":1053,"children":1054},{"style":187},[1055],{"type":49,"value":388},{"type":43,"tag":154,"props":1057,"children":1059},{"class":156,"line":1058},17,[1060,1065,1069],{"type":43,"tag":154,"props":1061,"children":1062},{"style":344},[1063],{"type":49,"value":1064},"          restartPolicy",{"type":43,"tag":154,"props":1066,"children":1067},{"style":187},[1068],{"type":49,"value":352},{"type":43,"tag":154,"props":1070,"children":1071},{"style":166},[1072],{"type":49,"value":1073}," OnFailure\n",{"type":43,"tag":154,"props":1075,"children":1077},{"class":156,"line":1076},18,[1078,1083],{"type":43,"tag":154,"props":1079,"children":1080},{"style":344},[1081],{"type":49,"value":1082},"          containers",{"type":43,"tag":154,"props":1084,"children":1085},{"style":187},[1086],{"type":49,"value":388},{"type":43,"tag":154,"props":1088,"children":1090},{"class":156,"line":1089},19,[1091,1096,1101,1105],{"type":43,"tag":154,"props":1092,"children":1093},{"style":187},[1094],{"type":49,"value":1095},"            -",{"type":43,"tag":154,"props":1097,"children":1098},{"style":344},[1099],{"type":49,"value":1100}," name",{"type":43,"tag":154,"props":1102,"children":1103},{"style":187},[1104],{"type":49,"value":352},{"type":43,"tag":154,"props":1106,"children":1107},{"style":166},[1108],{"type":49,"value":1029},{"type":43,"tag":154,"props":1110,"children":1112},{"class":156,"line":1111},20,[1113,1118,1122],{"type":43,"tag":154,"props":1114,"children":1115},{"style":344},[1116],{"type":49,"value":1117},"              image",{"type":43,"tag":154,"props":1119,"children":1120},{"style":187},[1121],{"type":49,"value":352},{"type":43,"tag":154,"props":1123,"children":1124},{"style":166},[1125],{"type":49,"value":1126}," nvidia\u002Fcuda:12.4.0-base-ubuntu22.04\n",{"type":43,"tag":154,"props":1128,"children":1130},{"class":156,"line":1129},21,[1131,1136,1140,1144,1148,1152,1156,1161,1166,1171,1175,1179,1183,1188,1192],{"type":43,"tag":154,"props":1132,"children":1133},{"style":344},[1134],{"type":49,"value":1135},"              command",{"type":43,"tag":154,"props":1137,"children":1138},{"style":187},[1139],{"type":49,"value":352},{"type":43,"tag":154,"props":1141,"children":1142},{"style":187},[1143],{"type":49,"value":616},{"type":43,"tag":154,"props":1145,"children":1146},{"style":187},[1147],{"type":49,"value":621},{"type":43,"tag":154,"props":1149,"children":1150},{"style":166},[1151],{"type":49,"value":147},{"type":43,"tag":154,"props":1153,"children":1154},{"style":187},[1155],{"type":49,"value":621},{"type":43,"tag":154,"props":1157,"children":1158},{"style":187},[1159],{"type":49,"value":1160},",",{"type":43,"tag":154,"props":1162,"children":1163},{"style":187},[1164],{"type":49,"value":1165}," \"",{"type":43,"tag":154,"props":1167,"children":1168},{"style":166},[1169],{"type":49,"value":1170},"-c",{"type":43,"tag":154,"props":1172,"children":1173},{"style":187},[1174],{"type":49,"value":621},{"type":43,"tag":154,"props":1176,"children":1177},{"style":187},[1178],{"type":49,"value":1160},{"type":43,"tag":154,"props":1180,"children":1181},{"style":187},[1182],{"type":49,"value":1165},{"type":43,"tag":154,"props":1184,"children":1185},{"style":166},[1186],{"type":49,"value":1187},"nvidia-smi -L; sleep 300",{"type":43,"tag":154,"props":1189,"children":1190},{"style":187},[1191],{"type":49,"value":621},{"type":43,"tag":154,"props":1193,"children":1194},{"style":187},[1195],{"type":49,"value":634},{"type":43,"tag":154,"props":1197,"children":1199},{"class":156,"line":1198},22,[1200,1205],{"type":43,"tag":154,"props":1201,"children":1202},{"style":344},[1203],{"type":49,"value":1204},"              resources",{"type":43,"tag":154,"props":1206,"children":1207},{"style":187},[1208],{"type":49,"value":388},{"type":43,"tag":154,"props":1210,"children":1212},{"class":156,"line":1211},23,[1213,1218],{"type":43,"tag":154,"props":1214,"children":1215},{"style":344},[1216],{"type":49,"value":1217},"                limits",{"type":43,"tag":154,"props":1219,"children":1220},{"style":187},[1221],{"type":49,"value":388},{"type":43,"tag":154,"props":1223,"children":1225},{"class":156,"line":1224},24,[1226,1231,1235,1240],{"type":43,"tag":154,"props":1227,"children":1228},{"style":344},[1229],{"type":49,"value":1230},"                  nvidia.com\u002Fgpu",{"type":43,"tag":154,"props":1232,"children":1233},{"style":187},[1234],{"type":49,"value":352},{"type":43,"tag":154,"props":1236,"children":1237},{"style":459},[1238],{"type":49,"value":1239}," 2",{"type":43,"tag":154,"props":1241,"children":1242},{"style":440},[1243],{"type":49,"value":1244},"   # 4 x 2 = 8 GPUs\n",{"type":43,"tag":154,"props":1246,"children":1248},{"class":156,"line":1247},25,[1249,1254],{"type":43,"tag":154,"props":1250,"children":1251},{"style":344},[1252],{"type":49,"value":1253},"              volumeMounts",{"type":43,"tag":154,"props":1255,"children":1256},{"style":187},[1257],{"type":49,"value":388},{"type":43,"tag":154,"props":1259,"children":1261},{"class":156,"line":1260},26,[1262,1267,1271,1275],{"type":43,"tag":154,"props":1263,"children":1264},{"style":187},[1265],{"type":49,"value":1266},"                -",{"type":43,"tag":154,"props":1268,"children":1269},{"style":344},[1270],{"type":49,"value":1100},{"type":43,"tag":154,"props":1272,"children":1273},{"style":187},[1274],{"type":49,"value":352},{"type":43,"tag":154,"props":1276,"children":1277},{"style":166},[1278],{"type":49,"value":1279}," shared\n",{"type":43,"tag":154,"props":1281,"children":1283},{"class":156,"line":1282},27,[1284,1289,1293],{"type":43,"tag":154,"props":1285,"children":1286},{"style":344},[1287],{"type":49,"value":1288},"                  mountPath",{"type":43,"tag":154,"props":1290,"children":1291},{"style":187},[1292],{"type":49,"value":352},{"type":43,"tag":154,"props":1294,"children":1295},{"style":166},[1296],{"type":49,"value":1297}," \u002Fmnt\u002Fshared\n",{"type":43,"tag":154,"props":1299,"children":1301},{"class":156,"line":1300},28,[1302,1307],{"type":43,"tag":154,"props":1303,"children":1304},{"style":344},[1305],{"type":49,"value":1306},"          volumes",{"type":43,"tag":154,"props":1308,"children":1309},{"style":187},[1310],{"type":49,"value":388},{"type":43,"tag":154,"props":1312,"children":1314},{"class":156,"line":1313},29,[1315,1319,1323,1327],{"type":43,"tag":154,"props":1316,"children":1317},{"style":187},[1318],{"type":49,"value":1095},{"type":43,"tag":154,"props":1320,"children":1321},{"style":344},[1322],{"type":49,"value":1100},{"type":43,"tag":154,"props":1324,"children":1325},{"style":187},[1326],{"type":49,"value":352},{"type":43,"tag":154,"props":1328,"children":1329},{"style":166},[1330],{"type":49,"value":1279},{"type":43,"tag":154,"props":1332,"children":1334},{"class":156,"line":1333},30,[1335,1340],{"type":43,"tag":154,"props":1336,"children":1337},{"style":344},[1338],{"type":49,"value":1339},"              persistentVolumeClaim",{"type":43,"tag":154,"props":1341,"children":1342},{"style":187},[1343],{"type":49,"value":388},{"type":43,"tag":154,"props":1345,"children":1346},{"class":156,"line":26},[1347,1352,1356],{"type":43,"tag":154,"props":1348,"children":1349},{"style":344},[1350],{"type":49,"value":1351},"                claimName",{"type":43,"tag":154,"props":1353,"children":1354},{"style":187},[1355],{"type":49,"value":352},{"type":43,"tag":154,"props":1357,"children":1358},{"style":166},[1359],{"type":49,"value":588},{"type":43,"tag":90,"props":1361,"children":1363},{"id":1362},"verify",[1364],{"type":49,"value":1365},"Verify",{"type":43,"tag":97,"props":1367,"children":1368},{},[1369,1402,1421],{"type":43,"tag":101,"props":1370,"children":1371},{},[1372,1378,1380,1386,1388,1394,1396,1401],{"type":43,"tag":73,"props":1373,"children":1375},{"className":1374},[],[1376],{"type":49,"value":1377},"kubectl get vcjob \u003Cname>",{"type":49,"value":1379}," should show ",{"type":43,"tag":73,"props":1381,"children":1383},{"className":1382},[],[1384],{"type":49,"value":1385},"STATUS Running",{"type":49,"value":1387}," and ",{"type":43,"tag":73,"props":1389,"children":1391},{"className":1390},[],[1392],{"type":49,"value":1393},"RUNNINGS",{"type":49,"value":1395}," equal to ",{"type":43,"tag":73,"props":1397,"children":1399},{"className":1398},[],[1400],{"type":49,"value":738},{"type":49,"value":88},{"type":43,"tag":101,"props":1403,"children":1404},{},[1405,1411,1413,1419],{"type":43,"tag":73,"props":1406,"children":1408},{"className":1407},[],[1409],{"type":49,"value":1410},"kubectl get podgroup",{"type":49,"value":1412}," shows the gang; a ",{"type":43,"tag":73,"props":1414,"children":1416},{"className":1415},[],[1417],{"type":49,"value":1418},"Running",{"type":49,"value":1420}," phase means the whole group is placed.",{"type":43,"tag":101,"props":1422,"children":1423},{},[1424,1426,1432,1434,1440,1442,1447],{"type":49,"value":1425},"A gang that cannot fit stays ",{"type":43,"tag":73,"props":1427,"children":1429},{"className":1428},[],[1430],{"type":49,"value":1431},"Inqueue",{"type":49,"value":1433}," with ",{"type":43,"tag":1435,"props":1436,"children":1437},"strong",{},[1438],{"type":49,"value":1439},"zero",{"type":49,"value":1441}," pods running (all-or-nothing). This is the signal Volcano is working, not a failure. Never \"fix\" it by lowering ",{"type":43,"tag":73,"props":1443,"children":1445},{"className":1444},[],[1446],{"type":49,"value":738},{"type":49,"value":1448}," below the job's real parallelism.",{"type":43,"tag":90,"props":1450,"children":1452},{"id":1451},"rules-and-gotchas",[1453],{"type":49,"value":1454},"Rules and gotchas",{"type":43,"tag":97,"props":1456,"children":1457},{},[1458,1463,1487,1500,1527],{"type":43,"tag":101,"props":1459,"children":1460},{},[1461],{"type":49,"value":1462},"Always pin the Volcano version in the install URL.",{"type":43,"tag":101,"props":1464,"children":1465},{},[1466,1471,1473,1478,1480,1485],{"type":43,"tag":73,"props":1467,"children":1469},{"className":1468},[],[1470],{"type":49,"value":762},{"type":49,"value":1472}," must be on the pod template (on a ",{"type":43,"tag":73,"props":1474,"children":1476},{"className":1475},[],[1477],{"type":49,"value":754},{"type":49,"value":1479}," it goes under ",{"type":43,"tag":73,"props":1481,"children":1483},{"className":1482},[],[1484],{"type":49,"value":414},{"type":49,"value":1486},"). Without it, the default scheduler grabs the pods and there is no gang guarantee.",{"type":43,"tag":101,"props":1488,"children":1489},{},[1490,1492,1498],{"type":49,"value":1491},"A job whose total request exceeds the queue's ",{"type":43,"tag":73,"props":1493,"children":1495},{"className":1494},[],[1496],{"type":49,"value":1497},"capability",{"type":49,"value":1499}," is rejected. Raise the cap or split the job.",{"type":43,"tag":101,"props":1501,"children":1502},{},[1503,1505,1510,1512,1518,1520,1526],{"type":49,"value":1504},"To gang-schedule non-vcjob workloads (for example MPIJobs from the preinstalled MPI Operator), set ",{"type":43,"tag":73,"props":1506,"children":1508},{"className":1507},[],[1509],{"type":49,"value":762},{"type":49,"value":1511}," and attach a ",{"type":43,"tag":73,"props":1513,"children":1515},{"className":1514},[],[1516],{"type":49,"value":1517},"PodGroup",{"type":49,"value":1519},". See ",{"type":43,"tag":63,"props":1521,"children":1524},{"href":1522,"rel":1523},"https:\u002F\u002Fvolcano.sh\u002Fen\u002Fdocs\u002Fpodgroup\u002F",[67],[1525],{"type":49,"value":1522},{"type":49,"value":88},{"type":43,"tag":101,"props":1528,"children":1529},{},[1530,1532,1537],{"type":49,"value":1531},"Volcano and Kueue can coexist on one cluster: Volcano owns pods with ",{"type":43,"tag":73,"props":1533,"children":1535},{"className":1534},[],[1536],{"type":49,"value":762},{"type":49,"value":1538},"; Kueue admits jobs on the default scheduler. Pick one per workload; do not point a single job at both.",{"type":43,"tag":90,"props":1540,"children":1542},{"id":1541},"reference",[1543],{"type":49,"value":1544},"Reference",{"type":43,"tag":97,"props":1546,"children":1547},{},[1548,1559,1570,1581,1592],{"type":43,"tag":101,"props":1549,"children":1550},{},[1551,1553],{"type":49,"value":1552},"Volcano docs: ",{"type":43,"tag":63,"props":1554,"children":1557},{"href":1555,"rel":1556},"https:\u002F\u002Fvolcano.sh\u002Fen\u002Fdocs\u002F",[67],[1558],{"type":49,"value":1555},{"type":43,"tag":101,"props":1560,"children":1561},{},[1562,1564],{"type":49,"value":1563},"Installation: ",{"type":43,"tag":63,"props":1565,"children":1568},{"href":1566,"rel":1567},"https:\u002F\u002Fvolcano.sh\u002Fen\u002Fdocs\u002Finstallation\u002F",[67],[1569],{"type":49,"value":1566},{"type":43,"tag":101,"props":1571,"children":1572},{},[1573,1575],{"type":49,"value":1574},"Gang scheduling: ",{"type":43,"tag":63,"props":1576,"children":1579},{"href":1577,"rel":1578},"https:\u002F\u002Fvolcano.sh\u002Fen\u002Fdocs\u002Fgang_scheduling\u002F",[67],[1580],{"type":49,"value":1577},{"type":43,"tag":101,"props":1582,"children":1583},{},[1584,1586],{"type":49,"value":1585},"Queue: ",{"type":43,"tag":63,"props":1587,"children":1590},{"href":1588,"rel":1589},"https:\u002F\u002Fvolcano.sh\u002Fen\u002Fdocs\u002Fqueue\u002F",[67],[1591],{"type":49,"value":1588},{"type":43,"tag":101,"props":1593,"children":1594},{},[1595,1597],{"type":49,"value":1596},"vcjob: ",{"type":43,"tag":63,"props":1598,"children":1601},{"href":1599,"rel":1600},"https:\u002F\u002Fvolcano.sh\u002Fen\u002Fdocs\u002Fvcjob\u002F",[67],[1602],{"type":49,"value":1599},{"type":43,"tag":1604,"props":1605,"children":1606},"style",{},[1607],{"type":49,"value":1608},"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":1610,"total":1045},[1611,1632,1644,1663,1679,1693,1710,1720,1735,1749,1759,1771],{"slug":1612,"name":1612,"fn":1613,"description":1614,"org":1615,"tags":1616,"stars":1629,"repoUrl":1630,"updatedAt":1631},"blog-post","write structured blog posts","Write structured long-form blog posts with a consistent structure and SEO optimization.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1617,1620,1623,1626],{"name":1618,"slug":1619,"type":16},"Content Creation","content-creation",{"name":1621,"slug":1622,"type":16},"Marketing","marketing",{"name":1624,"slug":1625,"type":16},"SEO","seo",{"name":1627,"slug":1628,"type":16},"Writing","writing",1151,"https:\u002F\u002Fgithub.com\u002Ftogethercomputer\u002Ftogether-cookbook","2026-07-17T06:07:39.475433",{"slug":1633,"name":1633,"fn":1634,"description":1635,"org":1636,"tags":1637,"stars":1629,"repoUrl":1630,"updatedAt":1643},"social-media","create social media content","Create social media content including Twitter\u002FX threads, LinkedIn posts, and short-form updates.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1638,1639,1640,1642],{"name":1618,"slug":1619,"type":16},{"name":1621,"slug":1622,"type":16},{"name":1641,"slug":1633,"type":16},"Social Media",{"name":1627,"slug":1628,"type":16},"2026-07-17T06:07:38.455058",{"slug":1645,"name":1645,"fn":1646,"description":1647,"org":1648,"tags":1649,"stars":26,"repoUrl":27,"updatedAt":1662},"together-audio","process audio with Together AI","Text-to-speech and speech-to-text via Together AI, including REST, streaming, and realtime WebSocket TTS, plus transcription, translation, diarization, timestamps, and live STT. Reach for it whenever the user needs audio in or audio out on Together AI rather than chat generation, image or video creation, or model training.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1650,1653,1656,1659],{"name":1651,"slug":1652,"type":16},"Audio","audio",{"name":1654,"slug":1655,"type":16},"Speech","speech",{"name":1657,"slug":1658,"type":16},"Text-to-Speech","text-to-speech",{"name":1660,"slug":1661,"type":16},"Transcription","transcription","2026-07-26T05:49:08.246858",{"slug":1664,"name":1664,"fn":1665,"description":1666,"org":1667,"tags":1668,"stars":26,"repoUrl":27,"updatedAt":1678},"together-batch-inference","run asynchronous batch inference jobs","High-volume, asynchronous offline inference at up to 50% lower cost via Together AI's Batch API. Prepare JSONL inputs, upload files, create jobs, poll status, and download outputs. Reach for it whenever the user needs non-interactive bulk inference rather than real-time chat or evaluation jobs.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1669,1672,1675],{"name":1670,"slug":1671,"type":16},"Automation","automation",{"name":1673,"slug":1674,"type":16},"LLM","llm",{"name":1676,"slug":1677,"type":16},"Performance","performance","2026-07-17T06:08:23.919602",{"slug":1680,"name":1680,"fn":1681,"description":1682,"org":1683,"tags":1684,"stars":26,"repoUrl":27,"updatedAt":1692},"together-chat-completions","generate text with Together AI","Real-time and streaming text generation via Together AI's OpenAI-compatible chat\u002Fcompletions API, including multi-turn conversations, tool and function calling, structured JSON outputs, and reasoning models. Reach for it whenever the user wants to build or debug text generation on Together AI, unless they specifically need batch jobs, embeddings, fine-tuning, dedicated endpoints, dedicated containers, or GPU clusters.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1685,1688,1691],{"name":1686,"slug":1687,"type":16},"AI","ai",{"name":1689,"slug":1690,"type":16},"API Development","api-development",{"name":1673,"slug":1674,"type":16},"2026-07-26T05:49:11.244104",{"slug":1694,"name":1694,"fn":1695,"description":1696,"org":1697,"tags":1698,"stars":26,"repoUrl":27,"updatedAt":1709},"together-dedicated-containers","deploy custom inference containers on Together AI","Custom Dockerized inference workers on Together AI's managed GPU infrastructure. Build with Sprocket SDK, configure with Jig CLI, submit async queue jobs, and poll results. Reach for it whenever the user needs container-level control rather than a standard model endpoint or raw cluster.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1699,1700,1703,1706],{"name":21,"slug":22,"type":16},{"name":1701,"slug":1702,"type":16},"Deployment","deployment",{"name":1704,"slug":1705,"type":16},"Docker","docker",{"name":1707,"slug":1708,"type":16},"Machine Learning","machine-learning","2026-07-26T05:49:09.267892",{"slug":1711,"name":1711,"fn":1712,"description":1713,"org":1714,"tags":1715,"stars":26,"repoUrl":27,"updatedAt":1719},"together-dedicated-model-inference","deploy and operate Together AI models","Deploy and operate models on dedicated GPUs with Together AI's Dedicated Model Inference (DMI, the v2 dedicated endpoints API): beta endpoints, deployments, deployment profiles and hardware configs, autoscaling, traffic splitting, A\u002FB tests, shadow experiments, Prometheus metrics, and custom model or LoRA adapter uploads. Reach for it whenever the user mentions together beta endpoints or tg beta commands, client.beta.endpoints, DMI resources like ep_\u002Fdep_\u002Fcr_\u002Fml_ IDs, or wants production model serving with traffic management on Together AI. This is the current dedicated-hosting API and also covers migrating off the retired legacy v1 endpoints API (non-beta client.endpoints \u002F together endpoints), whose create and restart now return HTTP 403.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1716,1717,1718],{"name":21,"slug":22,"type":16},{"name":1701,"slug":1702,"type":16},{"name":1673,"slug":1674,"type":16},"2026-07-26T06:08:44.044039",{"slug":1721,"name":1721,"fn":1722,"description":1723,"org":1724,"tags":1725,"stars":26,"repoUrl":27,"updatedAt":1734},"together-embeddings","generate embeddings and build RAG pipelines","Dense vector embeddings, semantic search, RAG pipelines, and reranking via Together AI. Generate embeddings with open-source models and rerank results behind dedicated endpoints. Reach for it whenever the user needs vector representations or retrieval quality improvements rather than direct text generation.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1726,1727,1728,1731],{"name":1686,"slug":1687,"type":16},{"name":1673,"slug":1674,"type":16},{"name":1729,"slug":1730,"type":16},"RAG","rag",{"name":1732,"slug":1733,"type":16},"Search","search","2026-07-26T05:49:06.247906",{"slug":1736,"name":1736,"fn":1737,"description":1738,"org":1739,"tags":1740,"stars":26,"repoUrl":27,"updatedAt":1748},"together-evaluations","evaluate LLM outputs with Together AI","LLM-as-a-judge evaluation framework on Together AI. Classify, score, and compare model outputs, select judge models, use external-provider judges or targets, poll results and download reports. Reach for it whenever the user wants to benchmark outputs, grade responses, compare A\u002FB variants, or operationalize automated evaluations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1741,1744,1747],{"name":1742,"slug":1743,"type":16},"Benchmarking","benchmarking",{"name":1745,"slug":1746,"type":16},"Evals","evals",{"name":1673,"slug":1674,"type":16},"2026-07-26T05:49:07.241553",{"slug":1750,"name":1750,"fn":1751,"description":1752,"org":1753,"tags":1754,"stars":26,"repoUrl":27,"updatedAt":1758},"together-fine-tuning","fine-tune and adapt models on Together AI","LoRA, full fine-tuning, DPO preference tuning, VLM training, function-calling tuning, reasoning tuning, and BYOM uploads on Together AI. Reach for it whenever the user wants to adapt a model on custom data rather than only run inference, evaluate outputs, or host an existing model.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1755,1756,1757],{"name":1686,"slug":1687,"type":16},{"name":1673,"slug":1674,"type":16},{"name":1707,"slug":1708,"type":16},"2026-07-26T05:49:10.243114",{"slug":78,"name":78,"fn":1760,"description":1761,"org":1762,"tags":1763,"stars":26,"repoUrl":27,"updatedAt":1770},"orchestrate GPU clusters on Together AI","On-demand and reserved GPU clusters (H100, H200, B200) on Together AI with Kubernetes or Slurm orchestration, shared storage, credential management, and cluster scaling for ML and HPC jobs. Reach for it when the user needs multi-node compute or infrastructure control rather than a managed model endpoint.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1764,1765,1768,1769],{"name":21,"slug":22,"type":16},{"name":1766,"slug":1767,"type":16},"Cloud","cloud",{"name":24,"slug":25,"type":16},{"name":1707,"slug":1708,"type":16},"2026-07-26T05:49:05.252646",{"slug":1772,"name":1772,"fn":1773,"description":1774,"org":1775,"tags":1776,"stars":26,"repoUrl":27,"updatedAt":1789},"together-images","generate and edit images with Together AI","Text-to-image generation and image editing via Together AI, including FLUX and Kontext models, LoRA-based styling, reference-image guidance, and local image downloads. Reach for it whenever the user wants to generate or edit images on Together AI rather than create videos or build text-only chat applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1777,1780,1783,1786],{"name":1778,"slug":1779,"type":16},"Creative","creative",{"name":1781,"slug":1782,"type":16},"Design","design",{"name":1784,"slug":1785,"type":16},"Image Generation","image-generation",{"name":1787,"slug":1788,"type":16},"Multimodal","multimodal","2026-07-17T06:04:23.067755",{"items":1791,"total":1014},[1792,1799,1805,1811,1818,1824,1831],{"slug":1645,"name":1645,"fn":1646,"description":1647,"org":1793,"tags":1794,"stars":26,"repoUrl":27,"updatedAt":1662},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1795,1796,1797,1798],{"name":1651,"slug":1652,"type":16},{"name":1654,"slug":1655,"type":16},{"name":1657,"slug":1658,"type":16},{"name":1660,"slug":1661,"type":16},{"slug":1664,"name":1664,"fn":1665,"description":1666,"org":1800,"tags":1801,"stars":26,"repoUrl":27,"updatedAt":1678},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1802,1803,1804],{"name":1670,"slug":1671,"type":16},{"name":1673,"slug":1674,"type":16},{"name":1676,"slug":1677,"type":16},{"slug":1680,"name":1680,"fn":1681,"description":1682,"org":1806,"tags":1807,"stars":26,"repoUrl":27,"updatedAt":1692},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1808,1809,1810],{"name":1686,"slug":1687,"type":16},{"name":1689,"slug":1690,"type":16},{"name":1673,"slug":1674,"type":16},{"slug":1694,"name":1694,"fn":1695,"description":1696,"org":1812,"tags":1813,"stars":26,"repoUrl":27,"updatedAt":1709},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1814,1815,1816,1817],{"name":21,"slug":22,"type":16},{"name":1701,"slug":1702,"type":16},{"name":1704,"slug":1705,"type":16},{"name":1707,"slug":1708,"type":16},{"slug":1711,"name":1711,"fn":1712,"description":1713,"org":1819,"tags":1820,"stars":26,"repoUrl":27,"updatedAt":1719},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1821,1822,1823],{"name":21,"slug":22,"type":16},{"name":1701,"slug":1702,"type":16},{"name":1673,"slug":1674,"type":16},{"slug":1721,"name":1721,"fn":1722,"description":1723,"org":1825,"tags":1826,"stars":26,"repoUrl":27,"updatedAt":1734},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1827,1828,1829,1830],{"name":1686,"slug":1687,"type":16},{"name":1673,"slug":1674,"type":16},{"name":1729,"slug":1730,"type":16},{"name":1732,"slug":1733,"type":16},{"slug":1736,"name":1736,"fn":1737,"description":1738,"org":1832,"tags":1833,"stars":26,"repoUrl":27,"updatedAt":1748},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1834,1835,1836],{"name":1742,"slug":1743,"type":16},{"name":1745,"slug":1746,"type":16},{"name":1673,"slug":1674,"type":16}]