Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Einrichtung Ihrer HyperPod Cluster für die Modellbereitstellung
Dieses Handbuch bietet Ihnen eine umfassende Anleitung zur Einrichtung von Inferenzfunktionen auf SageMaker HyperPod Amazon-Clustern. Die folgenden Schritte helfen Ihnen bei der Einrichtung der Infrastruktur, der Berechtigungen und der Betreiber, die erforderlich sind, um Techniker für maschinelles Lernen bei der Bereitstellung und Verwaltung von Inferenzendpunkten zu unterstützen.
Anmerkung
Informationen zum Erstellen eines Clusters mit vorinstalliertem Inferenzoperator finden Sie unter. Erstellen Sie einen EKS-orchestrierten Cluster SageMaker HyperPod Um den Inferenzoperator auf einem vorhandenen Cluster zu installieren, fahren Sie mit den folgenden Verfahren fort.
Voraussetzungen
Bevor Sie fortfahren, stellen Sie sicher, dass Ihre AWS Anmeldeinformationen ordnungsgemäß konfiguriert sind und über die erforderlichen Berechtigungen verfügen. Die folgenden Schritte müssen von einem IAM-Prinzipal mit Administratorrechten und Cluster-Admin-Zugriff auf einen Amazon EKS-Cluster ausgeführt werden. Stellen Sie sicher, dass Sie einen HyperPod Cluster mit Erstellen eines SageMaker HyperPod Clusters mit Amazon EKS-Orchestrierung erstellt haben. Stellen Sie sicher, dass Sie die Befehlszeilenprogramme helm, eksctl und kubectl installiert haben.
Um Kubernetes-Administratorzugriff auf den Amazon EKS-Cluster zu erhalten, gehen Sie zur Amazon EKS-Konsole und wählen Sie den Cluster aus, den Sie verwenden. Suchen Sie auf der Registerkarte „Zugriff“ nach und wählen Sie „IAM Access Entries“ aus. Wenn es keinen Eintrag für Ihren IAM-Principal gibt, wählen Sie Access-Eintrag erstellen aus. Wählen Sie dann den gewünschten IAM-Prinzipal aus und ordnen Sie ihn AmazonEKSClusterAdminPolicy zu.
-
Konfigurieren Sie kubectl so, dass es eine Verbindung zu dem neu erstellten HyperPod Cluster herstellt, der vom Amazon EKS-Cluster orchestriert wird. Geben Sie die Region und HyperPod den Clusternamen an.
export HYPERPOD_CLUSTER_NAME=<hyperpod-cluster-name> export REGION=<region> # S3 bucket where tls certificates will be uploaded BUCKET_NAME="<Enter name of your s3 bucket>" # This should be bucket name, not URI export EKS_CLUSTER_NAME=$(aws --region $REGION sagemaker describe-cluster --cluster-name $HYPERPOD_CLUSTER_NAME \ --query 'Orchestrator.Eks.ClusterArn' --output text | \ cut -d'/' -f2) aws eks update-kubeconfig --name $EKS_CLUSTER_NAME --region $REGION -
Legen Sie die Standard-Umgebungsvariablen fest.
LB_CONTROLLER_POLICY_NAME="AWSLoadBalancerControllerIAMPolicy-$HYPERPOD_CLUSTER_NAME" LB_CONTROLLER_ROLE_NAME="aws-load-balancer-controller-$HYPERPOD_CLUSTER_NAME" S3_MOUNT_ACCESS_POLICY_NAME="S3MountpointAccessPolicy-$HYPERPOD_CLUSTER_NAME" S3_CSI_ROLE_NAME="SM_HP_S3_CSI_ROLE-$HYPERPOD_CLUSTER_NAME" KEDA_OPERATOR_POLICY_NAME="KedaOperatorPolicy-$HYPERPOD_CLUSTER_NAME" KEDA_OPERATOR_ROLE_NAME="keda-operator-role-$HYPERPOD_CLUSTER_NAME" PRESIGNED_URL_ACCESS_POLICY_NAME="PresignedUrlAccessPolicy-$HYPERPOD_CLUSTER_NAME" HYPERPOD_INFERENCE_ACCESS_POLICY_NAME="HyperpodInferenceAccessPolicy-$HYPERPOD_CLUSTER_NAME" HYPERPOD_INFERENCE_ROLE_NAME="HyperpodInferenceRole-$HYPERPOD_CLUSTER_NAME" HYPERPOD_INFERENCE_SA_NAME="hyperpod-inference-operator-controller" HYPERPOD_INFERENCE_SA_NAMESPACE="hyperpod-inference-system" JUMPSTART_GATED_ROLE_NAME="JumpstartGatedRole-$HYPERPOD_CLUSTER_NAME" FSX_CSI_ROLE_NAME="AmazonEKSFSxLustreCSIDriverFullAccess-$HYPERPOD_CLUSTER_NAME" -
Extrahieren Sie den Amazon EKS-Clusternamen aus dem Cluster-ARN, aktualisieren Sie die lokale kubeconfig und überprüfen Sie die Konnektivität, indem Sie alle Pods in NameBereiche auflisten.
kubectl get pods --all-namespaces -
(Optional) Installieren Sie das NVIDIA-Geräte-Plugin, um die GPU-Unterstützung auf dem Cluster zu aktivieren.
#Install nvidia device plugin kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.5/nvidia-device-plugin.yml # Verify that GPUs are visible to k8s kubectl get nodes -o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia.com/gpu
Bereiten Sie Ihre Umgebung auf die Installation des Inference Operators vor
Nachdem Ihr HyperPod Cluster konfiguriert ist, besteht der nächste Schritt darin, den Inferenzoperator zu installieren. Der Inferenzoperator ist ein Kubernetes-Operator, der die Bereitstellung und Verwaltung von Inferenzendpunkten für maschinelles Lernen auf Ihrem Amazon EKS-Cluster ermöglicht.
Führen Sie die nächsten wichtigen Vorbereitungsschritte durch, um sicherzustellen, dass Ihr Amazon EKS-Cluster über die richtigen Sicherheitskonfigurationen und unterstützenden Infrastrukturkomponenten verfügt. Dazu gehören die Konfiguration von IAM-Rollen und Sicherheitsrichtlinien für die serviceübergreifende Authentifizierung, die Installation des Load AWS Balancer Controllers für das Eingangsmanagement, die Einrichtung von Amazon S3- und Amazon FSx CSI-Treibern für den persistenten Speicherzugriff sowie die Bereitstellung von KEDA und Cert-Manager für Autoscaling und Zertifikatsverwaltungsfunktionen.
-
Sammeln Sie wichtige AWS Ressourcen-Identifikatoren, die für die Konfiguration von Serviceintegrationen zwischen Amazon EKS-, SageMaker KI- und IAM-Komponenten ARNs erforderlich sind.
%%bash -x export ACCOUNT_ID=$(aws --region $REGION sts get-caller-identity --query 'Account' --output text) export OIDC_ID=$(aws --region $REGION eks describe-cluster --name $EKS_CLUSTER_NAME --query "cluster.identity.oidc.issuer" --output text | cut -d '/' -f 5) export EKS_CLUSTER_ROLE=$(aws eks --region $REGION describe-cluster --name $EKS_CLUSTER_NAME --query 'cluster.roleArn' --output text) -
Ordnen Sie Ihrem EKS-Cluster einen OIDCidentity IAM-Anbieter zu.
eksctl utils associate-iam-oidc-provider --region=$REGION --cluster=$EKS_CLUSTER_NAME --approve -
Erstellen Sie die JSON-Dokumente für Vertrauensrichtlinien und Berechtigungsrichtlinien, die für die IAM-Rolle des HyperPod Inferenzoperators erforderlich sind. Diese Richtlinien ermöglichen eine sichere dienstübergreifende Kommunikation zwischen Amazon EKS, SageMaker KI und anderen AWS Diensten.
bash # Create trust policy JSON cat << EOF > trust-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "sagemaker.amazonaws.com" ] }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::${ACCOUNT_ID}:oidc-provider/oidc.eks.${REGION}.amazonaws.com/id/${OIDC_ID}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "oidc.eks.${REGION}.amazonaws.com/id/${OIDC_ID}:aud": "sts.amazonaws.com", "oidc.eks.${REGION}.amazonaws.com/id/${OIDC_ID}:sub": "system:serviceaccount:*:*" } } } ] } EOF # Create permission policy JSON cat << EOF > permission-policy.json { "Version": "2012-10-17", "Statement": [ { "Sid": "S3Access", "Effect": "Allow", "Action": [ "s3:Get*", "s3:List*", "s3:Describe*", "s3:PutObject" ], "Resource": [ "*" ] }, { "Sid": "ECRAccess", "Effect": "Allow", "Action": [ "ecr:GetAuthorizationToken", "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:GetRepositoryPolicy", "ecr:DescribeRepositories", "ecr:ListImages", "ecr:DescribeImages", "ecr:BatchGetImage", "ecr:GetLifecyclePolicy", "ecr:GetLifecyclePolicyPreview", "ecr:ListTagsForResource", "ecr:DescribeImageScanFindings" ], "Resource": [ "*" ] }, { "Sid": "EC2Access", "Effect": "Allow", "Action": [ "ec2:AssignPrivateIpAddresses", "ec2:AttachNetworkInterface", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes", "ec2:DescribeSubnets", "ec2:DetachNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute", "ec2:UnassignPrivateIpAddresses", "ec2:CreateTags", "ec2:DescribeInstances", "ec2:DescribeInstanceTypes", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVolumes", "ec2:DescribeVolumesModifications", "ec2:DescribeVpcs", "ec2:CreateVpcEndpointServiceConfiguration", "ec2:DeleteVpcEndpointServiceConfigurations", "ec2:DescribeVpcEndpointServiceConfigurations", "ec2:ModifyVpcEndpointServicePermissions" ], "Resource": [ "*" ] }, { "Sid": "EKSAuthAccess", "Effect": "Allow", "Action": [ "eks-auth:AssumeRoleForPodIdentity" ], "Resource": [ "*" ] }, { "Sid": "EKSAccess", "Effect": "Allow", "Action": [ "eks:AssociateAccessPolicy", "eks:Describe*", "eks:List*", "eks:AccessKubernetesApi" ], "Resource": [ "*" ] }, { "Sid": "ApiGatewayAccess", "Effect": "Allow", "Action": [ "apigateway:POST", "apigateway:GET", "apigateway:PUT", "apigateway:PATCH", "apigateway:DELETE", "apigateway:UpdateRestApiPolicy" ], "Resource": [ "arn:aws:apigateway:*::/vpclinks", "arn:aws:apigateway:*::/vpclinks/*", "arn:aws:apigateway:*::/restapis", "arn:aws:apigateway:*::/restapis/*" ] }, { "Sid": "ElasticLoadBalancingAccess", "Effect": "Allow", "Action": [ "elasticloadbalancing:CreateLoadBalancer", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeLoadBalancerAttributes", "elasticloadbalancing:DescribeListeners", "elasticloadbalancing:DescribeListenerCertificates", "elasticloadbalancing:DescribeSSLPolicies", "elasticloadbalancing:DescribeRules", "elasticloadbalancing:DescribeTargetGroups", "elasticloadbalancing:DescribeTargetGroupAttributes", "elasticloadbalancing:DescribeTargetHealth", "elasticloadbalancing:DescribeTags", "elasticloadbalancing:DescribeTrustStores", "elasticloadbalancing:DescribeListenerAttributes" ], "Resource": [ "*" ] }, { "Sid": "SageMakerAccess", "Effect": "Allow", "Action": [ "sagemaker:*" ], "Resource": [ "*" ] }, { "Sid": "AllowPassRoleToSageMaker", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::*:role/*", "Condition": { "StringEquals": { "iam:PassedToService": "sagemaker.amazonaws.com" } } }, { "Sid": "AcmAccess", "Effect": "Allow", "Action": [ "acm:ImportCertificate", "acm:DeleteCertificate" ], "Resource": [ "*" ] } ] } EOF -
Erstellen Sie eine Ausführungsrolle für den Inferenzoperator.
aws iam create-policy --policy-name $HYPERPOD_INFERENCE_ACCESS_POLICY_NAME --policy-document file://permission-policy.json export policy_arn="arn:aws:iam::${ACCOUNT_ID}:policy/$HYPERPOD_INFERENCE_ACCESS_POLICY_NAME"aws iam create-role --role-name $HYPERPOD_INFERENCE_ROLE_NAME --assume-role-policy-document file://trust-policy.json aws iam put-role-policy --role-name $HYPERPOD_INFERENCE_ROLE_NAME --policy-name InferenceOperatorInlinePolicy --policy-document file://permission-policy.json -
Laden Sie die IAM-Richtlinie herunter, die für den Load Balancer Controller zur Verwaltung von Application Load AWS Balancers und Network Load Balancers in Ihrem EKS-Cluster erforderlich ist, und erstellen Sie sie.
%%bash -x export ALBController_IAM_POLICY_NAME=HyperPodInferenceALBControllerIAMPolicy curl -o AWSLoadBalancerControllerIAMPolicy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.13.0/docs/install/iam_policy.json aws iam create-policy --policy-name $ALBController_IAM_POLICY_NAME --policy-document file://AWSLoadBalancerControllerIAMPolicy.json -
Erstellen Sie ein IAM-Dienstkonto, das das Kubernetes-Dienstkonto mit der IAM-Richtlinie verknüpft, sodass der Load AWS Balancer Controller die erforderlichen AWS Berechtigungen über IRSA (IAM Roles for Service Accounts) annehmen kann.
%%bash -x export ALB_POLICY_ARN="arn:aws:iam::$ACCOUNT_ID:policy/$ALBController_IAM_POLICY_NAME" # Create IAM service account with gathered values eksctl create iamserviceaccount \ --approve \ --override-existing-serviceaccounts \ --name=aws-load-balancer-controller \ --namespace=kube-system \ --cluster=$EKS_CLUSTER_NAME \ --attach-policy-arn=$ALB_POLICY_ARN \ --region=$REGION # Print the values for verification echo "Cluster Name: $EKS_CLUSTER_NAME" echo "Region: $REGION" echo "Policy ARN: $ALB_POLICY_ARN" -
Wenden Sie Tags (
kubernetes.io.role/elb) auf alle Subnetze im Amazon EKS-Cluster (sowohl öffentlich als auch privat) an.export VPC_ID=$(aws --region $REGION eks describe-cluster --name $EKS_CLUSTER_NAME --query 'cluster.resourcesVpcConfig.vpcId' --output text) # Add Tags aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=${VPC_ID}" "Name=map-public-ip-on-launch,Values=true" \ --query 'Subnets[*].SubnetId' --output text | \ tr '\t' '\n' | \ xargs -I{} aws ec2 create-tags --resources {} --tags Key=kubernetes.io/role/elb,Value=1 # Verify Tags are added aws ec2 describe-subnets \ --filters "Name=vpc-id,Values=${VPC_ID}" "Name=map-public-ip-on-launch,Values=true" \ --query 'Subnets[*].SubnetId' --output text | \ tr '\t' '\n' | xargs -n1 -I{} aws ec2 describe-tags --filters "Name=resource-id,Values={}" "Name=key,Values=kubernetes.io/role/elb" --query "Tags[0].Value" --output text -
Erstellen Sie einen Namespace für KEDA und den Cert Manager.
kubectl create namespace keda kubectl create namespace cert-manager -
Erstellen Sie einen Amazon-S3-VPC-Endpunkt.
aws ec2 create-vpc-endpoint \ --vpc-id ${VPC_ID} \ --vpc-endpoint-type Gateway \ --service-name "com.amazonaws.${REGION}.s3" \ --route-table-ids $(aws ec2 describe-route-tables --filters "Name=vpc-id,Values=${VPC_ID}" --query 'RouteTables[].Associations[].RouteTableId' --output text | tr ' ' '\n' | sort -u | tr '\n' ' ') -
Konfigurieren des S3-Speicherzugriffs:
-
Erstellen Sie eine IAM-Richtlinie, die die erforderlichen S3-Berechtigungen für die Verwendung von Mountpoint for Amazon S3 gewährt, wodurch der Dateisystemzugriff auf S3-Buckets innerhalb des Clusters ermöglicht wird.
%%bash -x export S3_CSI_BUCKET_NAME=“<bucketname_for_mounting_through_filesystem>” cat <<EOF> s3accesspolicy.json { "Version": "2012-10-17", "Statement": [ { "Sid": "MountpointAccess", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetObject", "s3:PutObject", "s3:AbortMultipartUpload", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::${S3_CSI_BUCKET_NAME}", "arn:aws:s3:::${S3_CSI_BUCKET_NAME}/*" ] } ] } EOF aws iam create-policy \ --policy-name S3MountpointAccessPolicy \ --policy-document file://s3accesspolicy.json cat <<EOF> s3accesstrustpolicy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::$ACCOUNT_ID:oidc-provider/oidc.eks.$REGION.amazonaws.com/id/${OIDC_ID}" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.$REGION.amazonaws.com/id/${OIDC_ID}:aud": "sts.amazonaws.com", "oidc.eks.$REGION.amazonaws.com/id/${OIDC_ID}:sub": "system:serviceaccount:kube-system:${s3-csi-driver-sa}" } } } ] } EOF aws iam create-role --role-name $S3_CSI_ROLE_NAME --assume-role-policy-document file://s3accesstrustpolicy.json aws iam attach-role-policy --role-name $S3_CSI_ROLE_NAME --policy-arn "arn:aws:iam::$ACCOUNT_ID:policy/S3MountpointAccessPolicy" -
(Optional) Erstellen Sie ein IAM-Servicekonto für den CSI-Treiber von Amazon S3. Der Amazon S3 S3-CSI-Treiber benötigt ein IAM-Servicekonto mit entsprechenden Berechtigungen, um S3-Buckets als persistente Volumes in Ihrem Amazon EKS-Cluster bereitzustellen. In diesem Schritt werden die erforderliche IAM-Rolle und das erforderliche Kubernetes-Servicekonto mit der erforderlichen S3-Zugriffsrichtlinie erstellt.
%%bash -x export S3_CSI_ROLE_NAME="SM_HP_S3_CSI_ROLE-$REGION" export S3_CSI_POLICY_ARN=$(aws iam list-policies --query 'Policies[?PolicyName==`S3MountpointAccessPolicy`]' | jq '.[0].Arn' | tr -d '"') eksctl create iamserviceaccount \ --name s3-csi-driver-sa \ --namespace kube-system \ --cluster $EKS_CLUSTER_NAME \ --attach-policy-arn $S3_CSI_POLICY_ARN \ --approve \ --role-name $S3_CSI_ROLE_NAME \ --region $REGION kubectl label serviceaccount s3-csi-driver-sa app.kubernetes.io/component=csi-driver app.kubernetes.io/instance=aws-mountpoint-s3-csi-driver app.kubernetes.io/managed-by=EKS app.kubernetes.io/name=aws-mountpoint-s3-csi-driver -n kube-system --overwrite -
(Optional) Installieren Sie das Amazon-S3-CSI-Add-on. Dieser Treiber ermöglicht es Ihren Pods, S3-Buckets als persistente Volumes bereitzustellen, sodass Sie von Ihren Kubernetes-Workloads aus direkt auf S3-Speicher zugreifen können.
%%bash -x export S3_CSI_ROLE_ARN=$(aws iam get-role --role-name $S3_CSI_ROLE_NAME --query 'Role.Arn' --output text) eksctl create addon --name aws-mountpoint-s3-csi-driver --cluster $EKS_CLUSTER_NAME --service-account-role-arn $S3_CSI_ROLE_ARN --force -
(Optional) Erstellen Sie einen Persistent Volume Claim (PVC) für S3-Speicher. Mit diesem PVC können Ihre Pods S3-Speicher anfordern und verwenden, als ob es sich um ein herkömmliches Dateisystem handeln würde.
%%bash -x cat <<EOF> pvc_s3.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: s3-claim spec: accessModes: - ReadWriteMany # supported options: ReadWriteMany / ReadOnlyMany storageClassName: "" # required for static provisioning resources: requests: storage: 1200Gi # ignored, required volumeName: s3-pv EOF kubectl apply -f pvc_s3.yaml
-
-
(Optional) Konfigurieren Sie den FSx Speicherzugriff. Erstellen Sie ein IAM-Servicekonto für den Amazon FSx CSI-Treiber. Dieses Dienstkonto wird vom FSx CSI-Treiber verwendet, um im Namen Ihres Clusters mit dem FSx Amazon-Service zu interagieren.
%%bash -x eksctl create iamserviceaccount \ --name fsx-csi-controller-sa \ --namespace kube-system \ --cluster $EKS_CLUSTER_NAME \ --attach-policy-arn arn:aws:iam::aws:policy/AmazonFSxFullAccess \ --approve \ --role-name FSXLCSI-${EKS_CLUSTER_NAME}-${REGION} \ --region $REGION
Erstellen Sie die KEDA-Operatorrolle
-
Erstellen der Vertrauens- und Berechtigungsrichtlinie
# Create trust policy cat <<EOF > /tmp/keda-trust-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::$ACCOUNT_ID:oidc-provider/oidc.eks.$REGION.amazonaws.com/id/$OIDC_ID" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "oidc.eks.$REGION.amazonaws.com/id/$OIDC_ID:sub": "system:serviceaccount:kube-system:keda-operator", "oidc.eks.$REGION.amazonaws.com/id/$OIDC_ID:aud": "sts.amazonaws.com" } } } ] } EOF # Create permissions policy cat <<EOF > /tmp/keda-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:GetMetricData", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "aps:QueryMetrics", "aps:GetLabels", "aps:GetSeries", "aps:GetMetricMetadata" ], "Resource": "*" } ] } EOF # Create the role aws iam create-role \ --role-name keda-operator-role \ --assume-role-policy-document file:///tmp/keda-trust-policy.json # Create the policy KEDA_POLICY_ARN=$(aws iam create-policy \ --policy-name KedaOperatorPolicy \ --policy-document file:///tmp/keda-policy.json \ --query 'Policy.Arn' \ --output text) # Attach the policy to the role aws iam attach-role-policy \ --role-name keda-operator-role \ --policy-arn $KEDA_POLICY_ARN -
Wenn Sie geschützte Modelle verwenden, erstellen Sie eine IAM-Rolle, um auf die geschützten Modelle zuzugreifen.
-
Erstellen Sie eine IAM-Richtlinie.
%%bash -s $REGION cat <<EOF> /tmp/presignedurl-policy.json { "Version": "2012-10-17", "Statement": [ { "Sid": "CreatePresignedUrlAccess", "Effect": "Allow", "Action": [ "sagemaker:CreateHubContentPresignedUrls" ], "Resource": [ "arn:aws:sagemaker:$1:aws:hub/SageMakerPublicHub", "arn:aws:sagemaker:$1:aws:hub-content/SageMakerPublicHub/*/*" ] } ] } EOF aws iam create-policy --policy-name PresignedUrlAccessPolicy --policy-document file:///tmp/presignedurl-policy.json JUMPSTART_GATED_ROLE_NAME="JumpstartGatedRole-${REGION}-${HYPERPOD_CLUSTER_NAME}" cat <<EOF > /tmp/trust-policy.json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::$ACCOUNT_ID:oidc-provider/oidc.eks.$REGION.amazonaws.com/id/$OIDC_ID" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "oidc.eks.$REGION.amazonaws.com/id/$OIDC_ID:sub": "system:serviceaccount:*:$HYPERPOD_INFERENCE_SA_NAME", "oidc.eks.$REGION.amazonaws.com/id/$OIDC_ID:aud": "sts.amazonaws.com" } } }, { "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF -
Erstellen Sie eine IAM-Rolle.
# Create the role using existing trust policy aws iam create-role \ --role-name $JUMPSTART_GATED_ROLE_NAME \ --assume-role-policy-document file:///tmp/trust-policy.json # Attach the existing PresignedUrlAccessPolicy to the role aws iam attach-role-policy \ --role-name $JUMPSTART_GATED_ROLE_NAME \ --policy-arn arn:aws:iam::${ACCOUNT_ID}:policy/PresignedUrlAccessPolicyJUMPSTART_GATED_ROLE_ARN_LIST= !aws iam get-role --role-name=$JUMPSTART_GATED_ROLE_NAME --query "Role.Arn" --output text JUMPSTART_GATED_ROLE_ARN = JUMPSTART_GATED_ROLE_ARN_LIST[0] !echo $JUMPSTART_GATED_ROLE_ARN -
Fügen Sie der Ausführungsrolle eine
SageMakerFullAccess-Richtlinie hinzu.aws iam attach-role-policy --role-name=$HYPERPOD_INFERENCE_ROLE_NAME --policy-arn=arn:aws:iam::aws:policy/AmazonSageMakerFullAccess
-
Installieren des Inferenzoperators
-
Installieren Sie den HyperPod Inferenzoperator. In diesem Schritt werden die erforderlichen AWS Ressourcen-IDs gesammelt und der Helm-Installationsbefehl mit den entsprechenden Konfigurationsparametern generiert.
Greifen Sie über https://github.com/aws/sagemaker-hyperpod-cli/tree/main/helm_chart
auf das Helmdiagramm zu. git clone https://github.com/aws/sagemaker-hyperpod-cli cd sagemaker-hyperpod-cli cd helm_chart/HyperPodHelmChart helm dependencies update charts/inference-operator%%bash -x HYPERPOD_INFERENCE_ROLE_ARN=$(aws iam get-role --role-name=$HYPERPOD_INFERENCE_ROLE_NAME --query "Role.Arn" --output text) echo $HYPERPOD_INFERENCE_ROLE_ARN S3_CSI_ROLE_ARN=$(aws iam get-role --role-name=$S3_CSI_ROLE_NAME --query "Role.Arn" --output text) echo $S3_CSI_ROLE_ARN HYPERPOD_CLUSTER_ARN=$(aws sagemaker describe-cluster --cluster-name $HYPERPOD_CLUSTER_NAME --query "ClusterArn") # Verify values echo "Cluster Name: $EKS_CLUSTER_NAME" echo "Execution Role: $HYPERPOD_INFERENCE_ROLE_ARN" echo "Hyperpod ARN: $HYPERPOD_CLUSTER_ARN" # Run the the HyperPod inference operator installation. helm install hyperpod-inference-operator charts/inference-operator \ -n kube-system \ --set region=$REGION \ --set eksClusterName=$EKS_CLUSTER_NAME \ --set hyperpodClusterArn=$HYPERPOD_CLUSTER_ARN \ --set executionRoleArn=$HYPERPOD_INFERENCE_ROLE_ARN \ --set s3.serviceAccountRoleArn=$S3_CSI_ROLE_ARN \ --set s3.node.serviceAccount.create=false \ --set keda.podIdentity.aws.irsa.roleArn="arn:aws:iam::$ACCOUNT_ID:role/keda-operator-role" \ --set tlsCertificateS3Bucket="s3://$BUCKET_NAME" \ --set alb.region=$REGION \ --set alb.clusterName=$EKS_CLUSTER_NAME \ --set alb.vpcId=$VPC_ID # For JumpStart Gated Model usage, Add # --set jumpstartGatedModelDownloadRoleArn=$UMPSTART_GATED_ROLE_ARN -
Konfigurieren Sie die Anmerkungen zum Dienstkonto für die IAM-Integration. Diese Anmerkung ermöglicht es dem Dienstkonto des Betreibers, die erforderlichen IAM-Berechtigungen für die Verwaltung von Inferenzendpunkten und die Interaktion mit Diensten anzunehmen. AWS
%%bash -x EKS_CLUSTER_ROLE_NAME=$(echo $EKS_CLUSTER_ROLE | sed 's/.*\///') # Annotate service account kubectl annotate serviceaccount hyperpod-inference-operator-controller-manager \ -n hyperpod-inference-system \ eks.amazonaws.com/role-arn=arn:aws:iam::${ACCOUNT_ID}:role/${EKS_CLUSTER_ROLE_NAME} \ --overwrite
Stellen Sie sicher, dass der Inferenzoperator funktioniert
-
Erstellen einer Konfigurationsdatei für Modellbereitstellung Dadurch wird eine Kubernetes-Manifestdatei erstellt, die eine JumpStart Modellbereitstellung für den HyperPod Inferenzoperator definiert. Die Konfiguration legt fest, wie ein vortrainiertes Modell von Amazon SageMaker JumpStart als Inferenzendpunkt auf Ihrem Amazon EKS-Cluster bereitgestellt wird.
cat <<EOF>> simple_model_install.yaml --- apiVersion: inference.sagemaker.aws.amazon.com/v1 kind: JumpStartModel metadata: name: testing-deployment-bert namespace: default spec: model: modelId: "huggingface-eqa-bert-base-cased" sageMakerEndpoint: name: "hp-inf-ep-for-testing" server: instanceType: "ml.c5.2xlarge" environmentVariables: - name: SAMPLE_ENV_VAR value: "sample_value" maxDeployTimeInSeconds: 1800 EOF -
Stellen Sie das Modell bereit und bereinigen Sie die Konfigurationsdatei. In diesem Schritt wird die JumpStart Modellressource erstellt und die temporäre Konfigurationsdatei entfernt, um einen sauberen Arbeitsbereich zu gewährleisten.
%%bash -x kubectl create -f simple_model_install.yaml rm -rfv simple_model_install.yaml -
Überprüfen Sie, ob das Modell installiert ist und ausgeführt wird. Diese Überprüfung stellt sicher, dass der Operator erfolgreich AWS Berechtigungen für die Verwaltung von Inferenzendpunkten annehmen kann.
%%bash # Get the service account details kubectl get serviceaccount -n hyperpod-inference-system # Check if the service account has theAWSannotations kubectl describe serviceaccount hyperpod-inference-operator-controller-manager -n hyperpod-inference-system -
Unter Bereitstellungseinstellungen JumpStart wird eine Instanz für die Bereitstellung empfohlen. Sie können diese Einstellungen bei Bedarf anpassen.
-
Wenn Sie den Instanztyp ändern, stellen Sie sicher, dass er mit dem ausgewählten HyperPod Cluster kompatibel ist. Wenn es keine kompatiblen Instances gibt, müssen Sie einen neuen HyperPod Cluster auswählen oder Ihren Administrator kontaktieren, um dem Cluster kompatible Instances hinzuzufügen.
-
Wenn Ihr ausgewählter Instance-Typ die GPU-Partitionierung unterstützt und Ihr Cluster mit MIG konfiguriert ist, können Sie eine bestimmte GPU-Partition aus den verfügbaren MIG-Profilen auswählen. Auf diese Weise können Sie die GPU-Auslastung optimieren, indem Sie nur die erforderlichen GPU-Ressourcen für Ihr Modell zuweisen. Weitere Informationen finden Sie unter Verwenden von GPU-Partitionen in Amazon SageMaker HyperPod.
-
Um die Modellbereitstellung zu priorisieren, installieren Sie das Task Governance-Addon, erstellen Sie Rechenzuweisungen und richten Sie Aufgabenranglisten für die Cluster-Richtlinie ein. Sobald dies erledigt ist, sollte Ihnen eine Option angezeigt werden, mit der Sie eine Priorität für die Modellbereitstellung auswählen können. Diese Option kann verwendet werden, um anderen Bereitstellungen und Aufgaben auf dem Cluster vorzubeugen.
-
Geben Sie den Namespace ein, auf den Ihr Administrator Ihnen Zugriff gewährt hat. Möglicherweise müssen Sie sich direkt an Ihren Administrator wenden, um den genauen Namespace zu erhalten. Sobald ein gültiger Namespace bereitgestellt wurde, sollte die Schaltfläche Bereitstellen aktiviert sein, um das Modell bereitzustellen.
-
(Optional) Richten Sie den Benutzerzugriff über die JumpStart Benutzeroberfläche in SageMaker AI Studio Classic ein
Weitere Hintergrundinformationen zur Einrichtung des SageMaker HyperPod Zugriffs für Studio Classic-Benutzer und zur Konfiguration detaillierter Kubernetes-RBAC-Berechtigungen für Data Scientist-Benutzer finden Sie unter und. Einen Amazon-EKS-Cluster in Studio einrichten Einrichten der rollenbasierten Zugriffskontrolle für Kubernetes
-
Identifizieren Sie die IAM-Rolle, die Data Scientist-Benutzer verwenden werden, um Modelle von AI Studio Classic aus zu verwalten und bereitzustellen. SageMaker HyperPod SageMaker Dies ist in der Regel die Benutzerprofil-Ausführungsrolle oder die Domain-Ausführungsrolle für den Studio Classic-Benutzer.
%%bash -x export DATASCIENTIST_ROLE_NAME="<Execution Role Name used in SageMaker Studio Classic>" export DATASCIENTIST_POLICY_NAME="HyperPodUIAccessPolicy" export EKS_CLUSTER_ARN=$(aws --region $REGION sagemaker describe-cluster --cluster-name $HYPERPOD_CLUSTER_NAME \ --query 'Orchestrator.Eks.ClusterArn' --output text) export DATASCIENTIST_HYPERPOD_NAMESPACE="team-namespace" -
Fügen Sie eine Identitätsrichtlinie an, die den Zugriff auf Model Deployment ermöglicht.
%%bash -x # Create access policy cat << EOF > hyperpod-deployment-ui-access-policy.json { "Version": "2012-10-17", "Statement": [ { "Sid": "DescribeHyerpodClusterPermissions", "Effect": "Allow", "Action": [ "sagemaker:DescribeCluster" ], "Resource": "$HYPERPOD_CLUSTER_ARN" }, { "Sid": "UseEksClusterPermissions", "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:AccessKubernetesApi", "eks:MutateViaKubernetesApi", "eks:DescribeAddon" ], "Resource": "$EKS_CLUSTER_ARN" }, { "Sid": "ListPermission", "Effect": "Allow", "Action": [ "sagemaker:ListClusters", "sagemaker:ListEndpoints" ], "Resource": "*" }, { "Sid": "SageMakerEndpointAccess", "Effect": "Allow", "Action": [ "sagemaker:DescribeEndpoint", "sagemaker:InvokeEndpoint" ], "Resource": "arn:aws:sagemaker:$REGION:$ACCOUNT_ID:endpoint/*" } ] } EOF aws iam put-role-policy --role-name DATASCIENTIST_ROLE_NAME --policy-name HyperPodDeploymentUIAccessInlinePolicy --policy-document file://hyperpod-deployment-ui-access-policy.json -
Erstellen Sie einen EKS-Zugriffseintrag für den Benutzer, der ihn einer Kubernetes-Gruppe zuordnet.
%%bash -x aws eks create-access-entry --cluster-name $EKS_CLUSTER_NAME \ --principal-arn "arn:aws:iam::$ACCOUNT_ID:role/$DATASCIENTIST_ROLE_NAME" \ --kubernetes-groups '["hyperpod-scientist-user-namespace-level","hyperpod-scientist-user-cluster-level"]' -
Erstellen Sie Kubernetes-RBAC-Richtlinien für den Benutzer.
%%bash -x cat << EOF > cluster_level_config.yaml kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: hyperpod-scientist-user-cluster-role rules: - apiGroups: [""] resources: ["pods"] verbs: ["list"] - apiGroups: [""] resources: ["nodes"] verbs: ["list"] - apiGroups: [""] resources: ["namespaces"] verbs: ["list"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: hyperpod-scientist-user-cluster-role-binding subjects: - kind: Group name: hyperpod-scientist-user-cluster-level apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: hyperpod-scientist-user-cluster-role apiGroup: rbac.authorization.k8s.io EOF kubectl apply -f cluster_level_config.yaml cat << EOF > namespace_level_role.yaml kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: namespace: $DATASCIENTIST_HYPERPOD_NAMESPACE name: hyperpod-scientist-user-namespace-level-role rules: - apiGroups: [""] resources: ["pods"] verbs: ["create", "get"] - apiGroups: [""] resources: ["nodes"] verbs: ["get", "list"] - apiGroups: [""] resources: ["pods/log"] verbs: ["get", "list"] - apiGroups: [""] resources: ["pods/exec"] verbs: ["get", "create"] - apiGroups: ["kubeflow.org"] resources: ["pytorchjobs", "pytorchjobs/status"] verbs: ["get", "list", "create", "delete", "update", "describe"] - apiGroups: [""] resources: ["configmaps"] verbs: ["create", "update", "get", "list", "delete"] - apiGroups: [""] resources: ["secrets"] verbs: ["create", "get", "list", "delete"] - apiGroups: [ "inference.sagemaker.aws.amazon.com" ] resources: [ "inferenceendpointconfig", "inferenceendpoint", "jumpstartmodel" ] verbs: [ "get", "list", "create", "delete", "update", "describe" ] - apiGroups: [ "autoscaling" ] resources: [ "horizontalpodautoscalers" ] verbs: [ "get", "list", "watch", "create", "update", "patch", "delete" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: $DATASCIENTIST_HYPERPOD_NAMESPACE name: hyperpod-scientist-user-namespace-level-role-binding subjects: - kind: Group name: hyperpod-scientist-user-namespace-level apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: hyperpod-scientist-user-namespace-level-role apiGroup: rbac.authorization.k8s.io EOF kubectl apply -f namespace_level_role.yaml