Skip to content

GPU Builder

The GpuBuilder allows you to get started with a builder class to configure with required setup as you prepare a blueprint for setting up EKS cluster with GPU Operator to run your GPU workloads.

The GpuBuilder creates the following: - An EKS Cluster` with passed k8s version and cluster tags. - A nodegroup to schedule GPU workloads with parameters passed.

Input Parameters

GpuOptions which takes inputs to GpuBuilder supports following parameters:

  • kubernetesVersion : Required field, Kubernetes version to use for the cluster
  • instanceClass: Required field, Instance class to use for the cluster
  • instanceSize: Required field, Instance size to use for the cluster
  • nodeRole: optional, Node IAM Role to be attached to nodes.
  • gpuAmiType: Required field, AMI Type for GPU Nodes. For example AL2_X86_64_GPU.
  • desiredNodeSize: Optional field, Desired number of nodes to use for the cluster
  • minNodeSize: Optional field, Minimum number of nodes to use for the cluster
  • maxNodeSize: Optional field, Maximum number of nodes to use for the cluster
  • blockDeviceSize: Optional field, Block device size
  • clusterProviderTags: Optional field, Cluster Provider Tags
  • nodeGroupTags: Optional field, Node Group Tags for nodes which run standard cluster software.

Demonstration - Running GPUs on EKS Cluster

The below usage helps you with a demonstration to use GpuBuilder to configure a required setup as you prepare a blueprint for setting up GPU nodes on a new EKS cluster.

import * as blueprints from "@aws-quickstart/eks-blueprints";
import * as ec2 from "aws-cdk-lib/aws-ec2";
import * as eks from "aws-cdk-lib/aws-eks";
import * as iam from "aws-cdk-lib/aws-iam";
import { Construct } from "constructs";
import { GpuBuilder, GpuOptions } from '../common/gpu-builder';

export default class GpuConstruct {
    build(scope: Construct, id: string) {
        const account = process.env.CDK_DEFAULT_ACCOUNT!;
        const region = process.env.CDK_DEFAULT_REGION!;
        const stackID = `${id}-eks-blueprint`;

        const options: GpuOptions = {
            kubernetesVersion: eks.KubernetesVersion.of("1.28"),
            instanceClass: ec2.InstanceClass.G5,
            instanceSize: ec2.InstanceSize.XLARGE
        };

        const values = {
                    driver: {
                      enabled: true
                    },
                    mig: {
                      strategy: 'mixed'
                    },
                    devicePlugin: {
                      enabled: true,
                      version: 'v0.13.0'
                    },
                    migManager: {
                      enabled: true,
                      WITH_REBOOT: true
                    },
                    toolkit: {
                      version: 'v1.13.1-centos7'
                    },
                    operator: {
                      defaultRuntime: 'containerd'
                    },
                    gfd: {
                      version: 'v0.8.0'
                    }
                }


        GpuBuilder.builder(options)
            .account(account)
            .region(region)
            .enableGpu({values})
            .build(scope, stackID);
    }
}