API Reference#
Packages#
aim.eai.amd.com/v1alpha2#
Package v1alpha2 contains API Schema definitions for the aim v1alpha2 API group.
Resource Types#
AIMClusterModel#
AIMClusterModel is the Schema for cluster-scoped v1alpha2 AIM model resources. See AIMModel (api/v1alpha2/aimmodel_types.go) for the rationale of the CEL rules below — AIMClusterModel mirrors the namespace-scoped contract.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
|||
|
AIMClusterModelList#
AIMClusterModelList contains a list of AIMClusterModel.
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
AIMClusterProfile#
AIMClusterProfile is the Schema for cluster-scoped AIM profiles. Cluster profiles are visible across all namespaces. They can be created manually or, in the future, automatically during model discovery by a v1alpha2 model controller. Unlike namespace-scoped AIMProfiles, cluster profiles do not support caching configuration since caches are namespace-scoped.
Deployable profiles have both aimId and modelSources populated; base profiles (custom-model derivation source material) have neither. Mixed (one of the two set) is rejected to keep status.deployable derivable from spec.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
AIMClusterProfileList#
AIMClusterProfileList contains a list of AIMClusterProfile.
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
AIMClusterProfileSet#
AIMClusterProfileSet is the Schema for cluster-scoped profile derivation resources.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
|||
|
AIMClusterProfileSetList#
AIMClusterProfileSetList contains a list of AIMClusterProfileSet.
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
AIMClusterProfileSpec#
AIMClusterProfileSpec defines the desired state of a cluster-scoped AIMClusterProfile.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
AimId is the model architecture identifier (e.g., “qwen/qwen3-32b”). Primary matching axis for profile selection and custom weight onboarding. AimId is required for deployable profiles. Iteration 1 producers always emit deployable profiles, so AimId is effectively required there. Empty AimId is reserved for base profiles emitted by base-image discovery (custom-model derivation source material), which are not deployable until derived. Once set, AimId is immutable. |
Optional: {} |
|
|
ModelId is the specific model / HuggingFace URI (e.g., “qwen/qwen3-32b-fp8”). Determines the cache path (/workspace/cache/{modelId}) and serves as a secondary discriminator for custom weight matching. |
Optional: {} |
|
|
ProfileId is the on-disk profile identifier from the AIM image (e.g., “vllm-mi300x-fp8-tp1-latency”). Populated during discovery to link this CRD back to the profile YAML inside the container. Runtime projection retains this identifier as the mounted YAML filename. Not required for manually created profiles, which receive an engine-aware generated filename when omitted. |
Optional: {} |
|
|
Engine identifies the inference engine (e.g., “vllm”, “vllm_omni”). |
Optional: {} |
|
|
Variant distinguishes profiles that share the same engine, accelerator, precision, count, and metric but use a different runtime recipe (for example, “usp4”). Discovered profiles preserve metadata.variant here so the projected profile YAML and filename retain the image’s identity. |
Pattern: |
|
|
Metric is the optimization target for this profile. |
Enum: [latency throughput] |
|
|
Precision is the numeric precision used by this profile. |
Enum: [fp4 fp8 fp16 fp32 fp64 bf16 int4 int8] |
|
|
Type indicates the optimization level. Hierarchy: optimized > general > preview > unoptimized. |
Enum: [optimized general preview unoptimized] |
|
|
AutoSelectionPolicy controls which optimization tiers may participate in automatic selection when the AIMService does not explicitly set minimumType. “optimized” applies the implicit optimized floor. “any” permits the profile to participate in a second selection pass regardless of its type, but only when no optimized candidate matched. It never overrides an explicitly authored minimumType. Explicit spec.profile.name resolution is unaffected. |
optimized |
Optional: {} |
|
Primary marks this as a default/recommended profile. When true, the profile is advertised for standard deployment and copied automatically for custom weight models. Defaults to false when not specified. |
false |
|
|
ManualSelectionOnly is DEPRECATED and no longer honored by the resolver. It was a binary gate excluding a profile from automatic AIMService selection. Optimization-tier consent is now expressed through the graded |
false |
|
|
EngineArgs contains inference engine CLI arguments as a free-form JSON object. Passed to the inference engine (e.g., vLLM) at startup. |
Schemaless: {} |
|
|
EngineEnv contains environment variables for the inference engine subprocess. Applied via os.execv, distinct from container-level ContainerEnv. |
Optional: {} |
|
|
AcceleratorVendor selects the vendor-specific device-plugin resource and vendor node label used for this profile. A generic NVIDIA profile can set this to “nvidia” without declaring an acceleratorModel; AIM Engine then requests nvidia.com/gpu and matches NVIDIA GPU nodes of any model. Empty preserves the legacy AMD behavior for profiles created before this field existed. |
Optional: {} |
|
|
AcceleratorModel is the accelerator identifier for node selection. Maps to a node label key using the Exists operator: |
MaxLength: 63 |
|
|
AcceleratorType determines the resource derivation strategy: gpu or cpu. AIM Engine computes default resource requests from this field combined with AcceleratorCount and cluster-level configuration. |
Enum: [gpu cpu] |
|
|
AcceleratorCount is the number of accelerator units required. For AcceleratorType=gpu, this is the device count (e.g., 1, 2, 4, 8 for tensor-parallel sizes). For AcceleratorType=cpu, this is the number of CPU cores (e.g., 128 for EPYC_ZEN5, 192 for EPYC_9965). Combined with cluster-level configuration to compute default resource requests in status.resources. For AcceleratorType=gpu, the per-unit interpretation depends on AcceleratorPartitioningMode: under “unpartitioned” (default) one unit is one whole GPU; under “partitioned” or a specific scheme one unit is one partition slice (e.g. CPX-NPS4 = 1/8 of a GPU). Host CPU and memory defaults are scaled by the recognized compute partition density (SPX=1, DPX=2, QPX=4, CPX=8). Geometry-agnostic “partitioned” and unknown schemes require explicit host resources because a safe scale cannot be inferred. |
Minimum: 0 |
|
|
AcceleratorPartitioningMode declares the GPU partition state the profile requires. Free-form string with reserved values: |
unpartitioned |
MaxLength: 63 |
|
Resources is an optional override for K8s resource requests/limits. When set, merged on top of the defaults that AIM Engine computes from AcceleratorType, AcceleratorCount, and cluster-level configuration. Generated values account for an explicit opposite-side value so partial overrides cannot produce a request above its limit. The resolved result is written to status.resources. |
Optional: {} |
|
|
Image is the deployment container image. Required. For purpose-built profiles: the full AIM image. For custom weight profiles: the base image (e.g., aim-base:0.8.5). |
MinLength: 1 |
|
|
ModelSources specifies model artifact sources for this profile. Populated during discovery or set by user. |
Optional: {} |
|
|
ContainerEnv specifies container-level env vars for the AIM runtime process (K8s pod spec). |
Optional: {} |
|
|
ImagePullSecrets lists secrets for pulling container images. |
Optional: {} |
|
|
ServiceAccountName specifies the service account for workloads. |
Optional: {} |
|
|
Features lists optional capabilities the profile’s image honours, e.g. “adapters” for LoRA serving. A service declaring spec.adapters is rejected (ConfigValid=False) unless its resolved profile lists “adapters” here. |
Optional: {} |
AIMModel#
AIMModel is the Schema for the v1alpha2 AIMModel API.
AIMModel mirrors AIMService: the canonical Spec/Status types live in v1alpha1 and the v1alpha2 wrapper is a thin re-export so JSON wire format is identical between versions and the None conversion strategy works without a webhook.
v1alpha2 onboarding accepts exactly one of spec.image for discovery, spec.profiles for external derivation, or spec.modelId for generated profiles. Legacy v1alpha1 onboarding fields and the deprecated flat spec.derivedFrom shape are forbidden on NEW v1alpha2 objects. Each “forbidden” rule uses optionalOldSelf so that objects originally created via v1alpha1 (which legally carry spec.custom, spec.modelSources, spec.customTemplates, spec.profileCopy) and the early-iteration v1alpha2 objects (carrying spec.derivedFrom) can still be updated through the v1alpha2 surface — the reconciler must be able to add finalizers and patch the spec of legacy-shaped objects without being blocked by the v1alpha2 schema. Adding a legacy/deprecated field to an object that did not previously have it is still rejected.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
|||
|
AIMModelList#
AIMModelList contains a list of AIMModel.
AIMProfile#
AIMProfile is the Schema for namespace-scoped AIM profiles. A profile is a self-contained runtime configuration that answers five questions without consulting any other resource: model architecture, accelerator, K8s resources, runtime config, and container image.
Deployable profiles have both aimId and modelSources populated; base profiles (custom-model derivation source material) have neither. Mixed (one of the two set) is rejected to keep status.deployable derivable from spec.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
|||
|
AIMProfileCache#
AIMProfileCache pre-warms model artifacts for a specified profile’s model sources.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
|||
|
AIMProfileCacheList#
AIMProfileCacheList contains a list of AIMProfileCache.
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
AIMProfileCacheMode#
Underlying type: string
AIMProfileCacheMode controls the ownership behavior of artifacts created by a profile cache.
Validation:
Enum: [Dedicated Shared]
Appears in:
Field |
Description |
|---|---|
|
ProfileCacheModeDedicated means artifacts are owned by this profile cache and garbage collected when it is deleted. |
|
ProfileCacheModeShared means artifacts have no owner references and persist independently of the profile cache lifecycle. This is the default mode. |
AIMProfileCacheSpec#
AIMProfileCacheSpec defines the desired state of AIMProfileCache.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
ProfileName is the name of the AIMProfile or AIMClusterProfile to cache. The controller resolves model sources from the referenced profile’s spec.modelSources. |
MinLength: 1 |
|
|
ProfileScope indicates whether the profile is namespace-scoped or cluster-scoped. |
Enum: [Namespace Cluster] |
|
|
StorageClassName specifies the storage class for cache volumes. When not specified, uses the cluster default storage class. |
Optional: {} |
|
|
Env specifies environment variables for authentication when downloading models. These variables are used for authentication with model registries (e.g., HuggingFace tokens). |
Optional: {} |
|
|
Name is the name of the runtime config to use for this resource. If a runtime config with this name exists both as a namespace and a cluster runtime config, the values are merged together, the namespace config taking priority over the cluster config when there are conflicts. If this field is empty or set to |
Optional: {} |
|
|
Mode controls the ownership behavior of artifacts created by this profile cache. |
Shared |
Enum: [Dedicated Shared] |
|
RequiresAdapterDisk requests that the backing model artifact carry a shared ReadWriteMany adapter disk for LoRA serving. Set by the AIMService planner when the service serves adapters. When set, the cache stamps an adapterDisk onto the artifact it creates and won’t adopt one lacking a disk; size and class come from AIMRuntimeConfig.Storage. |
Optional: {} |
AIMProfileCacheStatus#
AIMProfileCacheStatus defines the observed state of AIMProfileCache.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
ObservedGeneration is the most recent generation observed by the controller. |
||
|
Conditions represent the latest observations of the profile cache state. |
||
|
Status represents the current high-level status of the profile cache. |
Pending |
Enum: [Pending Progressing Ready Failed Degraded NotAvailable] |
|
Artifacts maps artifact names to their resolved AIMArtifact resources. |
Optional: {} |
AIMProfileCachingConfig#
AIMProfileCachingConfig configures model caching behavior for namespace-scoped profiles.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
Enabled controls whether caching is enabled for this profile. |
false |
|
|
Env specifies environment variables for model download during caching. If not set, falls back to the profile’s ContainerEnv. |
Optional: {} |
AIMProfileList#
AIMProfileList contains a list of AIMProfile.
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
AIMProfileSet#
AIMProfileSet is the Schema for namespace-scoped profile derivation resources.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
|||
|
AIMProfileSetList#
AIMProfileSetList contains a list of AIMProfileSet.
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
AIMProfileSpec#
AIMProfileSpec defines the desired state of a namespace-scoped AIMProfile.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
AimId is the model architecture identifier (e.g., “qwen/qwen3-32b”). Primary matching axis for profile selection and custom weight onboarding. AimId is required for deployable profiles. Iteration 1 producers always emit deployable profiles, so AimId is effectively required there. Empty AimId is reserved for base profiles emitted by base-image discovery (custom-model derivation source material), which are not deployable until derived. Once set, AimId is immutable. |
Optional: {} |
|
|
ModelId is the specific model / HuggingFace URI (e.g., “qwen/qwen3-32b-fp8”). Determines the cache path (/workspace/cache/{modelId}) and serves as a secondary discriminator for custom weight matching. |
Optional: {} |
|
|
ProfileId is the on-disk profile identifier from the AIM image (e.g., “vllm-mi300x-fp8-tp1-latency”). Populated during discovery to link this CRD back to the profile YAML inside the container. Runtime projection retains this identifier as the mounted YAML filename. Not required for manually created profiles, which receive an engine-aware generated filename when omitted. |
Optional: {} |
|
|
Engine identifies the inference engine (e.g., “vllm”, “vllm_omni”). |
Optional: {} |
|
|
Variant distinguishes profiles that share the same engine, accelerator, precision, count, and metric but use a different runtime recipe (for example, “usp4”). Discovered profiles preserve metadata.variant here so the projected profile YAML and filename retain the image’s identity. |
Pattern: |
|
|
Metric is the optimization target for this profile. |
Enum: [latency throughput] |
|
|
Precision is the numeric precision used by this profile. |
Enum: [fp4 fp8 fp16 fp32 fp64 bf16 int4 int8] |
|
|
Type indicates the optimization level. Hierarchy: optimized > general > preview > unoptimized. |
Enum: [optimized general preview unoptimized] |
|
|
AutoSelectionPolicy controls which optimization tiers may participate in automatic selection when the AIMService does not explicitly set minimumType. “optimized” applies the implicit optimized floor. “any” permits the profile to participate in a second selection pass regardless of its type, but only when no optimized candidate matched. It never overrides an explicitly authored minimumType. Explicit spec.profile.name resolution is unaffected. |
optimized |
Optional: {} |
|
Primary marks this as a default/recommended profile. When true, the profile is advertised for standard deployment and copied automatically for custom weight models. Defaults to false when not specified. |
false |
|
|
ManualSelectionOnly is DEPRECATED and no longer honored by the resolver. It was a binary gate excluding a profile from automatic AIMService selection. Optimization-tier consent is now expressed through the graded |
false |
|
|
EngineArgs contains inference engine CLI arguments as a free-form JSON object. Passed to the inference engine (e.g., vLLM) at startup. |
Schemaless: {} |
|
|
EngineEnv contains environment variables for the inference engine subprocess. Applied via os.execv, distinct from container-level ContainerEnv. |
Optional: {} |
|
|
AcceleratorVendor selects the vendor-specific device-plugin resource and vendor node label used for this profile. A generic NVIDIA profile can set this to “nvidia” without declaring an acceleratorModel; AIM Engine then requests nvidia.com/gpu and matches NVIDIA GPU nodes of any model. Empty preserves the legacy AMD behavior for profiles created before this field existed. |
Optional: {} |
|
|
AcceleratorModel is the accelerator identifier for node selection. Maps to a node label key using the Exists operator: |
MaxLength: 63 |
|
|
AcceleratorType determines the resource derivation strategy: gpu or cpu. AIM Engine computes default resource requests from this field combined with AcceleratorCount and cluster-level configuration. |
Enum: [gpu cpu] |
|
|
AcceleratorCount is the number of accelerator units required. For AcceleratorType=gpu, this is the device count (e.g., 1, 2, 4, 8 for tensor-parallel sizes). For AcceleratorType=cpu, this is the number of CPU cores (e.g., 128 for EPYC_ZEN5, 192 for EPYC_9965). Combined with cluster-level configuration to compute default resource requests in status.resources. For AcceleratorType=gpu, the per-unit interpretation depends on AcceleratorPartitioningMode: under “unpartitioned” (default) one unit is one whole GPU; under “partitioned” or a specific scheme one unit is one partition slice (e.g. CPX-NPS4 = 1/8 of a GPU). Host CPU and memory defaults are scaled by the recognized compute partition density (SPX=1, DPX=2, QPX=4, CPX=8). Geometry-agnostic “partitioned” and unknown schemes require explicit host resources because a safe scale cannot be inferred. |
Minimum: 0 |
|
|
AcceleratorPartitioningMode declares the GPU partition state the profile requires. Free-form string with reserved values: |
unpartitioned |
MaxLength: 63 |
|
Resources is an optional override for K8s resource requests/limits. When set, merged on top of the defaults that AIM Engine computes from AcceleratorType, AcceleratorCount, and cluster-level configuration. Generated values account for an explicit opposite-side value so partial overrides cannot produce a request above its limit. The resolved result is written to status.resources. |
Optional: {} |
|
|
Image is the deployment container image. Required. For purpose-built profiles: the full AIM image. For custom weight profiles: the base image (e.g., aim-base:0.8.5). |
MinLength: 1 |
|
|
ModelSources specifies model artifact sources for this profile. Populated during discovery or set by user. |
Optional: {} |
|
|
ContainerEnv specifies container-level env vars for the AIM runtime process (K8s pod spec). |
Optional: {} |
|
|
ImagePullSecrets lists secrets for pulling container images. |
Optional: {} |
|
|
ServiceAccountName specifies the service account for workloads. |
Optional: {} |
|
|
Features lists optional capabilities the profile’s image honours, e.g. “adapters” for LoRA serving. A service declaring spec.adapters is rejected (ConfigValid=False) unless its resolved profile lists “adapters” here. |
Optional: {} |
|
|
Caching configures model caching behavior for this namespace-scoped profile. |
Optional: {} |
AIMProfileSpecCommon#
AIMProfileSpecCommon contains spec fields shared between AIMProfile and AIMClusterProfile. A profile answers five questions without consulting any other resource: model architecture (aimId), accelerator (acceleratorVendor/Model/Type/Count), K8s resources (status.resources), runtime config (engineArgs, engineEnv), and container image (image).
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
AimId is the model architecture identifier (e.g., “qwen/qwen3-32b”). Primary matching axis for profile selection and custom weight onboarding. AimId is required for deployable profiles. Iteration 1 producers always emit deployable profiles, so AimId is effectively required there. Empty AimId is reserved for base profiles emitted by base-image discovery (custom-model derivation source material), which are not deployable until derived. Once set, AimId is immutable. |
Optional: {} |
|
|
ModelId is the specific model / HuggingFace URI (e.g., “qwen/qwen3-32b-fp8”). Determines the cache path (/workspace/cache/{modelId}) and serves as a secondary discriminator for custom weight matching. |
Optional: {} |
|
|
ProfileId is the on-disk profile identifier from the AIM image (e.g., “vllm-mi300x-fp8-tp1-latency”). Populated during discovery to link this CRD back to the profile YAML inside the container. Runtime projection retains this identifier as the mounted YAML filename. Not required for manually created profiles, which receive an engine-aware generated filename when omitted. |
Optional: {} |
|
|
Engine identifies the inference engine (e.g., “vllm”, “vllm_omni”). |
Optional: {} |
|
|
Variant distinguishes profiles that share the same engine, accelerator, precision, count, and metric but use a different runtime recipe (for example, “usp4”). Discovered profiles preserve metadata.variant here so the projected profile YAML and filename retain the image’s identity. |
Pattern: |
|
|
Metric is the optimization target for this profile. |
Enum: [latency throughput] |
|
|
Precision is the numeric precision used by this profile. |
Enum: [fp4 fp8 fp16 fp32 fp64 bf16 int4 int8] |
|
|
Type indicates the optimization level. Hierarchy: optimized > general > preview > unoptimized. |
Enum: [optimized general preview unoptimized] |
|
|
AutoSelectionPolicy controls which optimization tiers may participate in automatic selection when the AIMService does not explicitly set minimumType. “optimized” applies the implicit optimized floor. “any” permits the profile to participate in a second selection pass regardless of its type, but only when no optimized candidate matched. It never overrides an explicitly authored minimumType. Explicit spec.profile.name resolution is unaffected. |
optimized |
Optional: {} |
|
Primary marks this as a default/recommended profile. When true, the profile is advertised for standard deployment and copied automatically for custom weight models. Defaults to false when not specified. |
false |
|
|
ManualSelectionOnly is DEPRECATED and no longer honored by the resolver. It was a binary gate excluding a profile from automatic AIMService selection. Optimization-tier consent is now expressed through the graded |
false |
|
|
EngineArgs contains inference engine CLI arguments as a free-form JSON object. Passed to the inference engine (e.g., vLLM) at startup. |
Schemaless: {} |
|
|
EngineEnv contains environment variables for the inference engine subprocess. Applied via os.execv, distinct from container-level ContainerEnv. |
Optional: {} |
|
|
AcceleratorVendor selects the vendor-specific device-plugin resource and vendor node label used for this profile. A generic NVIDIA profile can set this to “nvidia” without declaring an acceleratorModel; AIM Engine then requests nvidia.com/gpu and matches NVIDIA GPU nodes of any model. Empty preserves the legacy AMD behavior for profiles created before this field existed. |
Optional: {} |
|
|
AcceleratorModel is the accelerator identifier for node selection. Maps to a node label key using the Exists operator: |
MaxLength: 63 |
|
|
AcceleratorType determines the resource derivation strategy: gpu or cpu. AIM Engine computes default resource requests from this field combined with AcceleratorCount and cluster-level configuration. |
Enum: [gpu cpu] |
|
|
AcceleratorCount is the number of accelerator units required. For AcceleratorType=gpu, this is the device count (e.g., 1, 2, 4, 8 for tensor-parallel sizes). For AcceleratorType=cpu, this is the number of CPU cores (e.g., 128 for EPYC_ZEN5, 192 for EPYC_9965). Combined with cluster-level configuration to compute default resource requests in status.resources. For AcceleratorType=gpu, the per-unit interpretation depends on AcceleratorPartitioningMode: under “unpartitioned” (default) one unit is one whole GPU; under “partitioned” or a specific scheme one unit is one partition slice (e.g. CPX-NPS4 = 1/8 of a GPU). Host CPU and memory defaults are scaled by the recognized compute partition density (SPX=1, DPX=2, QPX=4, CPX=8). Geometry-agnostic “partitioned” and unknown schemes require explicit host resources because a safe scale cannot be inferred. |
Minimum: 0 |
|
|
AcceleratorPartitioningMode declares the GPU partition state the profile requires. Free-form string with reserved values: |
unpartitioned |
MaxLength: 63 |
|
Resources is an optional override for K8s resource requests/limits. When set, merged on top of the defaults that AIM Engine computes from AcceleratorType, AcceleratorCount, and cluster-level configuration. Generated values account for an explicit opposite-side value so partial overrides cannot produce a request above its limit. The resolved result is written to status.resources. |
Optional: {} |
|
|
Image is the deployment container image. Required. For purpose-built profiles: the full AIM image. For custom weight profiles: the base image (e.g., aim-base:0.8.5). |
MinLength: 1 |
|
|
ModelSources specifies model artifact sources for this profile. Populated during discovery or set by user. |
Optional: {} |
|
|
ContainerEnv specifies container-level env vars for the AIM runtime process (K8s pod spec). |
Optional: {} |
|
|
ImagePullSecrets lists secrets for pulling container images. |
Optional: {} |
|
|
ServiceAccountName specifies the service account for workloads. |
Optional: {} |
|
|
Features lists optional capabilities the profile’s image honours, e.g. “adapters” for LoRA serving. A service declaring spec.adapters is rejected (ConfigValid=False) unless its resolved profile lists “adapters” here. |
Optional: {} |
AIMProfileStatus#
AIMProfileStatus defines the observed state of AIMProfile / AIMClusterProfile.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
ObservedGeneration is the most recent generation observed by the controller. |
||
|
Status represents the current high-level status of this profile. Ready: at least one cluster node matches the profile’s accelerator labels and resource requests. NotAvailable: no matching nodes found. |
Pending |
Enum: [Pending Progressing Ready Degraded Failed NotAvailable] |
|
Deployable reports whether the profile is materialised enough to back an AIMService: true when spec.aimId and spec.modelSources are both populated, false for base profiles awaiting derivation. Image discovery of a deployable AIM image emits deployable profiles; base-image discovery emits base profiles (no aimId/modelSources) that a custom-model AIMModel derives into deployable copies. |
false |
|
|
SourceModel identifies the producing AIM(Cluster)Model for profiles owned by AIMModel reconcilers. Empty for user-authored profiles. |
Optional: {} |
|
|
Origin classifies how this profile was produced: |
Enum: [discovered derived generated user-authored] |
|
|
Version is extracted from the spec.image tag during reconciliation (e.g., “0.8.5”). |
Optional: {} |
|
|
BaseImage is the AIM_BASE_IMAGE_REF the inspector extracted from the source image when this profile was materialised by AIMModel discovery. Used by derivation flows (AIMService overlays, AIMProfileSet) to rebase the deployment image onto the source’s base when overriding model sources, so private mirrors stay self-contained. Empty for user-authored profiles. |
Optional: {} |
|
|
MatchingNodes is the count of cluster nodes matching both the accelerator model label and status.resources requests. Zero means NotAvailable. |
Optional: {} |
|
|
HardwareSummary is a human-readable string describing the hardware requirements. Format: “{count} x {model}” for GPU (e.g., “1 x MI300X”) or “CPU” for CPU-only. |
Optional: {} |
|
|
Resources contains the definitive K8s resource requests/limits used for deployment. Computed by AIM Engine from AcceleratorType, AcceleratorCount, and cluster-level configuration, then merged with any spec.resources override. |
Optional: {} |
|
|
ResolvedNodeAffinity contains the computed node affinity rules derived from spec.acceleratorModel. Used by AIMService when building InferenceService pods. |
Optional: {} |
|
|
ProjectedRuntimeName is the name of the per-profile KServe ServingRuntime / ClusterServingRuntime this profile projects (aim- |
Optional: {} |
|
|
ProjectedModelSlugRuntimeName is the name of the readable model-slug primary runtime (aim- |
Optional: {} |
|
|
Conditions represent the latest observations of profile state. |
AIMService#
AIMService manages a KServe-based AIM inference service for the selected model and template. Note: KServe uses {name}-{namespace} format which must not exceed 63 characters. This constraint is validated at runtime since CEL cannot access metadata.namespace.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
|||
|
AIMServiceList#
AIMServiceList contains a list of AIMService.
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
|
||
|
|
||
|
Refer to Kubernetes API documentation for fields of |
||
|
ProfileSourceModel#
ProfileSourceModel identifies the producing AIM(Cluster)Model for a reconciler-produced profile. Stamped from owner references during reconciliation; left unset for user-authored profiles.
Appears in:
Field |
Description |
Default |
Validation |
|---|---|---|---|
|
Name is the producing model’s name. |
||
Kind is the producing model’s kind (“AIMModel” or “AIMClusterModel”). |
Enum: [AIMModel AIMClusterModel] |
||
|
Namespace is the producing model’s namespace. Empty when Kind is AIMClusterModel (cluster-scoped). |
Optional: {} |
ProfileSourceModelKind#
Underlying type: string
ProfileSourceModelKind identifies whether a profile’s source model is namespace-scoped (AIMModel) or cluster-scoped (AIMClusterModel).
Validation:
Enum: [AIMModel AIMClusterModel]
Appears in:
Field |
Description |
|---|---|
|
|
|