ความฉลาดทางข้อมูลเชิงกำเนิด

ความสามารถในการสังเกตแบบโอเพ่นซอร์สสำหรับโหนด AWS Inferentia ภายในคลัสเตอร์ Amazon EKS อเมซอนเว็บเซอร์วิส

วันที่:

การพัฒนาล่าสุดในแมชชีนเลิร์นนิง (ML) ได้นำไปสู่โมเดลที่ใหญ่ขึ้นเรื่อยๆ ซึ่งบางโมเดลต้องใช้พารามิเตอร์หลายแสนล้านรายการ แม้ว่าโมเดลเหล่านี้จะมีประสิทธิภาพมากกว่า แต่การฝึกอบรมและการอนุมานเกี่ยวกับโมเดลเหล่านั้นจำเป็นต้องใช้ทรัพยากรในการคำนวณจำนวนมาก แม้จะมีไลบรารีการฝึกอบรมแบบกระจายขั้นสูงที่พร้อมใช้งาน แต่เป็นเรื่องปกติสำหรับงานฝึกอบรมและการอนุมานที่ต้องใช้ตัวเร่งความเร็วหลายร้อยตัว (GPU หรือชิป ML ที่สร้างขึ้นตามวัตถุประสงค์เฉพาะ เช่น การฝึกอบรม AWS และ การอนุมาน AWS) และดังนั้นจึงเป็นสิบหรือหลายร้อยกรณี

ในสภาพแวดล้อมแบบกระจายดังกล่าว ความสามารถในการสังเกตของทั้งสองอินสแตนซ์และชิป ML กลายเป็นกุญแจสำคัญในการปรับแต่งประสิทธิภาพของโมเดลอย่างละเอียดและการเพิ่มประสิทธิภาพต้นทุน หน่วยวัดช่วยให้ทีมเข้าใจพฤติกรรมปริมาณงานและเพิ่มประสิทธิภาพการจัดสรรทรัพยากรและการใช้ประโยชน์ วินิจฉัยความผิดปกติ และเพิ่มประสิทธิภาพโครงสร้างพื้นฐานโดยรวม สำหรับนักวิทยาศาสตร์ข้อมูล การใช้ชิป ML และความอิ่มตัวยังเกี่ยวข้องกับการวางแผนกำลังการผลิตด้วย

โพสต์นี้จะแนะนำคุณผ่าน รูปแบบการสังเกตแบบโอเพ่นซอร์สสำหรับ AWS Inferentiaซึ่งจะแสดงวิธีตรวจสอบประสิทธิภาพของชิป ML ที่ใช้ใน บริการ Amazon Elastic Kubernetes คลัสเตอร์ (Amazon EKS) โดยมีโหนดระนาบข้อมูลตาม อเมซอน อีลาสติก คอมพิวท์ คลาวด์ (Amazon EC2) ประเภทอินสแตนซ์ อินฟ1 และ อินฟ2.

ลวดลายเป็นส่วนหนึ่งของ ตัวเร่งการสังเกต AWS CDKซึ่งเป็นชุดโมดูลที่เน้นความคิดเห็นเพื่อช่วยคุณตั้งค่าความสามารถในการสังเกตสำหรับคลัสเตอร์ Amazon EKS AWS CDK Observability Accelerator ได้รับการจัดระเบียบตามรูปแบบ ซึ่งเป็นหน่วยที่สามารถนำมาใช้ซ้ำได้สำหรับการปรับใช้ทรัพยากรหลายรายการ ชุดรูปแบบการสังเกตโอเพ่นซอร์สของเครื่องมือการสังเกตด้วย อเมซอน Managed Grafana แดชบอร์ด AWS Distro สำหรับ OpenTelemetry นักสะสมเพื่อรวบรวมตัวชี้วัดและ บริการจัดการของ Amazon สำหรับ Prometheus เพื่อจัดเก็บพวกเขา

ภาพรวมโซลูชัน

ไดอะแกรมต่อไปนี้แสดงสถาปัตยกรรมโซลูชัน

โซลูชันนี้ปรับใช้คลัสเตอร์ Amazon EKS กับกลุ่มโหนดที่มีอินสแตนซ์ Inf1

ประเภท AMI ของกลุ่มโหนดคือ AL2_x86_64_GPUซึ่งใช้ไฟล์ Amazon EKS เพิ่มประสิทธิภาพ Amazon Linux AMI ที่เร่งความเร็วแล้ว- นอกเหนือจากการกำหนดค่า AMI ที่ปรับให้เหมาะสมกับ Amazon EKS แบบมาตรฐานแล้ว AMI แบบเร่งความเร็วยังรวม รันไทม์ของ NeuronX.

หากต้องการเข้าถึงชิป ML จาก Kubernetes รูปแบบจะปรับใช้ไฟล์ AWS เซลล์ประสาท ปลั๊กอินของอุปกรณ์

ตัววัดจะเปิดเผยต่อ Amazon Managed Service สำหรับ Prometheus โดย neuron-monitor DaemonSet ซึ่งปรับใช้คอนเทนเนอร์ขั้นต่ำด้วย เครื่องมือของเซลล์ประสาท ติดตั้งแล้ว โดยเฉพาะ neuron-monitor DaemonSet รันไฟล์ neuron-monitor คำสั่งไพพ์เข้าไปใน neuron-monitor-prometheus.py สคริปต์ที่แสดงร่วม (ทั้งสองคำสั่งเป็นส่วนหนึ่งของคอนเทนเนอร์):

neuron-monitor | neuron-monitor-prometheus.py --port <port>

คำสั่งใช้ส่วนประกอบต่อไปนี้:

  • neuron-monitor รวบรวมตัวชี้วัดและสถิติจากแอปพลิเคชัน Neuron ที่ทำงานบนระบบและสตรีมข้อมูลที่รวบรวมไปยัง stdout รูปแบบ JSON
  • neuron-monitor-prometheus.py แมปและเปิดเผยข้อมูลการวัดและส่งข้อมูลทางไกลจากรูปแบบ JSON เป็นรูปแบบที่เข้ากันได้กับ Prometheus

ข้อมูลจะถูกแสดงเป็นภาพใน Amazon Managed Grafana โดยแดชบอร์ดที่เกี่ยวข้อง

การตั้งค่าที่เหลือเพื่อรวบรวมและแสดงภาพตัววัดด้วย Amazon Managed Service สำหรับ Prometheus และ Amazon Managed Grafana นั้นคล้ายคลึงกับการตั้งค่าที่ใช้ในรูปแบบโอเพ่นซอร์สอื่นๆ ซึ่งรวมอยู่ใน AWS Observability Accelerator for CDK ที่เก็บ GitHub

เบื้องต้น

คุณต้องมีสิ่งต่อไปนี้เพื่อทำตามขั้นตอนในโพสต์นี้:

ตั้งค่าสภาพแวดล้อม

ทำตามขั้นตอนต่อไปนี้เพื่อตั้งค่าสภาพแวดล้อมของคุณ:

  1. เปิดหน้าต่างเทอร์มินัลแล้วรันคำสั่งต่อไปนี้:
export AWS_REGION=<YOUR AWS REGION>
export ACCOUNT_ID=$(aws sts get-caller-identity --query 'Account' --output text)

  1. รับรหัสพื้นที่ทำงานของพื้นที่ทำงาน Amazon Managed Grafana ที่มีอยู่:
aws grafana list-workspaces

ต่อไปนี้คือผลลัพธ์ตัวอย่างของเรา:

{
  "workspaces": [
    {
      "authentication": {
        "providers": [
          "AWS_SSO"
        ]
      },
      "created": "2023-06-07T12:23:56.625000-04:00",
      "description": "accelerator-workspace",
      "endpoint": "g-XYZ.grafana-workspace.us-east-2.amazonaws.com",
      "grafanaVersion": "9.4",
      "id": "g-XYZ",
      "modified": "2023-06-07T12:30:09.892000-04:00",
      "name": "accelerator-workspace",
      "notificationDestinations": [
        "SNS"
      ],
      "status": "ACTIVE",
      "tags": {}
    }
  ]
}

  1. กำหนดค่าของ id และ endpoint ให้กับตัวแปรสภาพแวดล้อมต่อไปนี้:
export COA_AMG_WORKSPACE_ID="<<YOUR-WORKSPACE-ID, similar to the above g-XYZ, without quotation marks>>"
export COA_AMG_ENDPOINT_URL="<<https://YOUR-WORKSPACE-URL, including protocol (i.e. https://), without quotation marks, similar to the above https://g-XYZ.grafana-workspace.us-east-2.amazonaws.com>>"

COA_AMG_ENDPOINT_URL จำเป็นต้องรวม https://.

  1. สร้างคีย์ Grafana API จากพื้นที่ทำงาน Amazon Managed Grafana:
export AMG_API_KEY=$(aws grafana create-workspace-api-key 
--key-name "grafana-operator-key" 
--key-role "ADMIN" 
--seconds-to-live 432000 
--workspace-id $COA_AMG_WORKSPACE_ID 
--query key 
--output text)

  1. ตั้งค่าความลับใน ผู้จัดการระบบ AWS:
aws ssm put-parameter --name "/cdk-accelerator/grafana-api-key" 
--type "SecureString" 
--value $AMG_API_KEY 
--region $AWS_REGION

ข้อมูลลับนี้จะเข้าถึงได้โดยส่วนเสริมข้อมูลลับภายนอก และเปิดให้ใช้งานเป็นความลับของ Kubernetes ในคลัสเตอร์ EKS

บูตสภาพแวดล้อม AWS CDK

ขั้นตอนแรกในการปรับใช้ AWS CDK คือการบูตสภาพแวดล้อม คุณใช้ cdk bootstrap คำสั่งใน AWS CDK CLI เพื่อเตรียมสภาพแวดล้อม (การรวมกันของบัญชี AWS และภูมิภาค AWS) ด้วยทรัพยากรที่ AWS CDK ต้องการเพื่อดำเนินการปรับใช้ในสภาพแวดล้อมนั้น จำเป็นต้องมีการบูทสแตรป AWS CDK สำหรับแต่ละบัญชีและการรวมภูมิภาค ดังนั้นหากคุณบูทสแตรป AWS CDK ในภูมิภาคแล้ว คุณไม่จำเป็นต้องดำเนินการบูทสแตรปซ้ำอีก

cdk bootstrap aws://$ACCOUNT_ID/$AWS_REGION

ปรับใช้โซลูชัน

ทำตามขั้นตอนต่อไปนี้เพื่อปรับใช้โซลูชัน:

  1. โคลน cdk-aws-ตัวเร่งความเร็วในการสังเกต พื้นที่เก็บข้อมูลและติดตั้งแพ็คเกจการพึ่งพา พื้นที่เก็บข้อมูลนี้มีโค้ด AWS CDK v2 ที่เขียนด้วย TypeScript
git clone https://github.com/aws-observability/cdk-aws-observability-accelerator.git
cd cdk-aws-observability-accelerator

การตั้งค่าจริงสำหรับไฟล์ JSON แดชบอร์ด Grafana จะต้องระบุในบริบท AWS CDK คุณต้องอัปเดต context ใน cdk.json ไฟล์ที่อยู่ในไดเร็กทอรีปัจจุบัน ตำแหน่งของแดชบอร์ดถูกกำหนดโดย fluxRepository.values.GRAFANA_NEURON_DASH_URL พารามิเตอร์และ neuronNodeGroup ใช้เพื่อกำหนดประเภทอินสแตนซ์ หมายเลข และ ร้านค้า Amazon Elastic Block ขนาด (Amazon EBS) ที่ใช้สำหรับโหนด

  1. ป้อนข้อมูลโค้ดต่อไปนี้ลงใน cdk.jsonแทนที่ context:
"context": {
    "fluxRepository": {
      "name": "grafana-dashboards",
      "namespace": "grafana-operator",
      "repository": {
        "repoUrl": "https://github.com/aws-observability/aws-observability-accelerator",
        "name": "grafana-dashboards",
        "targetRevision": "main",
        "path": "./artifacts/grafana-operator-manifests/eks/infrastructure"
      },
      "values": {
        "GRAFANA_CLUSTER_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/cluster.json",
        "GRAFANA_KUBELET_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/kubelet.json",
        "GRAFANA_NSWRKLDS_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/namespace-workloads.json",
        "GRAFANA_NODEEXP_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/nodeexporter-nodes.json",
        "GRAFANA_NODES_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/nodes.json",
        "GRAFANA_WORKLOADS_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/infrastructure/workloads.json",
        "GRAFANA_NEURON_DASH_URL" : "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/grafana-dashboards/eks/neuron/neuron-monitor.json"
      },
      "kustomizations": [
        {
          "kustomizationPath": "./artifacts/grafana-operator-manifests/eks/infrastructure"
        },
        {
          "kustomizationPath": "./artifacts/grafana-operator-manifests/eks/neuron"
        }
      ]
    },
     "neuronNodeGroup": {
      "instanceClass": "inf1",
      "instanceSize": "2xlarge",
      "desiredSize": 1, 
      "minSize": 1, 
      "maxSize": 3,
      "ebsSize": 512
    }
  }

คุณสามารถแทนที่ประเภทอินสแตนซ์ Inf1 ด้วย Inf2 และเปลี่ยนขนาดได้ตามต้องการ หากต้องการตรวจสอบความพร้อมใช้งานในภูมิภาคที่คุณเลือก ให้รันคำสั่งต่อไปนี้ (แก้ไข Values ตามที่คุณเห็นสมควร):

aws ec2 describe-instance-type-offerings 
--filters Name=instance-type,Values="inf1*" 
--query "InstanceTypeOfferings[].InstanceType" 
--region $AWS_REGION

  1. ติดตั้งการพึ่งพาโครงการ:
npm install

  1. รันคำสั่งต่อไปนี้เพื่อปรับใช้รูปแบบการสังเกตโอเพ่นซอร์ส:
make build
make pattern single-new-eks-inferentia-opensource-observability deploy

ตรวจสอบโซลูชัน

ทำตามขั้นตอนต่อไปนี้เพื่อตรวจสอบความถูกต้องของโซลูชัน:

  1. เรียกใช้ update-kubeconfig สั่งการ. คุณควรจะได้รับคำสั่งจากข้อความเอาท์พุตของคำสั่งก่อนหน้า:
aws eks update-kubeconfig --name single-new-eks-inferentia-opensource... --region <your region> --role-arn arn:aws:iam::xxxxxxxxx:role/single-new-eks-....

  1. ตรวจสอบทรัพยากรที่คุณสร้าง:
kubectl get pods -A

ภาพหน้าจอต่อไปนี้แสดงผลลัพธ์ตัวอย่างของเรา

  1. ตรวจสอบให้แน่ใจ neuron-device-plugin-daemonset DaemonSet กำลังทำงาน:
kubectl get ds neuron-device-plugin-daemonset --namespace kube-system

ต่อไปนี้คือผลลัพธ์ที่คาดหวังของเรา:

NAME                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
neuron-device-plugin-daemonset   1         1         1       1            1           <none>          2h

  1. ยืนยันว่า neuron-monitor DaemonSet กำลังทำงาน:
kubectl get ds neuron-monitor --namespace kube-system

ต่อไปนี้คือผลลัพธ์ที่คาดหวังของเรา:

NAME             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
neuron-monitor   1         1         1       1            1           <none>          2h

  1. หากต้องการตรวจสอบว่าอุปกรณ์และแกนของ Neuron มองเห็นได้ ให้เรียกใช้ neuron-ls และ neuron-top คำสั่งจาก เช่น พ็อดตรวจสอบเซลล์ประสาทของคุณ (คุณสามารถรับชื่อของพ็อดได้จากเอาต์พุตของ kubectl get pods -A):
kubectl exec -it {your neuron-monitor pod} -n kube-system -- /bin/bash -c "neuron-ls"

ภาพหน้าจอต่อไปนี้แสดงผลลัพธ์ที่คาดหวังของเรา

kubectl exec -it {your neuron-monitor pod} -n kube-system -- /bin/bash -c "neuron-top"

ภาพหน้าจอต่อไปนี้แสดงผลลัพธ์ที่คาดหวังของเรา

แสดงภาพข้อมูลโดยใช้แดชบอร์ด Grafana Neuron

เข้าสู่ระบบพื้นที่ทำงาน Amazon Managed Grafana ของคุณแล้วไปที่ แผงควบคุม แผงหน้าปัด. คุณควรเห็นแดชบอร์ดชื่อ เซลล์ประสาท / มอนิเตอร์.

หากต้องการดูตัวชี้วัดที่น่าสนใจบนแดชบอร์ด Grafana เราใช้รายการต่อไปนี้:

curl https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/main/artifacts/k8s-deployment-manifest-templates/neuron/pytorch-inference-resnet50.yml | kubectl apply -f -

นี่เป็นตัวอย่างเวิร์กโหลดที่คอมไพล์ ทอร์ชวิชัน รุ่น ResNet50 และรันการอนุมานซ้ำ ๆ ในลูปเพื่อสร้างข้อมูลการวัดและส่งข้อมูลทางไกล

หากต้องการตรวจสอบว่าปรับใช้พ็อดสำเร็จแล้ว ให้รันโค้ดต่อไปนี้:

kubectl get pods

คุณควรเห็นพ็อดชื่อ pytorch-inference-resnet50.

หลังจากนั้นไม่กี่นาทีก็มองเข้าไปใน เซลล์ประสาท / มอนิเตอร์ แดชบอร์ด คุณควรเห็นเมตริกที่รวบรวมไว้คล้ายกับภาพหน้าจอต่อไปนี้

Grafana Operator และ Flux ทำงานร่วมกันเสมอเพื่อซิงโครไนซ์แดชบอร์ดของคุณกับ Git หากคุณลบแดชบอร์ดโดยไม่ได้ตั้งใจ แดชบอร์ดเหล่านั้นจะถูกจัดเตรียมใหม่โดยอัตโนมัติ

ทำความสะอาด

คุณสามารถลบสแต็ก AWS CDK ทั้งหมดได้ด้วยคำสั่งต่อไปนี้:

make pattern single-new-eks-inferentia-opensource-observability destroy

สรุป

ในโพสต์นี้ เราได้แสดงให้คุณเห็นถึงวิธีการแนะนำความสามารถในการสังเกตด้วยเครื่องมือโอเพ่นซอร์สในคลัสเตอร์ EKS ที่มี Data Plane ที่ใช้งาน EC2 Inf1 instance เราเริ่มต้นด้วยการเลือก AMI แบบเร่งความเร็วที่ปรับให้เหมาะสมกับ Amazon EKS สำหรับโหนด Data Plane ซึ่งรวมถึงรันไทม์คอนเทนเนอร์ Neuron ที่ให้การเข้าถึงอุปกรณ์ AWS Inferentia และ Trainium Neuron จากนั้น เพื่อเปิดเผยคอร์และอุปกรณ์ของ Neuron กับ Kubernetes เราได้ปรับใช้ปลั๊กอินอุปกรณ์ Neuron การรวบรวมและการแมปข้อมูลการวัดและส่งข้อมูลทางไกลจริงในรูปแบบที่เข้ากันได้กับ Prometheus ทำได้ผ่านทาง neuron-monitor และ neuron-monitor-prometheus.py- ตัววัดได้มาจาก Amazon Managed Service สำหรับ Prometheus และแสดงบนแดชบอร์ด Neuron ของ Amazon Managed Grafana

เราขอแนะนำให้คุณสำรวจรูปแบบความสามารถในการสังเกตเพิ่มเติมใน AWS Observability Accelerator สำหรับ CDK ที่เก็บ GitHub หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Neuron โปรดดูที่ เอกสารประกอบ AWS Neuron.


เกี่ยวกับผู้เขียน

ริคคาร์โด้ เฟรสชี่ เป็นสถาปนิกโซลูชันอาวุโสที่ AWS โดยมุ่งเน้นที่การปรับแอปพลิเคชันให้ทันสมัย เขาทำงานอย่างใกล้ชิดกับคู่ค้าและลูกค้าเพื่อช่วยพวกเขาเปลี่ยนแปลงภูมิทัศน์ด้าน IT ในการเดินทางสู่ AWS Cloud โดยการปรับโครงสร้างแอปพลิเคชันที่มีอยู่ใหม่และสร้างแอปพลิเคชันใหม่

จุด_img

ข่าวกรองล่าสุด

จุด_img