Konduktor makes serving general and vLLM deployments easy
Experimental features are new and their interface and implementation may change at any time. Expect sharp edges.
Konduktor Serve is a powerful feature that simplifies deploying and managing ML models and general applications on Kubernetes. It provides two main deployment types:vLLM (Aibrix) Deployments: Optimized for serving large language models with vLLM, featuring automatic horizontal scaling, tensor parallelism, and OpenAI-compatible API endpoints. For now, only single node inference is supported. Accessible at <COMPANY>.trainy.usGeneral Deployments: Deploy any containerized application with automatic horizontal scaling and health checks. Accessible at <COMPANY>2.trainy.us
To launch a deployment, use the konduktor serve launch command shown below.
konduktor serve launch my_deployment.yaml
In this single command, Konduktor automatically creates the following resources:
VLLM
Deployment:
App Deployment
Service:
App Service
PodAutoscaler: (optional)
KPA (Knative-based Pod Autoscaler)
GENERAL
Deployment:
App Deployment
Service:
App Service
PodAutoscaler: (optional)
HPA (Horizontal Pod Autoscaler)
Below is a basic, but incomplete deployment YAML to show the general idea of how to get started. The format is the same as konduktor launch task.yamls for jobs, except serving includes an extra section for replicas, ports, and health endpoint probing. For full, detailed examples of deployment.yaml, check out the bottom of this page.
# For trainy.us endpoint access:curl https://<COMPANY>.trainy.us/v1/completions \-H "Content-Type: application/json" \-d '{ "model": "<DEPLOYMENT_NAME>", "prompt": "San Francisco is a", "max_tokens": 128, "temperature": 0}'# For direct IP endpoint access:curl http://<DIRECT_IP>/v1/completions \-H "Content-Type: application/json" \-d '{ "model": "<DEPLOYMENT_NAME>", "prompt": "San Francisco is a", "max_tokens": 128, "temperature": 0}'
Output:
top destination for tech companies, but it's also a hub for innovation and creativity. So, it's no surprise that the city has a vibrant food scene. From the iconic Golden Gate Bridge to the bustling streets of the Financial District, San Francisco offers a unique blend of culture, history, and modernity. When it comes to food, the city is known for its diverse cuisine, which reflects ...Chat Completion API
# For trainy.us endpoint access:curl https://<COMPANY>.trainy.us/v1/chat/completions \-H "Content-Type: application/json" \-d '{ "model": "<DEPLOYMENT_NAME>", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Help me write a random number generator function in python"} ], "max_tokens": 128}'# For direct IP endpoint access:curl http://<DIRECT_IP>/v1/chat/completions \-H "Content-Type: application/json" \-d '{ "model": "<DEPLOYMENT_NAME>", "messages": [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Help me write a random number generator function in python"} ], "max_tokens": 128}'
Output:
Okay, so I need to help write a random number generator function in Python. Hmm, where do I start? I remember that Python has a module called random which provides functions for generating random numbers. So maybe I should use that. Let me think about what functions are available there.\n\nFirst, there's random.randint(a, b), which returns a random integer N between a and b, inclusive. That's useful. Then...
# For trainy.us endpoint access:curl https://<COMPANY>.trainy.us/<DEPLOYMENT_NAME># For direct IP endpoint access:curl -H "Host: <DEPLOYMENT_NAME>" http://<DIRECT_IP>
Output: Hello from Konduktor Serve!Health Probe API
# For trainy.us endpoint access:curl https://<COMPANY>.trainy.us/<DEPLOYMENT_NAME>/health# For direct IP endpoint access:curl -H "Host: <DEPLOYMENT_NAME>" http://<DIRECT_IP>/health
vLLM (Aibrix) Deployments:Throughput/Latency/TokensScale from 0 Cold Start Time (GKE GPUs), T4 and A100 respectivelyGeneral Deployments:Throughput/Latency/ErrorsScale from 0 Cold Start Time (no GPUs)
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Trainy Konduktor","colors":{"primary":"#F07900","light":"#F8A145","dark":"#D35100"},"logo":{"light":"https://mintcdn.com/trainy/l_Z-YzGUiwLATp8A/trainy.svg?fit=max\u0026auto=format\u0026n=l_Z-YzGUiwLATp8A\u0026q=85\u0026s=a69ed11bf7bc11900bbf4631c26f5b72","dark":"https://mintcdn.com/trainy/l_Z-YzGUiwLATp8A/trainy.svg?fit=max\u0026auto=format\u0026n=l_Z-YzGUiwLATp8A\u0026q=85\u0026s=a69ed11bf7bc11900bbf4631c26f5b72"},"favicon":"https://mintcdn.com/trainy/l_Z-YzGUiwLATp8A/trainy.svg?fit=max\u0026auto=format\u0026n=l_Z-YzGUiwLATp8A\u0026q=85\u0026s=a69ed11bf7bc11900bbf4631c26f5b72","navbar":{"links":[{"href":"mailto:support@trainy.ai","label":"Support"},{"href":"https://trainy.teleport.sh","label":"Konduktor Login","type":"button"}],"primary":{"type":"button","label":"Pluto","href":"https://pluto.trainy.ai"}},"footer":{"socials":{"github":"https://github.com/Trainy-ai","linkedin":"https://www.linkedin.com/company/trainy-ai"}},"banner":{"content":"🎓 Pluto PRO promo: academic users and early-stage startups can email \u003ca href='mailto:founders@trainy.ai'>founders@trainy.ai\u003c/a> for a PROMO code.","dismissible":true},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Community","icon":"discord","href":"https://discord.com/invite/HQUBJSVgAP"},{"anchor":"Blog","icon":"newspaper","href":"https://trainy.ai/blog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"trainy","hasAudioNarration":false,"actualSubdomain":"trainy","customDomains":["docs.trainy.ai"],"gitSource":{"type":"github","owner":"trainy-ai","repo":"konduktor","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae188e69b7d807c2d28ec7f","collectionId":"cf8cf953-69b5-4cd8-8395-d1eb9ebc7457","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae188e69b7d807c2d28ec7f"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6ae188e69b7d807c2d28ec7f","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Konduktor","count":68},{"language":"default","tag":"Pluto","count":56},{"language":"default","tag":"Core","count":24},{"language":"default","tag":"API Reference","count":22},{"language":"default","tag":"Examples","count":20},{"language":"default","tag":"Get Started","count":19},{"language":"default","tag":"Runs","count":19},{"language":"default","tag":"Example Task Yamls","count":13},{"language":"default","tag":"Visualizations","count":7},{"language":"default","tag":"Cloud Storage","count":5}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"deployments","slug":"/deployments","pageMetadata":{"title":"Serving Deployments (Experimental)","description":"Konduktor makes serving general and vLLM deployments easy","href":"/deployments"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Konduktor makes serving general and vLLM deployments easy\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Card,CardGroup,CodeBlock,Heading,OptimizedImage,Warning}=_components;if(!Card)_missingMdxReference(`Card`,true);if(!CardGroup)_missingMdxReference(`CardGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsx(_components.p,{children:`Experimental features are new and their interface and implementation may change at any time. Expect sharp edges.`})}),`\n`,_jsx(_components.p,{children:`Konduktor Serve is a powerful feature that simplifies deploying and managing ML models and general applications on Kubernetes. It provides two main deployment types:`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`vLLM (Aibrix) Deployments`}),`: Optimized for serving large language models with vLLM, featuring automatic horizontal scaling, tensor parallelism, and OpenAI-compatible API endpoints. For now, only single node inference is supported. Accessible at `,_jsx(_components.code,{children:`\u003cCOMPANY>.trainy.us`})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`General Deployments`}),`: Deploy any containerized application with automatic horizontal scaling and health checks. Accessible at `,_jsx(_components.code,{children:`\u003cCOMPANY>2.trainy.us`})]}),`\n`,_jsx(Heading,{level:`2`,id:`launch-a-deployment`,children:`Launch a deployment`}),`\n`,_jsxs(_components.p,{children:[`To launch a deployment, use the `,_jsx(_components.code,{children:`konduktor serve launch`}),` command shown below.`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`konduktor serve launch my_deployment.yaml`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`In this single command, Konduktor automatically creates the following resources:`}),`\n`,_jsxs(CardGroup,{cols:2,children:[_jsx(Card,{title:`VLLM`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Deployment:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`App Deployment`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Service:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`App Service`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`PodAutoscaler: (optional)`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`KPA (Knative-based Pod Autoscaler)`}),`\n`]}),`\n`]}),`\n`]})}),_jsx(Card,{title:`GENERAL`,children:_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Deployment:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`App Deployment`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Service:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`App Service`}),`\n`]}),`\n`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`PodAutoscaler: (optional)`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`HPA (Horizontal Pod Autoscaler)`}),`\n`]}),`\n`]}),`\n`]})})]}),`\n`,_jsxs(_components.p,{children:[`Below is a basic, but incomplete deployment YAML to show the general idea of how to get started. The format is the same as `,_jsx(_components.code,{children:`konduktor launch`}),` task.yamls for jobs, except serving includes an extra section for replicas, ports, and health endpoint probing. For full, detailed examples of `,_jsx(_components.code,{children:`deployment.yaml`}),`, check out the bottom of this page.`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`18`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`18`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`name: incomplete-deployment-example`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`resources:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` cpus: 4`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` memory: 32`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` accelerators: H100:1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# specific to konduktor serve`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`serving: `})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` min_replicas: 1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` max_replicas: 4`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ports: 9000`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` probe: /health`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`run: |`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`check-status`,children:`Check status`}),`\n`,_jsxs(_components.p,{children:[`To view your deployments, use the `,_jsx(_components.code,{children:`konduktor serve status`}),` command.\nInclude `,_jsx(_components.code,{children:`--all-users`}),` or `,_jsx(_components.code,{children:`-u`}),` to see all deployments from all users in the cluster.`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`konduktor serve status`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`konduktor serve status --all-users`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status.png?fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=0d031a467d16dc7113e1c846d7131ab7`,alt:`Konduktor Serve Status`,\"data-og-width\":`1604`,width:`1604`,\"data-og-height\":`420`,height:`420`,\"data-path\":`images/serve-status.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status.png?w=280\u0026fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=add53d9da308d04efb5405ff7caaf74b 280w, https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status.png?w=560\u0026fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=89324c8f41cd2650d163fd65db41d7dd 560w, https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status.png?w=840\u0026fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=5fff42b79519de263c82ba7a8c3abd19 840w, https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status.png?w=1100\u0026fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=3f9017d668008150b24380961cfe2337 1100w, https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status.png?w=1650\u0026fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=be2208bba47c3e3eddb36f036ebbc803 1650w, https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status.png?w=2500\u0026fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=a9ef620a4d117842d71a5531fc7eb3c7 2500w`}),`\n`,_jsxs(_components.p,{children:[`Optionally, use `,_jsx(_components.code,{children:`--direct`}),` to display direct IP endpoints instead of `,_jsx(_components.code,{children:`trainy.us`}),` endpoints.`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`konduktor serve status --direct`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Alternatively to using `,_jsx(_components.code,{children:`--direct`}),` every time, you can modify `,_jsx(_components.code,{children:`~/.konduktor/config.yaml`}),` as a permanent toggle for `,_jsx(_components.code,{children:`konduktor serve status --direct`}),` with:`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`serving: # optional`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` endpoint: {trainy, direct} # defaults to trainy`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status-direct.png?fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=1d13b3eed045fd0b5329de0cc9c86ed8`,alt:`Konduktor Serve Status Direct`,\"data-og-width\":`1234`,width:`1234`,\"data-og-height\":`420`,height:`420`,\"data-path\":`images/serve-status-direct.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status-direct.png?w=280\u0026fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=9732cbace6cb601851a3bfa4777c69df 280w, https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status-direct.png?w=560\u0026fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=24a036018c2f3ad9cc2e983d6702d157 560w, https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status-direct.png?w=840\u0026fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=ae014da9f775ea1b373ee1cc02718593 840w, https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status-direct.png?w=1100\u0026fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=f7a6058667ae83e82ba1c00894bc03cf 1100w, https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status-direct.png?w=1650\u0026fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=fdef55c083d10446a3e2de774daa0107 1650w, https://mintcdn.com/trainy/iTrX-pfUKti8oqoE/images/serve-status-direct.png?w=2500\u0026fit=max\u0026auto=format\u0026n=iTrX-pfUKti8oqoE\u0026q=85\u0026s=0583cd18ac8f3f0431b5ff466128207f 2500w`}),`\n`,_jsx(Heading,{level:`2`,id:`down-a-deployment`,children:`Down a deployment`}),`\n`,_jsxs(_components.p,{children:[`To delete a deployment, use the `,_jsx(_components.code,{children:`konduktor serve down`}),` command.\nInclude `,_jsx(_components.code,{children:`--all`}),` or `,_jsx(_components.code,{children:`-a`}),` to down all deployments from all users in the cluster.`]}),`\n`,_jsx(CodeBlock,{numberOfLines:`3`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`3`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`konduktor serve down \u003cDEPLOYMENT_NAME>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`konduktor serve down --all`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`accessing-deployments`,children:`Accessing Deployments`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`trainy.us`}),` endpoints use `,_jsx(_components.code,{children:`https`}),` while direct IP endpoints use `,_jsx(_components.code,{children:`http`}),`. Requests through `,_jsx(_components.code,{children:`trainy.us`}),` timeout after 60 seconds.`]}),`\n`,_jsx(Heading,{level:`3`,id:`vllm-aibrix`,children:`vLLM (Aibrix)`}),`\n`,_jsx(_components.p,{children:`Completion API:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`20`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`20`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# For trainy.us endpoint access:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl https://\u003cCOMPANY>.trainy.us/v1/completions \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`-H \"Content-Type: application/json\" \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`-d '{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"model\": \"\u003cDEPLOYMENT_NAME>\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"prompt\": \"San Francisco is a\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"max_tokens\": 128,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"temperature\": 0`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}'`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# For direct IP endpoint access:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl http://\u003cDIRECT_IP>/v1/completions \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`-H \"Content-Type: application/json\" \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`-d '{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"model\": \"\u003cDEPLOYMENT_NAME>\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"prompt\": \"San Francisco is a\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"max_tokens\": 128,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"temperature\": 0`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}'`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Output:\n`,_jsx(_components.code,{children:`top destination for tech companies, but it's also a hub for innovation and creativity. So, it's no surprise that the city has a vibrant food scene. From the iconic Golden Gate Bridge to the bustling streets of the Financial District, San Francisco offers a unique blend of culture, history, and modernity. When it comes to food, the city is known for its diverse cuisine, which reflects ...`})]}),`\n`,_jsx(_components.p,{children:`Chat Completion API`}),`\n`,_jsx(CodeBlock,{numberOfLines:`24`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`24`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# For trainy.us endpoint access:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl https://\u003cCOMPANY>.trainy.us/v1/chat/completions \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`-H \"Content-Type: application/json\" \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`-d '{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"model\": \"\u003cDEPLOYMENT_NAME>\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"messages\": [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` {\"role\": \"user\", \"content\": \"Help me write a random number generator function in python\"}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"max_tokens\": 128`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}'`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# For direct IP endpoint access:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl http://\u003cDIRECT_IP>/v1/chat/completions \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`-H \"Content-Type: application/json\" \\\\`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`-d '{`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"model\": \"\u003cDEPLOYMENT_NAME>\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"messages\": [`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` {\"role\": \"user\", \"content\": \"Help me write a random number generator function in python\"}`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` \"max_tokens\": 128`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`}'`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Output:\n`,_jsx(_components.code,{children:`Okay, so I need to help write a random number generator function in Python. Hmm, where do I start? I remember that Python has a module called random which provides functions for generating random numbers. So maybe I should use that. Let me think about what functions are available there.\\\\n\\\\nFirst, there's random.randint(a, b), which returns a random integer N between a and b, inclusive. That's useful. Then...`})]}),`\n`,_jsx(Heading,{level:`3`,id:`general`,children:`General`}),`\n`,_jsx(_components.p,{children:`Basic API:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# For trainy.us endpoint access:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl https://\u003cCOMPANY>.trainy.us/\u003cDEPLOYMENT_NAME>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# For direct IP endpoint access:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl -H \"Host: \u003cDEPLOYMENT_NAME>\" http://\u003cDIRECT_IP>`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Output: `,_jsx(_components.code,{children:`Hello from Konduktor Serve!`})]}),`\n`,_jsx(_components.p,{children:`Health Probe API`}),`\n`,_jsx(CodeBlock,{numberOfLines:`6`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# For trainy.us endpoint access:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl https://\u003cCOMPANY>.trainy.us/\u003cDEPLOYMENT_NAME>/health`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`# For direct IP endpoint access:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`curl -H \"Host: \u003cDEPLOYMENT_NAME>\" http://\u003cDIRECT_IP>/health`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Output: `,_jsx(_components.code,{children:`Hello from health probe!`})]}),`\n`,_jsx(Heading,{level:`2`,id:`autoscaling`,children:`Autoscaling`}),`\n`,_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`konduktor serve status`}),` to monitor the autoscaling process. The autoscaling process could take a few minutes, especially with a cold start from 0.`]}),`\n`,_jsx(Heading,{level:`3`,id:`scale-up-behavior`,children:`Scale-Up Behavior`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`0 —> 1`}),`: PA (Pod Autoscaler) triggers scale up immediately after the first request to the deployment endpoint.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`1 —> N`}),`: PA triggers scale up based on average request rate metrics collected over a 30-second window.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`scale-down-behavior`,children:`Scale-Down Behavior`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`vLLM (Aibrix) Deployments:`}),` - stair-step scale-down`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`N —> N-1`}),`: PA triggers scale down based on average request rate metrics collected over a 30-second window. Grace period of 30 mins `,_jsx(_components.strong,{children:`per pod`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`1 —> 0`}),`: PA triggers scale down to zero replicas after 30 minutes of no requests to the model.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`General Deployments:`}),` - fast scale-down`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`N —> 0`}),`: PA triggers a direct scale down to zero replicas after 20 minutes of no requests to the deployment.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`gpu-scheduling-behavior`,children:`GPU Scheduling Behavior`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Observed GKE Behavior:`})}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`GKE’s GPU scheduling can be inefficient and may not always utilize nodes optimally.`}),`\n`,_jsx(_components.li,{children:`GKE spins up new nodes even when existing nodes have sufficient GPU capacity.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`benchmarks`,children:`Benchmarks`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`vLLM (Aibrix) Deployments:`})}),`\n`,_jsx(_components.p,{children:`Throughput/Latency/Tokens`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/llm_token_results.png?fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=b947c2840d5770ba6d28159582b41e01`,alt:`Konduktor Serve Aibrix Throughput/Latency/Tokens`,\"data-og-width\":`4470`,width:`4470`,\"data-og-height\":`3542`,height:`3542`,\"data-path\":`images/plots/llm_token_results.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/llm_token_results.png?w=280\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=119cd3421114149dcc0eb21a52308b64 280w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/llm_token_results.png?w=560\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=af30e08259a54c57874ef09aefeaf13d 560w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/llm_token_results.png?w=840\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=c9564ee6810bbcd739a8190d653b27c0 840w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/llm_token_results.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=e5e8cec0868f60943d75a441789f2776 1100w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/llm_token_results.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=d405b40d8e358ef2462c228ee8b3db13 1650w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/llm_token_results.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=7620362c78d902162d57bb59d36d8f35 2500w`}),`\n`,_jsx(_components.p,{children:`Scale from 0 Cold Start Time (GKE GPUs), T4 and A100 respectively`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_t4.png?fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=25e30841df5c361f40262b1387cd0b30`,alt:`Konduktor Serve Aibrix Scale from 0 Cold Start Time (GKE T4 GPUs)`,\"data-og-width\":`4170`,width:`4170`,\"data-og-height\":`2955`,height:`2955`,\"data-path\":`images/plots/aibrix_cold_start_t4.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_t4.png?w=280\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=14c696f547f18d3d482964bd5cac8f9d 280w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_t4.png?w=560\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=7d7a07ef912b877166299ba08961f732 560w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_t4.png?w=840\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=dcf324325f00bdc1ccf16b4a6ce91e8e 840w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_t4.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=704701fac68a67f8f32d2b7a69ace8bc 1100w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_t4.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=126325541e589d1df85d249eb7747639 1650w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_t4.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=7fd73e5d442385146a705c825a3dcdd9 2500w`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_a100.png?fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=e377eed80aea6d783a43b8f29dbc3c3d`,alt:`Konduktor Serve Aibrix Scale from 0 Cold Start Time (GKE A100 GPUs)`,\"data-og-width\":`4170`,width:`4170`,\"data-og-height\":`2955`,height:`2955`,\"data-path\":`images/plots/aibrix_cold_start_a100.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_a100.png?w=280\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=1c95366d62c3180d292e0c86b90d90fd 280w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_a100.png?w=560\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=a98259f8a0d3379a40644f5f433b7a8c 560w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_a100.png?w=840\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=03370f843dd074b5164c841f2c66a262 840w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_a100.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=789398922818b48afbeb1feeb133e1fe 1100w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_a100.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=10cf48e9e7c3b3413f8e08581ccbc793 1650w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/aibrix_cold_start_a100.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=b3b059817ec9ea6ff9b5a7213e50eb1a 2500w`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`General Deployments:`})}),`\n`,_jsx(_components.p,{children:`Throughput/Latency/Errors`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/qps_general.png?fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=ff73b2e3b526e35971e1e62779dc81df`,alt:`Konduktor Serve General Throughput/Latency/Errors`,\"data-og-width\":`4470`,width:`4470`,\"data-og-height\":`3542`,height:`3542`,\"data-path\":`images/plots/qps_general.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/qps_general.png?w=280\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=4a0bf3a1e9adc52e6d7220afd50edb18 280w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/qps_general.png?w=560\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=28b99bdef55123e5dca4a11e17a4312f 560w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/qps_general.png?w=840\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=cf042dfa16c935df8418ad268af279c6 840w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/qps_general.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=064bb3312b3e24956423011df44cb4a3 1100w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/qps_general.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=ad0a809d09a80eb4013c5953fa55cdf1 1650w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/qps_general.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=addd4e516cf4b1ef35bb192d81708e7e 2500w`}),`\n`,_jsx(_components.p,{children:`Scale from 0 Cold Start Time (no GPUs)`}),`\n`,_jsx(OptimizedImage,{src:`https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/general_cold_start.png?fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=e67fc5010211dd0e6eea244153bb0c34`,alt:`Konduktor Serve General Scale from 0 Cold Start Time`,\"data-og-width\":`4170`,width:`4170`,\"data-og-height\":`2955`,height:`2955`,\"data-path\":`images/plots/general_cold_start.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/general_cold_start.png?w=280\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=56413a276fe6d72459da59a16692a4db 280w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/general_cold_start.png?w=560\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=f84723d270025c1f94bdd4d27e99fc42 560w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/general_cold_start.png?w=840\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=0c728139d040d250cd5709cf008e2578 840w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/general_cold_start.png?w=1100\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=629cf6ad4fc7f9706f2f69bc43cc5a0d 1100w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/general_cold_start.png?w=1650\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=236cfa31f39f422e04b28ebe52816196 1650w, https://mintcdn.com/trainy/qp6exLUgJCYJHh4w/images/plots/general_cold_start.png?w=2500\u0026fit=max\u0026auto=format\u0026n=qp6exLUgJCYJHh4w\u0026q=85\u0026s=6ea240a15c0908649db818853c914bab 2500w`}),`\n`,_jsx(Heading,{level:`2`,id:`example-yamls`,children:`Example YAMLs`}),`\n`,_jsx(Heading,{level:`3`,id:`schema`,children:`Schema`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/deployment-schema`,children:`Deployment Schema`}),` - Complete reference for deployment.yaml fields`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`general-2`,children:`General`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/deployments/simple-general`,children:`Simple`}),` (no autoscaling + default port (8000) + no health probing)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/deployments/complex-general`,children:`Complex`}),` (autoscaling + custom port + custom health probing endpoint)`]}),`\n`]}),`\n`,_jsx(Heading,{level:`3`,id:`vllm-aibrix-2`,children:`vLLM (Aibrix)`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/deployments/simple-vllm`,children:`Simple`}),` (no autoscaling + default port (8000) + single GPU)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/deployments/complex-vllm`,children:`Complex`}),` (autoscaling + custom port + multi GPU)`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Serving Deployments (Experimental)","description":"Konduktor makes serving general and vLLM deployments easy","href":"/deployments"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Launch a deployment","slug":"launch-a-deployment","depth":2,"children":[]},{"title":"Check status","slug":"check-status","depth":2,"children":[]},{"title":"Down a deployment","slug":"down-a-deployment","depth":2,"children":[]},{"title":"Accessing Deployments","slug":"accessing-deployments","depth":2,"children":[{"title":"vLLM (Aibrix)","slug":"vllm-aibrix","depth":3,"children":[]},{"title":"General","slug":"general","depth":3,"children":[]}]},{"title":"Autoscaling","slug":"autoscaling","depth":2,"children":[{"title":"Scale-Up Behavior","slug":"scale-up-behavior","depth":3,"children":[]},{"title":"Scale-Down Behavior","slug":"scale-down-behavior","depth":3,"children":[]},{"title":"GPU Scheduling Behavior","slug":"gpu-scheduling-behavior","depth":3,"children":[]}]},{"title":"Benchmarks","slug":"benchmarks","depth":2,"children":[]},{"title":"Example YAMLs","slug":"example-yamls","depth":2,"children":[{"title":"Schema","slug":"schema","depth":3,"children":[]},{"title":"General","slug":"general-2","depth":3,"children":[]},{"title":"vLLM (Aibrix)","slug":"vllm-aibrix-2","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"trainy","siteName":"Trainy Konduktor","title":"Serving Deployments (Experimental) - Trainy Konduktor","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-01-28T01:24:23.739Z","originalFileLocation":"deployments.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Konduktor makes serving general and vLLM deployments easy\">\u003cmeta data-mint-head name=\"application-name\" content=\"Trainy Konduktor\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/trainy/rockd6CB-Yto9fqu/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/trainy/rockd6CB-Yto9fqu/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/trainy/rockd6CB-Yto9fqu/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/trainy/rockd6CB-Yto9fqu/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/trainy/rockd6CB-Yto9fqu/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/trainy/rockd6CB-Yto9fqu/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/trainy/rockd6CB-Yto9fqu/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/trainy/rockd6CB-Yto9fqu/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/trainy/rockd6CB-Yto9fqu/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Serving Deployments (Experimental) - Trainy Konduktor\">\u003cmeta data-mint-head property=\"og:description\" content=\"Konduktor makes serving general and vLLM deployments easy\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Trainy Konduktor\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.trainy.ai/deployments\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://trainy.mintlify.app/_mintlify/api/og/v2?division=Get+Started\u0026amp;title=Serving+Deployments+%28Experimental%29\u0026amp;description=Konduktor+makes+serving+general+and+vLLM+deployments+easy\u0026amp;theme=3d9c285da33ee525cd476c3d\u0026amp;signature=af59900db964a43e3477776ea5ab1dd87357b1ca24cf3d288a466e108d0359fc\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Serving Deployments (Experimental) - Trainy Konduktor\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Konduktor makes serving general and vLLM deployments easy\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://trainy.mintlify.app/_mintlify/api/og/v2?division=Get+Started\u0026amp;title=Serving+Deployments+%28Experimental%29\u0026amp;description=Konduktor+makes+serving+general+and+vLLM+deployments+easy\u0026amp;theme=3d9c285da33ee525cd476c3d\u0026amp;signature=af59900db964a43e3477776ea5ab1dd87357b1ca24cf3d288a466e108d0359fc\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/trainy/rockd6CB-Yto9fqu/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Trainy Konduktor\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#F07900\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.trainy.ai/deployments\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/deployments.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.trainy.ai/#organization\",\"name\":\"Trainy Konduktor\",\"url\":\"https://docs.trainy.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/trainy/l_Z-YzGUiwLATp8A/trainy.svg?fit=max\u0026auto=format\u0026n=l_Z-YzGUiwLATp8A\u0026q=85\u0026s=a69ed11bf7bc11900bbf4631c26f5b72\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.trainy.ai#website\",\"name\":\"Trainy Konduktor\",\"url\":\"https://docs.trainy.ai\",\"publisher\":{\"@id\":\"https://docs.trainy.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.trainy.ai/deployments#webpage\",\"url\":\"https://docs.trainy.ai/deployments\",\"name\":\"Serving Deployments (Experimental)\",\"description\":\"Konduktor makes serving general and vLLM deployments easy\",\"dateModified\":\"2026-01-28T01:24:23.739Z\",\"isPartOf\":{\"@id\":\"https://docs.trainy.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.trainy.ai/deployments#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.trainy.ai/deployments#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Get Started\",\"item\":\"https://docs.trainy.ai/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Serving Deployments (Experimental)\",\"item\":\"https://docs.trainy.ai/deployments\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.trainy.ai/deployments#article\",\"headline\":\"Serving Deployments (Experimental)\",\"name\":\"Serving Deployments (Experimental)\",\"description\":\"Konduktor makes serving general and vLLM deployments easy\",\"url\":\"https://docs.trainy.ai/deployments\",\"mainEntityOfPage\":{\"@id\":\"https://docs.trainy.ai/deployments#webpage\"},\"dateModified\":\"2026-01-28T01:24:23.739Z\",\"publisher\":{\"@id\":\"https://docs.trainy.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.trainy.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Trainy Konduktor\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Trainy Konduktor","nav":{"global":{"anchors":[{"anchor":"Community","icon":"discord","href":"https://discord.com/invite/HQUBJSVgAP"},{"anchor":"Blog","icon":"newspaper","href":"https://trainy.ai/blog"}]},"products":[{"product":"Konduktor","tabs":[{"tab":"Konduktor","groups":[{"group":"Get Started","pages":[{"title":"Overview","href":"/overview"},{"title":"Setup","href":"/setup"},{"title":"Quickstart","href":"/quickstart"},{"title":"Submit jobs through Trainy Hub","href":"/hub-quickstart"},{"title":"Common Commands","href":"/commands"},{"title":"File Sync on Launch","href":"/launch-file-sync"},{"title":"File Sync during Run","href":"/runtime-file-sync"},{"title":"Distributed Multi-Node Jobs","href":"/distributed-jobs"},{"title":"Many Parallel Jobs","href":"/many-jobs"},{"title":"Run Lifecycle","href":"/lifecycle"},{"title":"Get Started with Grafana","href":"/observability"},{"title":"Managing Secrets","href":"/secrets"},{"title":"Environment Variables","href":"/env-vars"},{"title":"Python API","href":"/python-api"},{"title":"Return values from jobs","href":"/return-values"},{"title":"Tailscale Interactive SSH (Experimental)","description":"Connect to your workloads via Tailscale SSH for interactive development and debugging","href":"/tailscale"},{"title":"Serving Deployments (Experimental)","href":"/deployments"}]},{"group":"CLI","pages":[{"title":"CLI Reference","description":"Reference for the Konduktor CLI","href":"/cli-reference"}]},{"group":"User Guides","pages":[{"title":"Authentication","href":"/authentication"},{"group":"Minimal Cloud Permissions","pages":[{"title":"GCP - gs","href":"/minimal-cloud-permissions/GCP"},{"title":"AWS - s3","href":"/minimal-cloud-permissions/AWS"}]},{"group":"Troubleshooting","pages":[{"title":"Troubleshooting \u0026 FAQ GCP","href":"/troubleshooting/GCP"}]}]},{"group":"Cluster Operators","pages":[{"title":"Enroll a worker cluster","href":"/cluster-enrollment"},{"title":"Install Cluster Telemetry","href":"/cluster-telemetry"}]}]},{"tab":"Examples","pages":[{"title":"Examples","href":"/config-schema"}]}]},{"product":"Pluto","pages":[{"title":"Pluto","href":"/pluto/overview"}]}]},"basePath":"","title":"Serving Deployments (Experimental) - Trainy Konduktor","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["10e4515597","a74be98ba7"],"chunks":["BannerMarkdown-CX_qQQOL.js","dist-BTZUMDnx.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-xpJZXxdP.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","zoom-image-lightbox-BG6oD64b.js","lightbox-handle-r17bVUz3.js"]}