هوش داده افلاطون
جستجوی عمودی و هوش مصنوعی

مقیاس LLM با PyTorch 2.0 FSDP در Amazon EKS – قسمت 2 | خدمات وب آمازون

تاریخ:

این یک پست مهمان است که با تیم PyTorch متا نوشته شده است و در ادامه قسمت 1 از این سری، جایی که ما عملکرد و سهولت اجرای PyTorch 2.0 در AWS را نشان می دهیم.

تحقیقات یادگیری ماشین (ML) ثابت کرده است که مدل‌های زبان بزرگ (LLM) که با مجموعه داده‌های بسیار بزرگ آموزش داده شده‌اند، کیفیت مدل بهتری دارند. در چند سال اخیر، اندازه مدل های نسل فعلی به طور قابل توجهی افزایش یافته است و آنها نیازمند ابزارها و زیرساخت های مدرن برای آموزش کارآمد و در مقیاس هستند. PyTorch Distributed Data Parallelism (DDP) به پردازش داده ها در مقیاس به روشی ساده و قوی کمک می کند، اما نیاز دارد که مدل بر روی یک GPU قرار گیرد. کتابخانه PyTorch Fully Sharded Data Parallel (FSDP) با فعال کردن شاردینگ مدل برای آموزش مدل‌های بزرگ در میان کارگران موازی داده، این مانع را می‌شکند.

آموزش مدل توزیع‌شده به مجموعه‌ای از گره‌های کارگری نیاز دارد که بتوانند مقیاس شوند. سرویس الاستیک کوبرنتز آمازون (Amazon EKS) یک سرویس محبوب سازگار با Kubernetes است که فرآیند اجرای بارهای کاری AI/ML را تا حد زیادی ساده می کند و آن را قابل مدیریت تر و زمان کمتری می کند.

در این پست وبلاگ، AWS با تیم PyTorch متا همکاری می‌کند تا درباره نحوه استفاده از کتابخانه PyTorch FSDP برای دستیابی به مقیاس‌بندی خطی مدل‌های یادگیری عمیق در AWS به طور یکپارچه با استفاده از Amazon EKS و Amazon EKS صحبت کند. ظروف یادگیری عمیق AWS (DLC ها). ما این را از طریق اجرای گام به گام آموزش مدل های 7B، 13B و 70B Llama2 با استفاده از Amazon EKS با 16 نشان می دهیم. ابر محاسبه الاستیک آمازون (Amazon EC2) p4de.24xlarge نمونه (هر کدام با 8 پردازنده گرافیکی NVIDIA A100 Tensor Core و هر پردازنده گرافیکی با 80 گیگابایت حافظه HBM2e) یا 16 EC2 p5.48xlarge نمونه‌هایی (هر کدام با 8 پردازنده گرافیکی NVIDIA H100 Tensor Core و هر پردازنده گرافیکی با 80 گیگابایت حافظه HBM3)، دستیابی به مقیاس‌بندی تقریباً خطی در توان عملیاتی و در نهایت امکان زمان آموزش سریع‌تر.

نمودار مقیاس‌بندی زیر نشان می‌دهد که نمونه‌های p5.48xlarge با تنظیم دقیق FSDP Llama87 در یک پیکربندی خوشه‌ای 2 گره، 16% راندمان مقیاس‌بندی را ارائه می‌دهند.

چالش های آموزش LLM

کسب‌وکارها به طور فزاینده‌ای از LLM برای طیف وسیعی از وظایف، از جمله دستیاران مجازی، ترجمه، ایجاد محتوا، و بینایی رایانه‌ای استفاده می‌کنند تا کارایی و دقت را در برنامه‌های مختلف افزایش دهند.

با این حال، آموزش یا تنظیم دقیق این مدل‌های بزرگ برای یک مورد استفاده سفارشی، به مقدار زیادی داده و توان محاسباتی نیاز دارد، که به پیچیدگی مهندسی کلی پشته ML می‌افزاید. این همچنین به دلیل حافظه محدود موجود در یک GPU است که اندازه مدل قابل آموزش را محدود می کند و همچنین اندازه دسته ای هر GPU را که در طول آموزش استفاده می شود محدود می کند.

برای مقابله با این چالش، تکنیک های موازی مدل های مختلف مانند DeepSpeed ​​ZeRO و PyTorch FSDP برای غلبه بر این مانع حافظه محدود GPU ایجاد شده اند. این کار با استفاده از یک تکنیک موازی داده های خرد شده انجام می شود، که در آن هر شتاب دهنده فقط یک برش را نگه می دارد (یک تکه شکسته) یک ماکت مدل به جای کل ماکت مدل، که به طور چشمگیری ردپای حافظه کار آموزشی را کاهش می دهد.

این پست نشان می دهد که چگونه می توانید از PyTorch FSDP برای تنظیم دقیق مدل Llama2 با استفاده از Amazon EKS استفاده کنید. ما با کاهش ظرفیت محاسباتی و GPU برای رسیدگی به نیازهای مدل به این امر دست می‌یابیم.

نمای کلی FSDP

در آموزش PyTorch DDP، هر GPU (به عنوان یک کارگر در زمینه PyTorch) یک کپی کامل از مدل شامل وزن مدل، گرادیان و حالت های بهینه ساز را در خود نگه می دارد. هر کارگر دسته ای از داده ها را پردازش می کند و در پایان پاس به عقب، از یک استفاده می کند همه کم کردن عملیات برای همگام سازی گرادیان ها در بین کارگران مختلف.

وجود یک کپی از مدل در هر GPU، اندازه مدلی را که می‌تواند در یک گردش کار DDP قرار گیرد، محدود می‌کند. FSDP با به اشتراک گذاری پارامترهای مدل، حالت های بهینه ساز و گرادیان ها در میان کارگران موازی داده، در حالی که سادگی موازی سازی داده ها را حفظ می کند، به غلبه بر این محدودیت کمک می کند.

این در نمودار زیر نشان داده شده است، جایی که در مورد DDP، هر GPU یک نسخه کامل از حالت مدل، از جمله حالت بهینه ساز (OS)، گرادیان (G) و پارامترها (P) را در خود دارد: M(OS + G + P). در FSDP، هر پردازنده گرافیکی تنها بخشی از حالت مدل شامل حالت بهینه ساز (OS)، گرادیان (G) و پارامترها (P) را در خود جای می دهد: M. (OS + G + P). استفاده از FSDP منجر به ردپای حافظه GPU به طور قابل توجهی کمتری در مقایسه با DDP در همه کارگران می شود، که امکان آموزش مدل های بسیار بزرگ یا استفاده از اندازه های دسته ای بزرگتر برای کارهای آموزشی را فراهم می کند.

با این حال، این به قیمت افزایش هزینه های ارتباطی است که از طریق بهینه سازی FSDP مانند فرآیندهای ارتباطی و محاسباتی همپوشانی با ویژگی هایی مانند کاهش می یابد. پیش واکشی. برای اطلاعات دقیق تر مراجعه کنید شروع کار با داده های موازی کاملاً خرد شده (FSDP).

FSDP پارامترهای مختلفی را ارائه می دهد که به شما امکان می دهد عملکرد و کارایی مشاغل آموزشی خود را تنظیم کنید. برخی از ویژگی ها و قابلیت های کلیدی FSDP عبارتند از:

  • سیاست بسته بندی ترانسفورماتور
  • دقت مخلوط انعطاف پذیر
  • ایست بازرسی فعال سازی
  • استراتژی های اشتراک گذاری مختلف برای تطابق با سرعت های مختلف شبکه و توپولوژی های خوشه ای:
    • FULL_SHARD - پارامترهای مدل شارد، گرادیان ها و حالت های بهینه ساز
    • HYBRID_SHARD - قطعه کامل در یک گره DDP در سراسر گره ها. پشتیبانی از یک گروه تقسیم بندی انعطاف پذیر برای یک کپی کامل از مدل (HSDP)
    • SHARD_GRAD_OP - فقط گرادیان ها و حالت های بهینه ساز شارد
    • NO_SHARD - مشابه DDP

برای کسب اطلاعات بیشتر در مورد FSDP، مراجعه کنید آموزش کارآمد در مقیاس بزرگ با Pytorch FSDP و AWS.

شکل زیر نحوه عملکرد FSDP برای دو فرآیند موازی داده را نشان می دهد.

بررسی اجمالی راه حل

در این پست، ما یک خوشه محاسباتی را با استفاده از Amazon EKS راه‌اندازی کردیم که یک سرویس مدیریت شده برای اجرای Kubernetes در AWS Cloud و مراکز داده داخلی است. بسیاری از مشتریان آمازون EKS را برای اجرای بارهای کاری AI/ML مبتنی بر Kubernetes، با بهره گیری از عملکرد، مقیاس پذیری، قابلیت اطمینان و در دسترس بودن آن و همچنین ادغام آن با شبکه AWS، امنیت و سایر خدمات، پذیرفته اند.

برای مورد استفاده FSDP ما، از اپراتور آموزش Kubeflow در Amazon EKS، که یک پروژه بومی Kubernetes است که تنظیم دقیق و آموزش توزیع‌شده مقیاس‌پذیر را برای مدل‌های ML تسهیل می‌کند. این فریمورک های مختلف ML، از جمله PyTorch را پشتیبانی می کند، که می توانید از آنها برای استقرار و مدیریت مشاغل آموزشی PyTorch در مقیاس استفاده کنید.

با استفاده از منبع سفارشی PyTorchJob از Kubeflow Training Operator، ما کارهای آموزشی را در Kubernetes با تعداد قابل تنظیمی از کپی های کارگر اجرا می کنیم که به ما امکان می دهد استفاده از منابع را بهینه کنیم.

موارد زیر چند جزء از اپراتور آموزشی است که در مورد استفاده از تنظیم دقیق Llama2 ما نقش دارند:

  • یک کنترلر متمرکز Kubernetes که کارهای آموزشی توزیع شده را برای PyTorch هماهنگ می کند.
  • PyTorchJob، یک منبع سفارشی Kubernetes برای PyTorch، ارائه شده توسط Kubeflow Training Operator، برای تعریف و استقرار مشاغل آموزشی Llama2 در Kubernetes.
  • etcd که مربوط به پیاده سازی مکانیسم قرار ملاقات برای هماهنگی آموزش توزیع شده مدل های PyTorch می باشد. اینetcdسرور به عنوان بخشی از فرآیند قرار ملاقات، هماهنگی و همگام سازی کارگران شرکت کننده را در طول آموزش توزیع شده تسهیل می کند.

نمودار زیر معماری راه حل را نشان می دهد.

بیشتر جزئیات توسط اسکریپت های اتوماسیونی که برای اجرای مثال Llama2 استفاده می کنیم، خلاصه می شود.

ما از ارجاع کد زیر در این مورد استفاده می کنیم:

Llama2 چیست؟

Llama2 یک LLM از قبل آموزش دیده بر روی 2 تریلیون نشانه متن و کد است. این یکی از بزرگترین و قدرتمندترین LLM های موجود امروزی است. می توانید از Llama2 برای کارهای مختلفی از جمله پردازش زبان طبیعی (NLP)، تولید متن و ترجمه استفاده کنید. برای اطلاعات بیشتر مراجعه کنید شروع با Llama.

Llama2 در سه اندازه مدل مختلف موجود است:

  • لاما2-70b – این بزرگترین مدل Llama2 با 70 میلیارد پارامتر است. این قوی ترین مدل Llama2 است و می تواند برای سخت ترین کارها استفاده شود.
  • لاما2-13b – این مدل Llama2 با اندازه متوسط ​​با 13 میلیارد پارامتر است. این تعادل خوبی بین عملکرد و کارایی است و می تواند برای کارهای مختلف استفاده شود.
  • لاما2-7b – این کوچکترین مدل Llama2 با 7 میلیارد پارامتر است. این کارآمدترین مدل Llama2 است و می تواند برای کارهایی که به بالاترین سطح کارایی نیاز ندارند استفاده شود.

این پست شما را قادر می سازد تا تمام این مدل ها را در Amazon EKS تنظیم کنید. برای ارائه یک تجربه ساده و قابل تکرار از ایجاد یک خوشه EKS و اجرای کارهای FSDP روی آن، ما از aws-do-eks پروژه این مثال همچنین با یک خوشه EKS از قبل موجود کار می کند.

یک راهنما اسکریپت در دسترس است GitHub برای یک تجربه خارج از جعبه در بخش‌های بعدی، فرآیند end-to-end را با جزئیات بیشتری توضیح می‌دهیم.

زیرساخت راه حل را فراهم کنید

برای آزمایش‌هایی که در این پست توضیح داده شد، از خوشه‌هایی با گره‌های p4de (GPU A100) و p5 (GPU H100) استفاده می‌کنیم.

خوشه با گره های p4de.24xlarge

برای خوشه خود با گره‌های p4de، از موارد زیر استفاده می‌کنیم eks-gpu-p4de-odcr.yaml متن:

export ODCR_ID=<your-capacityreservation-id>

cat > ./eks-gpu-p4de-odcr.yaml <<EOF
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: do-eks-yaml-p4de-odcr
  version: "1.28"
  region: us-east-1
  tags:
    karpenter.sh/discovery: do-eks-yaml-p4de-odcr
availabilityZones:
  - us-east-1a
  - us-east-1b
  - us-east-1c
  - us-east-1d
managedNodeGroups:
  - name: sys
    instanceType: c5.2xlarge
    desiredCapacity: 1
    iam:
      withAddonPolicies:
        autoScaler: true
        cloudWatch: true
nodeGroups:
  - name: p4de-odcr
    instanceType: p4de.24xlarge
    instancePrefix: p4de-odcr
    privateNetworking: true
    availabilityZones:
      - us-east-1c
    efaEnabled: true
    minSize: 0
    desiredCapacity: 2
    maxSize: 64
    volumeSize: 500
    capacityReservation:
      capacityReservationTarget:
        capacityReservationID: $ODCR_ID
    iam:
      withAddonPolicies:
        cloudWatch: true
        ebs: true
        fsx: true
iam:
  withOIDC: true
EOF

با استفاده از eksctl و مانیفست کلاستر قبلی، یک خوشه با گره‌های p4de ایجاد می‌کنیم:

eksctl create cluster -f ./eks-gpu-p4de-odcr.yaml

خوشه با گره های p5.48x بزرگ

یک الگوی terraform برای یک خوشه EKS با گره‌های P5 در زیر قرار دارد GitHub repo.

شما می توانید خوشه را از طریق سفارشی سازی کنید متغیرها.tf فایل و سپس آن را از طریق Terraform CLI ایجاد کنید:

terraform init && terraform plan -out tfplan && terraform apply tfplan

می توانید با اجرای یک دستور ساده kubectl در دسترس بودن خوشه را تأیید کنید:

kubectl get nodes

خوشه سالم است اگر خروجی این دستور تعداد مورد انتظار گره ها را در وضعیت آماده نشان دهد.

پیش نیازها را مستقر کنید

برای اجرای FSDP در Amazon EKS، از PyTorchJob منبع سفارشی ایجاب می کند etcd و اپراتور آموزش Kubeflow به عنوان پیش نیاز

etcd را با کد زیر اجرا کنید:

kubectl apply -f https://raw.githubusercontent.com/aws-samples/aws-do-eks/main/Container-Root/eks/deployment/etcd/etcd-deployment.yaml

اپراتور Kubeflow Training را با کد زیر مستقر کنید:

kubectl apply -k "github.com/kubeflow/training-operator/manifests/overlays/standalone?ref=v1.7.0"

یک تصویر ظرف FSDP را بسازید و به Amazon ECR فشار دهید

از کد زیر برای ساخت یک تصویر کانتینر FSDP استفاده کنید و آن را فشار دهید رجیستری ظروف الاستیک آمازون (Amazon ECR):

# Download Dockerfile
curl -L -o ./Dockerfile.llama2-efa https://raw.githubusercontent.com/aws-samples/aws-do-eks/main/Container-Root/eks/deployment/distributed-training/pytorch/pytorchjob/fsdp/Dockerfile.llama2-efa

# Build Image
AWS_REGION=$(aws configure get region)
AWS_ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
REGISTRY=${AWS_ACCOUNT}.dkr.ecr.${AWS_REGION}.amazonaws.com/
IMAGE=fsdp
TAG=":llama2-efa"

docker build --progress=plain -t ${REGISTRY}${IMAGE}${TAG} -f ./Dockerfile.llama2-efa .

# Log in to ECR, create registry, push image
aws ecr get-login-password | docker login --username AWS --password-stdin $REGISTRY
aws ecr create-repository --repository-name ${IMAGE}
docker image push ${REGISTRY}${IMAGE}${TAG}

مانیفست FSDP PyTorchJob را ایجاد کنید

خود را وارد کنید نشانه در آغوش گرفتن صورت در قطعه زیر قبل از اجرای آن:

HF_TOKEN=”<insert_your_huggingface_token_here>”

PyTorchJob خود را با آن پیکربندی کنید .NS فایل یا مستقیماً در متغیرهای محیط خود به صورت زیر:

JOB_NAME=fsdp
RDZV_HOST=etcd
RDZV_PORT=2379
NUM_WORKERS=2
INSTANCE_TYPE=p5.48xlarge
GPU_PER_WORKER=8
EFA_PER_WORKER=32
MODEL_NAME=meta-llama/Llama-2-7b-hf

CMD="huggingface-cli login --token ${HF_TOKEN} && torchrun --nproc_per_node=${GPU_PER_WORKER} --nnodes=${NUM_WORKERS} examples/finetuning.py --num_epochs=5 --batch_size_training=3 --enable_fsdp --model_name $MODEL_NAME --output_dir ."

مانیفست PyTorchJob را با استفاده از قالب fsdp و تولید.ش اسکریپت یا مستقیماً با استفاده از اسکریپت زیر آن را ایجاد کنید:

cat > ./fsdp.yaml <<EOF
apiVersion: kubeflow.org/v1
kind: PyTorchJob
metadata:
  name: $JOB_NAME
spec:
  elasticPolicy:
    rdzvBackend: etcd
    rdzvHost: $RDZV_HOST
    rdzvPort: $RDZV_PORT
    minReplicas: 1
    maxReplicas: 64
    maxRestarts: 100
    metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 90
  pytorchReplicaSpecs:
    Worker:
      replicas: $NUM_WORKERS
      restartPolicy: OnFailure
      template:
        metadata:
          labels:
            app: $JOB_NAME
        spec:
          volumes:
            - name: shmem
              hostPath:
                path: /dev/shm
          nodeSelector:
            node.kubernetes.io/instance-type: '${INSTANCE_TYPE}'
          containers:
            - name: pytorch
              image: '${REGISTRY}${IMAGE}${TAG}'
              imagePullPolicy: Always
              resources:
                requests:
                  nvidia.com/gpu: $GPU_PER_WORKER
                  vpc.amazonaws.com/efa: $EFA_PER_WORKER
                limits:
                  nvidia.com/gpu: $GPU_PER_WORKER
                  vpc.amazonaws.com/efa: $EFA_PER_WORKER
              env:
                - name: LOGLEVEL
                  value: DEBUG
                - name: NCCL_DEBUG
                  value: INFO
                - name: TORCH_NCCL_ASYNC_ERROR_HANDLING
                  value: '1'
              command:
                - bash
                - '-c'
                - '${CMD}'
              volumeMounts:
                - name: shmem
                  mountPath: /dev/shm
EOF

PyTorchJob را اجرا کنید

PyTorchJob را با کد زیر اجرا کنید:

kubectl apply -f ./fsdp.yaml

تعداد مشخص شده FDSP Worker Pod ایجاد شده را مشاهده می کنید و پس از کشیدن تصویر وارد حالت Running می شوند.

برای مشاهده وضعیت PyTorchJob از کد زیر استفاده کنید:

kubectl describe -f ./fsdp.yaml

برای متوقف کردن PyTorchJob، از کد زیر استفاده کنید:

kubectl delete -f ./fsdp.yaml

پس از تکمیل یک کار، قبل از شروع اجرای جدید باید آن را حذف کنید. ما همچنین مشاهده کرده ایم که حذفetcdپاد و اجازه راه اندازی مجدد آن قبل از راه اندازی یک کار جدید به جلوگیری از a RendezvousClosedError.

خوشه را مقیاس کنید

می‌توانید مراحل قبلی ایجاد و اجرای مشاغل را تکرار کنید، در حالی که تعداد و نوع نمونه گره‌های کارگر را در خوشه تغییر دهید. این به شما امکان می دهد نمودارهای مقیاس بندی مانند آنچه قبلا نشان داده شده است را تولید کنید. به طور کلی، زمانی که گره های بیشتری به خوشه اضافه می شوند، باید شاهد کاهش ردپای حافظه GPU، کاهش زمان دوره و افزایش توان عملیاتی باشید. نمودار قبلی با انجام چندین آزمایش با استفاده از یک گروه گره p5 با اندازه 1 تا 16 گره تولید شد.

حجم کار آموزشی FSDP را رعایت کنید

قابلیت مشاهده بارهای کاری هوش مصنوعی مولد برای امکان مشاهده مشاغل در حال اجرا و همچنین کمک به حداکثر استفاده از منابع محاسباتی شما مهم است. در این پست، از چند ابزار مشاهده‌پذیری بومی و منبع باز Kubernetes برای این منظور استفاده می‌کنیم. این ابزارها شما را قادر می سازند تا خطاها، آمار و رفتار مدل را ردیابی کنید، و قابلیت مشاهده هوش مصنوعی را به بخش مهمی از هر مورد استفاده تجاری تبدیل می کند. در این بخش، رویکردهای مختلفی را برای مشاهده مشاغل آموزشی FSDP نشان می دهیم.

سیاهههای مربوط به غلاف کارگر

در ابتدایی ترین سطح، باید بتوانید سیاهه های مربوط به غلاف های آموزشی خود را ببینید. این را می توان به راحتی با استفاده از دستورات بومی Kubernetes انجام داد.
ابتدا فهرستی از غلاف ها را بازیابی کنید و نام موردی را که می خواهید گزارش های آن را ببینید پیدا کنید:

kubectl get pods

سپس گزارش‌های مربوط به غلاف انتخابی را مشاهده کنید:

kubectl logs -f <pod_name>

فقط یک کارگر (رهبر منتخب) گزارش غلاف آمار کلی شغل را فهرست می کند. نام غلاف رهبر انتخابی در ابتدای هر گزارش غلاف کارگر موجود است که با کلید مشخص می شود. master_addr=.

استفاده از پردازنده

بارهای آموزشی توزیع شده به منابع CPU و GPU نیاز دارند. برای بهینه‌سازی این حجم‌های کاری، درک نحوه استفاده از این منابع مهم است. خوشبختانه، برخی از ابزارهای منبع باز عالی در دسترس هستند که به تجسم استفاده از CPU و GPU کمک می کنند. برای مشاهده استفاده از CPU، می توانید استفاده کنیدhtop. اگر غلاف‌های کارگر شما حاوی این ابزار هستند، می‌توانید از دستور زیر برای باز کردن یک پوسته در یک pod استفاده کنید و سپس اجرا کنید.htop.

kubectl exec -it <pod_name> -- bash

از طرف دیگر، می توانید یک htop را مستقر کنیدdaemonsetمانند آنچه در زیر ارائه شده است GitHub repo.

Ladaemonsetیک htop pod سبک وزن را روی هر گره اجرا می کند. می توانید در هر یک از این پادها اجرا کنید و آن را اجرا کنیدhtopفرمان:

kubectl exec -it <htop_pod_name> -- htop

تصویر زیر میزان استفاده از CPU را در یکی از گره های خوشه نشان می دهد. در این مورد، ما به یک نمونه P5.48xlarge نگاه می کنیم که دارای 192 vCPU است. هسته‌های پردازنده در حین بارگیری وزن‌های مدل بی‌حرکت هستند و زمانی که وزن‌های مدل در حافظه GPU بارگیری می‌شوند، شاهد افزایش استفاده هستیم.

استفاده از پردازنده گرافیکی

اگرnvtopابزار در پاد شما موجود است، می توانید با استفاده از زیر آن را اجرا کرده و سپس اجرا کنیدnvtop.

kubectl exec -it <pod_name> -- bash

از طرف دیگر، می توانید یک nvtop را مستقر کنیدdaemonsetمانند آنچه در زیر ارائه شده است GitHub repo.

این اجرا خواهد شدnvtopغلاف روی هر گره شما می توانید در هر یک از آن پادها اجرا کنید و اجرا کنیدnvtop:

kubectl exec -it <nvtop_pod_name> -- nvtop

تصویر زیر استفاده از GPU را در یکی از گره‌های کلاستر آموزشی نشان می‌دهد. در این مورد، ما به یک نمونه P5.48xlarge نگاه می کنیم که دارای 8 پردازنده گرافیکی NVIDIA H100 است. در حالی که وزن‌های مدل بارگیری می‌شوند، پردازنده‌های گرافیکی بیکار هستند، سپس با بارگیری وزن مدل بر روی GPU، استفاده از حافظه GPU افزایش می‌یابد، و در حالی که تکرارهای آموزشی در حال انجام است، استفاده از GPU تا 100 درصد افزایش می‌یابد.

داشبورد گرافانا

اکنون که متوجه شدید که سیستم شما در سطح پاد و گره چگونه کار می کند، بررسی معیارها در سطح خوشه نیز مهم است. معیارهای استفاده انبوه را می توان توسط NVIDIA DCGM Exporter و Prometheus جمع آوری کرد و در Grafana تجسم کرد.

نمونه ای از استقرار Prometheus-Grafana در زیر موجود است GitHub repo.

نمونه ای از استقرار صادرکننده DCGM در زیر موجود است GitHub repo.

یک داشبورد ساده Grafana در تصویر زیر نشان داده شده است. با انتخاب معیارهای DCGM زیر ساخته شد: DCGM_FI_DEV_GPU_UTIL, DCGM_FI_MEM_COPY_UTIL, DCGM_FI_DEV_XID_ERRORS, DCGM_FI_DEV_SM_CLOCK, DCGM_FI_DEV_GPU_TEMPو DCGM_FI_DEV_POWER_USAGE. داشبورد را می توان به Prometheus وارد کرد GitHub.

داشبورد زیر یک دوره از یک کار آموزشی تک دوره ای Llama2 7b را نشان می دهد. نمودارها نشان می‌دهند که با افزایش ساعت چند پردازنده جریانی (SM)، مصرف انرژی و دمای پردازنده‌های گرافیکی نیز همراه با استفاده از GPU و حافظه افزایش می‌یابد. همچنین می توانید ببینید که هیچ خطای XID وجود نداشت و GPU ها در این اجرا سالم بودند.

از مارس 2024، قابلیت مشاهده GPU برای EKS به صورت بومی در آن پشتیبانی می‌شود CloudWatch Container Insights. برای فعال کردن این قابلیت کافی است افزونه CloudWatch Observability را در خوشه EKS خود مستقر کنید. سپس می‌توانید معیارهای سطح غلاف، گره و کلاستر را از طریق داشبوردهای از پیش پیکربندی‌شده و قابل تنظیم در Container Insights مرور کنید.

پاک کردن

اگر خوشه خود را با استفاده از مثال های ارائه شده در این وبلاگ ایجاد کرده اید، می توانید کد زیر را برای حذف خوشه و هر منبع مرتبط با آن، از جمله VPC، اجرا کنید:
برای eksctl:

eksctl delete cluster -f ./eks-gpu-p4de-odcr.yaml

برای ترافورم:

terraform destroy

ویژگی های آینده

انتظار می رود FSDP دارای ویژگی اشتراک گذاری در هر پارامتر باشد که هدف آن بهبود بیشتر فضای حافظه در هر GPU است. علاوه بر این، توسعه مداوم پشتیبانی از FP8 با هدف بهبود عملکرد FSDP در پردازنده‌های گرافیکی H100 است. در نهایت، زمانی که FSDP باtorch.compile، امیدواریم شاهد بهبود عملکرد بیشتر و فعال کردن ویژگی هایی مانند چک پوینت فعال سازی انتخابی باشیم.

نتیجه

در این پست، ما در مورد اینکه چگونه FSDP ردپای حافظه را در هر GPU کاهش می‌دهد، آموزش مدل‌های بزرگ‌تر را کارآمدتر و دستیابی به مقیاس‌بندی خطی تقریباً در توان پردازشی را مورد بحث قرار می‌دهد. ما این را از طریق اجرای گام به گام آموزش مدل Llama2 با استفاده از Amazon EKS در نمونه‌های P4de و P5 نشان دادیم و از ابزارهای مشاهده‌پذیری مانند kubectl، htop، nvtop و dcgm برای نظارت بر گزارش‌ها و همچنین استفاده از CPU و GPU استفاده کردیم.

ما شما را تشویق می کنیم که از PyTorch FSDP برای مشاغل آموزشی LLM خود استفاده کنید. شروع کنید در aws-do-fsdp.


درباره نویسنده

کانوالجیت خرمی یک معمار اصلی راه حل های AI/ML در خدمات وب آمازون است. او با مشتریان AWS برای ارائه راهنمایی و کمک فنی کار می کند و به آنها کمک می کند ارزش راه حل های یادگیری ماشین خود را در AWS بهبود بخشند. Kanwaljit در کمک به مشتریان با برنامه های کاربردی محاسباتی کانتینری، توزیع شده و یادگیری عمیق تخصص دارد.

الکس ایانکولسکی یک معمار راه حل های اصلی، یادگیری ماشین خود مدیریت در AWS است. او یک مهندس نرم افزار و زیرساخت کامل است که دوست دارد کارهای عمیق و عملی انجام دهد. در نقش خود، او بر کمک به مشتریان با کانتینری‌سازی و هماهنگ‌سازی بارهای کاری ML و AI در سرویس‌های AWS با کانتینر تمرکز می‌کند. او همچنین نویسنده منبع باز است انجام چارچوب و یک کاپیتان Docker که عاشق استفاده از فناوری‌های کانتینر برای تسریع سرعت نوآوری و در عین حال حل بزرگترین چالش‌های جهان است.

آنا سیموز یک متخصص اصلی یادگیری ماشین، چارچوب ML در AWS است. او از مشتریانی پشتیبانی می کند که هوش مصنوعی، ML و هوش مصنوعی مولد را در مقیاس بزرگ در زیرساخت HPC در فضای ابری به کار می گیرند. آنا بر حمایت از مشتریان برای دستیابی به عملکرد قیمت برای بارهای کاری جدید و استفاده از موارد برای هوش مصنوعی و یادگیری ماشینی مولد تمرکز دارد.

حمید شجاعی یک مهندس شریک در PyTorch است که روی منبع باز، بهینه سازی مدل با کارایی بالا، آموزش توزیع شده کار می کند (FSDP) و استنتاج. او همکار خالق است دستور غذای لاما و مشارکت کننده در TorchServe. علاقه اصلی او بهبود کارایی هزینه است و هوش مصنوعی را برای جامعه گسترده تر قابل دسترس تر می کند.

رایت کمتر یک مهندس هوش مصنوعی / شریک در PyTorch است. او روی هسته های Triton/CUDA کار می کند (تسریع Dequant با تجزیه کار SplitK) بهینه‌سازهای صفحه‌دار، جریانی و کوانتیزه‌شده. و PyTorch توزیع شد (PyTorch FSDP).

نقطه_img

جدیدترین اطلاعات

نقطه_img

چت با ما

سلام! چگونه می توانم به شما کمک کنم؟