The control plane is a low-latency, containerized service, which serves the platform’s user interface and APIs.
It runs on CPU and needs as little as 4vCPU and 16GB memory.
The compute plane is a high-performance, multi-modal, multi-GPU, multi-node AI computing framework capable
of large scale model training and inference. It is purpose-built for the most demanding modern AI workloads,
including reinforcement learning (RL), pre-training, and high-concurrency multi-model inference
The compute plane is compatible with the following NVIDIA GPUs: L4, L40, L40S, H100, H200, B200, GB200.
The compute plane can run both on multi-GPU servers or single-GPU servers.
The presence of intra-node GPU interconnect (NVLink and NVSwitch) is optional, though strongly recommended for
training and large-model inference.
The compute plane is compatible with PCIe-connected multi-GPU servers, such as Amazon EC2 g6.12xlarge or g6e.12xlarge.
Adaptive Engine 0.11 and above will not support NVIDIA A100.
The database is a v16+ Postgres database which stores model interactions and application metadata, including user permissions and settings.
To enforce maximum security, blocking permissions checks are run at each inference, meaning the database must be located sufficiently close
to the control plane to avoid penalizing inference performance.
Redis is used to transfer events between compute plane and control plane, report usage statistics and store real-time metadata. Redis can be either
locally-deployed in the same cluster as Adaptive Engine containers, or be a remote Redis such as a managed cloud offering or a customer-managed instance.
Adaptive Engine is built on open standards (Linux, Postgres, Rust, Docker) ensuring low infrastructure lock-in and high portability.
Adaptive Engine clusters have been successfully deployed across hyperscalers (AWS, Google Cloud, Microsoft Azure), several neoclouds and
on-premises data centers across Asia, Europe and North America.
The five Adaptive Engine components can be all collocated, so that an Adaptive Engine cluster can
technically fit within a single self-sufficient server with no reliance on any extra cloud services.
In practice, for sustained use we recommend the use of an external database and an external storage
to facilitate the independent scaling of each component, increase availability and limit the blast radius of failures.
We recommend GPU VMs to have 300GB+ of local storage to accommodate Docker images and model local cache.
A compute pool is a cell of one or multiple homogeneous servers that receives one or multiple GPU workloads.There are two types of compute pools:
Inference pools support inference endpoints only, and can optionally be autoscaled. Read more in the Adaptive Engine Helm Chart.
Static pools support an arbitrary amount of stateful servers and cannot be autoscaled. They can however be scaled up and down programmatically with minor transition time.
An Adaptive Engine cluster can accommodate multiple inference pools and multiple static pools, for example representing different capacity reservations or
different instance/GPU types.
Inference endpoints, which serve models for low-latency, high-throughput real-time inference and offer a variety of features and controls.
Read more in the inference optimization page.
Recipe runs, which are scripted, used-defined batch tasks. Model training, fine-tuning, data generation and evaluation can be scripted as recipe runs. Read more about runs in the runs page.
Interactive sessions, which allow you to directly connect to a GPU via Secure WebSockets for real-time, remote execution of client-side code. Read more about sessions in the recipe page.
Adaptive Engine GPU workloads target one or multiple compute pools:
Inference endpoints can run on a combination of multiple inference or static compute pools, making your model deployments scalable and fault-tolerant.
Recipe runs and interactive sessions run only on static pools.
Within a static pool, it is possible to control the amount of GPUs allocated to recipe runs and interactive sessions using the environment variable ADAPTIVE_EXCLUSIVE_PARTITION_SIZE.
For example, on a static pool of 8 x H200 servers cumulating a total of 64 H200 GPUs, ADAPTIVE_EXCLUSIVE_PARTITION_SIZE=60 means that 4 GPUs will be reserved for inference endpoint deployment, and 60 for recipe runs and interactive sessions.
Was this page helpful?
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Adaptive ML Documentation","colors":{"primary":"#275AF1","light":"#80a0fe","dark":"#275AF1"},"logo":{"light":"https://mintcdn.com/adaptiveml/nxrXfjE5HXjTB4Su/logo/new_adaptive_logo.png?fit=max\u0026auto=format\u0026n=nxrXfjE5HXjTB4Su\u0026q=85\u0026s=533f3281b841f120ead3f47eeea805b3","dark":"https://mintcdn.com/adaptiveml/nxrXfjE5HXjTB4Su/logo/new_adaptive_logo_white.png?fit=max\u0026auto=format\u0026n=nxrXfjE5HXjTB4Su\u0026q=85\u0026s=e22d3354dfdbdfd4e092e3ada58c6c75"},"favicon":"https://mintcdn.com/adaptiveml/vkPwKLK0frhpPFY8/logo/purple_fav.svg?fit=max\u0026auto=format\u0026n=vkPwKLK0frhpPFY8\u0026q=85\u0026s=102965f15a992970771bf3b16a08ccf2","navbar":{"primary":{"type":"button","label":"Contact Us","href":"https://www.adaptive-ml.com/"}},"footer":{"socials":{"x":"https://twitter.com/AdaptiveML","linkedin":"https://www.linkedin.com/company/adaptive-ml"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"adaptiveml","hasAudioNarration":false,"actualSubdomain":"adaptiveml","customDomains":["docs.adaptive-ml.com"],"gitSource":{"type":"github","owner":"adaptive-ml","repo":"adaptonomicon","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21e65633a4518725aab6dc","collectionId":"b7dacaa6-345e-4648-a28b-558d6a3a3648","schemaVersion":"v2"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae922285bfa35cf904498af:success","clientVersion":"0.0.4071","searchFilterCounts":[{"language":"default","tag":"Harmony","count":52},{"language":"default","tag":"Adaptive Engine","count":38},{"language":"default","tag":"Core","count":17},{"language":"default","tag":"Building Blocks","count":16},{"language":"default","tag":"Advanced","count":12},{"language":"default","tag":"Training \u0026 Evaluation","count":12},{"language":"default","tag":"Cookbook","count":12},{"language":"default","tag":"Getting Started","count":10},{"language":"default","tag":"Custom graders","count":8},{"language":"default","tag":"Deploy","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":"rbac-expansion","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":"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":"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},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":".walkthrough-iframe{width:100%!important;border:none!important;background:transparent!important;aspect-ratio:5/4!important}@media (max-width: 600px){.walkthrough-iframe{aspect-ratio:1/1!important}}"}],"page":{"pagePath":"v0.10/platform/system-architecture","slug":"/v0.10/platform/system-architecture","pageMetadata":{"title":"System architecture","description":"Adaptive Engine system architecture and components","noindex":true,"href":"/v0.10/platform/system-architecture"},"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: \"Adaptive Engine system architecture and components\"\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`,ol:`ol`,p:`p`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Frame,Heading,OptimizedImage,Table,Warning}=_components;if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`An Adaptive Engine cluster consists of 5 architectural components:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Control plane`}),`: hosts the UI, permissions system and user-facing APIs.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Compute plane`}),`: spans one or multiple GPU servers, runs AI inference and training.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Shared storage`}),`: stores model files and training artifacts.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Postgres database`}),`: stores model interactions, projects metadata and overall application state.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Redis data store`}),`: stores job events and usage statistics.`]}),`\n`]}),`\n`,_jsx(Frame,{caption:_jsx(_components.span,{children:`High-level overview of Adaptive Engine system architecture`}),children:_jsx(OptimizedImage,{src:`https://mintcdn.com/adaptiveml/yzzpVsRf0ipPQg1A/static/arch-overview-redis.png?fit=max\u0026auto=format\u0026n=yzzpVsRf0ipPQg1A\u0026q=85\u0026s=88380fa661aaecceb05a655df2c42016`,\"data-og-width\":`2360`,width:`2360`,\"data-og-height\":`998`,height:`998`,\"data-path\":`static/arch-overview-redis.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/adaptiveml/yzzpVsRf0ipPQg1A/static/arch-overview-redis.png?w=280\u0026fit=max\u0026auto=format\u0026n=yzzpVsRf0ipPQg1A\u0026q=85\u0026s=f9e63bb2275430740a947bb342c80510 280w, https://mintcdn.com/adaptiveml/yzzpVsRf0ipPQg1A/static/arch-overview-redis.png?w=560\u0026fit=max\u0026auto=format\u0026n=yzzpVsRf0ipPQg1A\u0026q=85\u0026s=c8d81eebbc3b999fa84c5b428155f340 560w, https://mintcdn.com/adaptiveml/yzzpVsRf0ipPQg1A/static/arch-overview-redis.png?w=840\u0026fit=max\u0026auto=format\u0026n=yzzpVsRf0ipPQg1A\u0026q=85\u0026s=06a3f12947172c04f5def21bec1df6b2 840w, https://mintcdn.com/adaptiveml/yzzpVsRf0ipPQg1A/static/arch-overview-redis.png?w=1100\u0026fit=max\u0026auto=format\u0026n=yzzpVsRf0ipPQg1A\u0026q=85\u0026s=ef013512c4f394bc44ea037a34af9675 1100w, https://mintcdn.com/adaptiveml/yzzpVsRf0ipPQg1A/static/arch-overview-redis.png?w=1650\u0026fit=max\u0026auto=format\u0026n=yzzpVsRf0ipPQg1A\u0026q=85\u0026s=1b2e7420bec5b15c7c9d720540c054f1 1650w, https://mintcdn.com/adaptiveml/yzzpVsRf0ipPQg1A/static/arch-overview-redis.png?w=2500\u0026fit=max\u0026auto=format\u0026n=yzzpVsRf0ipPQg1A\u0026q=85\u0026s=a316eaf2a50fb07dd5204325512a7977 2500w`})}),`\n`,_jsx(Heading,{level:`2`,id:`components`,children:`Components`}),`\n`,_jsx(Heading,{level:`3`,id:`control-plane`,children:`Control plane`}),`\n`,_jsx(_components.p,{children:`The control plane is a low-latency, containerized service, which serves the platform’s user interface and APIs.\nIt runs on CPU and needs as little as 4vCPU and 16GB memory.`}),`\n`,_jsx(Heading,{level:`3`,id:`compute-plane`,children:`Compute plane`}),`\n`,_jsx(_components.p,{children:`The compute plane is a high-performance, multi-modal, multi-GPU, multi-node AI computing framework capable\nof large scale model training and inference. It is purpose-built for the most demanding modern AI workloads,\nincluding reinforcement learning (RL), pre-training, and high-concurrency multi-model inference`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The compute plane is compatible with the following NVIDIA GPUs: L4, L40, L40S, H100, H200, B200, GB200.`}),`\n`,_jsx(_components.li,{children:`The compute plane can run both on multi-GPU servers or single-GPU servers.`}),`\n`,_jsx(_components.li,{children:`The presence of intra-node GPU interconnect (NVLink and NVSwitch) is optional, though strongly recommended for\ntraining and large-model inference.`}),`\n`,_jsx(_components.li,{children:`The compute plane is compatible with PCIe-connected multi-GPU servers, such as Amazon EC2 g6.12xlarge or g6e.12xlarge.`}),`\n`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Adaptive Engine 0.11 and above will not support NVIDIA A100.`})}),`\n`,_jsx(Heading,{level:`3`,id:`shared-storage`,children:`Shared storage`}),`\n`,_jsx(_components.p,{children:`The shared storage stores model files and datasets. It can be any POSIX-compatible storage (local disk, NFS) or S3-compatible object storage.`}),`\n`,_jsx(Heading,{level:`3`,id:`database`,children:`Database`}),`\n`,_jsx(_components.p,{children:`The database is a v16+ Postgres database which stores model interactions and application metadata, including user permissions and settings.\nTo enforce maximum security, blocking permissions checks are run at each inference, meaning the database must be located sufficiently close\nto the control plane to avoid penalizing inference performance.`}),`\n`,_jsx(Heading,{level:`3`,id:`redis-data-store`,children:`Redis data store`}),`\n`,_jsx(_components.p,{children:`Redis is used to transfer events between compute plane and control plane, report usage statistics and store real-time metadata. Redis can be either\nlocally-deployed in the same cluster as Adaptive Engine containers, or be a remote Redis such as a managed cloud offering or a customer-managed instance.`}),`\n`,_jsx(Heading,{level:`3`,id:`examples`,children:`Examples`}),`\n`,_jsx(_components.p,{children:`The below table gives examples of cloud services that can power each component:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{style:{textAlign:`center`},children:`Component`}),_jsx(_components.th,{style:{textAlign:`center`},children:`AWS`}),_jsx(_components.th,{style:{textAlign:`center`},children:`GCP`}),_jsx(_components.th,{style:{textAlign:`center`},children:`Azure`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`center`},children:`Control \u0026 compute planes`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Amazon EC2, EKS`}),_jsx(_components.td,{style:{textAlign:`center`},children:`GCE, GKE`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Azure VM, AKS`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`center`},children:`Shared storage`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Amazon S3, FSx for Lustre`}),_jsx(_components.td,{style:{textAlign:`center`},children:`GCS, Filestore`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Azure Files NFS`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`center`},children:`Postgres database`}),_jsx(_components.td,{style:{textAlign:`center`},children:`RDS PostgreSQL, Aurora`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Cloud SQL, AlloyDB`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Azure Database for PostgreSQL`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{style:{textAlign:`center`},children:`Redis datastore`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Amazon Elasticache`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Memorystore for Redis`}),_jsx(_components.td,{style:{textAlign:`center`},children:`Azure Managed Redis`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`architecture-observations`,children:`Architecture observations`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Adaptive Engine is built on `,_jsx(_components.strong,{children:`open standards`}),` (Linux, Postgres, Rust, Docker) ensuring low infrastructure lock-in and high portability.\nAdaptive Engine clusters have been successfully deployed across hyperscalers (AWS, Google Cloud, Microsoft Azure), several neoclouds and\non-premises data centers across Asia, Europe and North America.`]}),`\n`,_jsxs(_components.li,{children:[`The five Adaptive Engine components can be all `,_jsx(_components.strong,{children:`collocated`}),`, so that an Adaptive Engine cluster can\ntechnically fit within a single self-sufficient server with no reliance on any extra cloud services.`]}),`\n`,_jsx(_components.li,{children:`In practice, for sustained use we recommend the use of an external database and an external storage\nto facilitate the independent scaling of each component, increase availability and limit the blast radius of failures.`}),`\n`,_jsx(_components.li,{children:`We recommend GPU VMs to have 300GB+ of local storage to accommodate Docker images and model local cache.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`compute-plane-deep-dive`,children:`Compute plane deep dive`}),`\n`,_jsx(Frame,{caption:_jsx(_components.span,{children:`Detailed architecture of a fictional Amazon EKS deployment with an H200-based static pool for training and a G6e autoscaled pool for inference.`}),children:_jsx(OptimizedImage,{src:`https://mintcdn.com/adaptiveml/z4z70NKCV_h4-Dnh/static/arch-deep-dive.png?fit=max\u0026auto=format\u0026n=z4z70NKCV_h4-Dnh\u0026q=85\u0026s=4d43695ec2d432aa00046b709553e861`,\"data-og-width\":`3276`,width:`3276`,\"data-og-height\":`1238`,height:`1238`,\"data-path\":`static/arch-deep-dive.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/adaptiveml/z4z70NKCV_h4-Dnh/static/arch-deep-dive.png?w=280\u0026fit=max\u0026auto=format\u0026n=z4z70NKCV_h4-Dnh\u0026q=85\u0026s=7e13d3a54ba32f14bf1f632280129678 280w, https://mintcdn.com/adaptiveml/z4z70NKCV_h4-Dnh/static/arch-deep-dive.png?w=560\u0026fit=max\u0026auto=format\u0026n=z4z70NKCV_h4-Dnh\u0026q=85\u0026s=0da118830d4165b2671d19aeac7de03f 560w, https://mintcdn.com/adaptiveml/z4z70NKCV_h4-Dnh/static/arch-deep-dive.png?w=840\u0026fit=max\u0026auto=format\u0026n=z4z70NKCV_h4-Dnh\u0026q=85\u0026s=df14a48d45b73969091f0afb4260ed2d 840w, https://mintcdn.com/adaptiveml/z4z70NKCV_h4-Dnh/static/arch-deep-dive.png?w=1100\u0026fit=max\u0026auto=format\u0026n=z4z70NKCV_h4-Dnh\u0026q=85\u0026s=5587fb86ce697c9226478fdd6e211ed6 1100w, https://mintcdn.com/adaptiveml/z4z70NKCV_h4-Dnh/static/arch-deep-dive.png?w=1650\u0026fit=max\u0026auto=format\u0026n=z4z70NKCV_h4-Dnh\u0026q=85\u0026s=6ecce276f6e2f52ee35ec6487e9f69a9 1650w, https://mintcdn.com/adaptiveml/z4z70NKCV_h4-Dnh/static/arch-deep-dive.png?w=2500\u0026fit=max\u0026auto=format\u0026n=z4z70NKCV_h4-Dnh\u0026q=85\u0026s=b059750e7abbf2732fd2493028c9057f 2500w`})}),`\n`,_jsx(Heading,{level:`3`,id:`compute-pools`,children:`Compute pools`}),`\n`,_jsx(_components.p,{children:`A compute pool is a cell of one or multiple homogeneous servers that receives one or multiple GPU workloads.`}),`\n`,_jsx(_components.p,{children:`There are two types of compute pools:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Inference pools`}),` support inference endpoints only, and can optionally be autoscaled. Read more in the `,_jsx(_components.a,{href:`https://github.com/adaptive-ml/adaptive-helm-chart/tree/main?tab=readme-ov-file#prerequisites`,children:`Adaptive Engine Helm Chart`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Static pools`}),` support an arbitrary amount of stateful servers and cannot be autoscaled. They can however be scaled up and down programmatically with minor transition time.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`An Adaptive Engine cluster can accommodate multiple inference pools and multiple static pools, for example representing different capacity reservations or\ndifferent instance/GPU types.`}),`\n`,_jsx(Heading,{level:`3`,id:`gpu-workloads`,children:`GPU workloads`}),`\n`,_jsx(_components.p,{children:`Adaptive Engine runs 3 types of GPU workloads:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Inference endpoints`}),`, which serve models for low-latency, high-throughput real-time inference and offer a variety of features and controls.\nRead more in the `,_jsx(_components.a,{href:`/v0.10/inference/optimization`,children:`inference optimization`}),` page.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Recipe runs`}),`, which are scripted, used-defined batch tasks. Model training, fine-tuning, data generation and evaluation can be scripted as recipe runs. Read more about runs in the `,_jsx(_components.a,{href:`/v0.10/recipes/runs`,children:`runs`}),` page.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Interactive sessions`}),`, which allow you to directly connect to a GPU via Secure WebSockets for real-time, remote execution of client-side code. Read more about sessions in the `,_jsx(_components.a,{href:`/v0.10/recipes/recipes`,children:`recipe`}),` page.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Adaptive Engine GPU workloads target one or multiple compute pools:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Inference endpoints can run on a combination of multiple inference or static compute pools, making your model deployments scalable and fault-tolerant.`}),`\n`,_jsx(_components.li,{children:`Recipe runs and interactive sessions run only on static pools.`}),`\n`,_jsxs(_components.li,{children:[`Within a static pool, it is possible to control the amount of GPUs allocated to recipe runs and interactive sessions using the environment variable `,_jsx(_components.code,{children:`ADAPTIVE_EXCLUSIVE_PARTITION_SIZE`}),`.\nFor example, on a static pool of 8 x H200 servers cumulating a total of 64 H200 GPUs, `,_jsx(_components.code,{children:`ADAPTIVE_EXCLUSIVE_PARTITION_SIZE=60`}),` means that 4 GPUs will be reserved for inference endpoint deployment, and 60 for recipe runs and interactive sessions.`]}),`\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":"System architecture","description":"Adaptive Engine system architecture and components","noindex":true,"href":"/v0.10/platform/system-architecture"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Components","slug":"components","depth":2,"children":[{"title":"Control plane","slug":"control-plane","depth":3,"children":[]},{"title":"Compute plane","slug":"compute-plane","depth":3,"children":[]},{"title":"Shared storage","slug":"shared-storage","depth":3,"children":[]},{"title":"Database","slug":"database","depth":3,"children":[]},{"title":"Redis data store","slug":"redis-data-store","depth":3,"children":[]},{"title":"Examples","slug":"examples","depth":3,"children":[]},{"title":"Architecture observations","slug":"architecture-observations","depth":3,"children":[]}]},{"title":"Compute plane deep dive","slug":"compute-plane-deep-dive","depth":2,"children":[{"title":"Compute pools","slug":"compute-pools","depth":3,"children":[]},{"title":"GPU workloads","slug":"gpu-workloads","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"adaptiveml","siteName":"Adaptive ML Documentation","title":"System architecture - Adaptive ML Documentation","navMaps":{"firstHrefInVersion":{"v0.14":{"href":"/v0.14/introduction","matchLevel":4},"v0.13":{"href":"/v0.13/introduction","matchLevel":4},"v0.12":{"href":"/v0.12/introduction","matchLevel":4},"v0.11":{"href":"/v0.11/introduction","matchLevel":4},"v0.10":{"href":"/v0.10/platform/system-architecture","matchLevel":0},"v0.8":{"href":"/v0.8/platform/system-architecture","matchLevel":1,"noindex":true},"v0.7":{"href":"/v0.7/platform/system-architecture","matchLevel":1,"noindex":true},"v0.6":{"href":"/v0.6/concepts/overview","matchLevel":2},"v0.5":{"href":"/v0.5/concepts/overview","matchLevel":2}},"firstHrefInLanguage":{}},"lastModified":"2026-01-26T01:47:33.604Z","originalFileLocation":"v0.10/platform/system-architecture.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=\"Adaptive Engine system architecture and components\">\u003cmeta data-mint-head name=\"application-name\" content=\"Adaptive ML Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"noindex\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/adaptiveml/TKzRz13HIqHOqpDr/_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/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/adaptiveml/TKzRz13HIqHOqpDr/_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/adaptiveml/TKzRz13HIqHOqpDr/_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/adaptiveml/TKzRz13HIqHOqpDr/_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/adaptiveml/TKzRz13HIqHOqpDr/_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/adaptiveml/TKzRz13HIqHOqpDr/_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/adaptiveml/TKzRz13HIqHOqpDr/_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/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"System architecture - Adaptive ML Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Adaptive Engine system architecture and components\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Adaptive ML Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.adaptive-ml.com/v0.10/platform/system-architecture\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://adaptiveml.mintlify.app/_mintlify/api/og/v2?division=Platform\u0026amp;title=System+architecture\u0026amp;description=Adaptive+Engine+system+architecture+and+components\u0026amp;theme=e2be52ca69cd8e6c4f326c14\u0026amp;signature=6e1e5c8b258c6f703fab2f1a16a33552926963a89dd517e2a93c2d08c4ebfbaf\">\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=\"System architecture - Adaptive ML Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Adaptive Engine system architecture and components\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://adaptiveml.mintlify.app/_mintlify/api/og/v2?division=Platform\u0026amp;title=System+architecture\u0026amp;description=Adaptive+Engine+system+architecture+and+components\u0026amp;theme=e2be52ca69cd8e6c4f326c14\u0026amp;signature=6e1e5c8b258c6f703fab2f1a16a33552926963a89dd517e2a93c2d08c4ebfbaf\">\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/adaptiveml/TKzRz13HIqHOqpDr/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Adaptive ML Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#275AF1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.adaptive-ml.com/v0.10/platform/system-architecture\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/v0.10/platform/system-architecture.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Adaptive ML Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Adaptive ML Documentation","nav":{"global":null,"versions":[{"version":"v0.14","default":true,"pages":[{"title":"v0.14","href":"/v0.14/introduction"}]},{"version":"v0.13","default":true,"pages":[{"title":"v0.13","href":"/v0.13/introduction"}]},{"version":"v0.12","pages":[{"title":"v0.12","href":"/v0.12/introduction"}]},{"version":"v0.11","pages":[{"title":"v0.11","href":"/v0.11/introduction"}]},{"version":"v0.10","tabs":[{"tab":"Documentation","groups":[{"group":" ","pages":[{"title":"Release notes","href":"/release-notes"},{"title":"Getting Started","href":"/v0.10/introduction/introduction"},{"title":"Quickstart example","href":"/v0.10/introduction/quickstart"}]},{"group":"Platform","pages":[{"title":"Concepts","description":"A rundown of Adaptive Engine and its functional components","href":"/v0.10/platform/concepts"},{"title":"System architecture","href":"/v0.10/platform/system-architecture"},{"title":"Permissions, roles and teams","description":"Manage permissions, roles and teams in Adaptive Engine","href":"/v0.10/platform/permissions"},{"title":"API Authentication","href":"/v0.10/platform/authentication"},{"title":"Use cases","href":"/v0.10/platform/use-cases"},{"title":"Models","href":"/v0.10/platform/models"}]},{"group":"Inference","pages":[{"title":"Make inference requests","href":"/v0.10/inference/make_requests"},{"title":"Inference optimization tips","href":"/v0.10/inference/optimization"}]},{"group":"Evaluation","pages":[{"title":"Evaluate Models","href":"/v0.10/evaluation/evaluate"},{"title":"A/B Tests","href":"/v0.10/evaluation/ab_testing"}]},{"group":"Graders","pages":[{"title":"Overview","href":"/v0.10/graders/overview"},{"title":"AI Judges","href":"/v0.10/graders/ai_judge"},{"title":"Pre-built AI Judges","href":"/v0.10/graders/prebuilt"},{"title":"Reward servers","href":"/v0.10/graders/reward-servers"},{"title":"Recipe Grader","href":"/v0.10/graders/recipe_grader"}]},{"group":"Recipes \u0026 Runs","pages":[{"title":"Recipes","href":"/v0.10/recipes/recipes"},{"title":"Runs","href":"/v0.10/recipes/runs"},{"group":"Writing custom recipes","pages":[{"title":"Prerequisites and setup","href":"/v0.10/recipes/guides/install"},{"title":"Harmony client and local testing","href":"/v0.10/recipes/guides/harmony_client"},{"title":"Recipe syntax","href":"/v0.10/recipes/guides/intro_synthax"},{"title":"Input configuration","href":"/v0.10/recipes/guides/config"},{"title":"Load models","href":"/v0.10/recipes/guides/models"},{"title":"Load datasets and StringThread","href":"/v0.10/recipes/guides/datasets"},{"title":"Load Graders","href":"/v0.10/recipes/guides/product_graders"},{"title":"Structured generation","href":"/v0.10/recipes/guides/structured_output"},{"title":"Create a Recipe Grader","href":"/v0.10/recipes/guides/graders"},{"title":"Create a training recipe","href":"/v0.10/recipes/guides/training"},{"title":"Create an evaluation recipe","href":"/v0.10/recipes/guides/eval"},{"title":"Progress reporting","href":"/v0.10/recipes/guides/progress"}]}]},{"group":"Datasets","pages":[{"title":"Upload datasets","href":"/v0.10/datasets/upload"}]},{"group":"Interactions","pages":[{"title":"Overview","href":"/v0.10/interactions/overview"},{"title":"Feedback","href":"/v0.10/interactions/feedback"}]},{"group":"Integrations","pages":[{"title":"LangChain","href":"/v0.10/integrations/langchain"},{"title":"Connect proprietary models","href":"/v0.10/integrations/proprietary-models"}]},{"group":"Deployment","pages":[{"group":"Self-hosting on Kubernetes","pages":[{"title":"Prerequisites \u0026 checklist","href":"/v0.10/deployment/helm"},{"title":"Advanced considerations","href":"/v0.10/deployment/advanced-considerations"}]}]}]},{"tab":"SDK Reference","pages":[{"title":"SDK Reference","href":"/v0.10/sdk-reference/reference"}]}]},{"version":"v0.8","pages":[{"title":"v0.8","href":"/v0.8/platform/system-architecture"}]},{"version":"v0.7","pages":[{"title":"v0.7","href":"/v0.7/platform/system-architecture"}]},{"version":"v0.6","pages":[{"title":"v0.6","href":"/v0.6/concepts/overview"}]},{"version":"v0.5","pages":[{"title":"v0.5","href":"/v0.5/concepts/overview"}]}]},"basePath":"","title":"System architecture - Adaptive ML Documentation","buildId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","deploymentId":"dpl_GZsjphRpnhWkstV12jxWNcMHFyox","dynamics":["07c022d89b","a74be98ba7","a9bb46feb3"],"chunks":["Frame-BJc2v2A3.js","DynamicMarkdown-CWvhfcZc.js","zoom-image-lightbox-CAita2ok.js","lightbox-handle-r17bVUz3.js","Markdown-C4Ez6OeV.js","clsx-DptzKFCt.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Dt1IougW.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CZ6Wt2Vb.js"]}