AWS Sagemaker Hyperpod-এ উচ্চ-কার্যক্ষমতা সম্পন্ন জিপিইউ মেমরি স্থানান্তর
3200 Gbps এর যাত্রা
আধুনিক ডিপ লার্নিং অবকাঠামোতে প্রায়শই মেশিন জুড়ে জিপিইউ-এর মধ্যে প্রচুর ডেটা স্থানান্তরের প্রয়োজন হয়। Perplexity-তে, আমরা একটি অনন্য প্রযুক্তিগত চ্যালেঞ্জের মুখোমুখি হয়েছিলাম: সম্ভাব্য সর্বোচ্চ গতিতে মেশিনগুলির মধ্যে অ-সংলগ্ন (নন-কনটিগুয়াস) জিপিইউ মেমরি অঞ্চলগুলি দক্ষতার সাথে স্থানান্তর করা। আমাদের লক্ষ্য প্ল্যাটফর্ম, AWS p5 ইন্সট্যান্স, 32টি নেটওয়ার্ক কার্ডের মাধ্যমে 3200 Gbps এর একটি চিত্তাকর্ষক নেটওয়ার্ক ব্যান্ডউইথ প্রদান করে। এই নিবন্ধটি আমাদের একটি কাস্টম উচ্চ-কার্যক্ষমতা সম্পন্ন নেটওয়ার্কিং সমাধান তৈরির যাত্রা শেয়ার করে যা এই তাত্ত্বিক ব্যান্ডউইথের 97.1% অর্জন করে।
প্রযুক্তিগত চ্যালেঞ্জ
আমাদের ব্যবহারের ক্ষেত্রে বেশ কিছু মূল প্রযুক্তিগত প্রয়োজনীয়তা উপস্থাপন করা হয়েছে:
- অ-সংলগ্ন মেমরি অংশগুলির রিমোট জিপিইউগুলির মধ্যে উচ্চ-ব্যান্ডউইথ স্থানান্তর
- চলমান ক্রিয়াকলাপ ব্যাহত না করে কুবারনেটস (Kubernetes) ডিপ্লয়মেন্ট থেকে গতিশীলভাবে নোড যোগ বা অপসারণ করার ক্ষমতা
- পিয়ার-টু-পিয়ার যোগাযোগের প্যাটার্নের জন্য সমর্থন
যদিও NVIDIA-এর NCCL লাইব্রেরি ডিস্ট্রিবিউটেড ডিপ লার্নিংয়ের জন্য ডি ফ্যাক্টো স্ট্যান্ডার্ড, তবে এটি আমাদের ব্যবহারের ক্ষেত্রে আদর্শ ছিল না:
- NCCL যৌথ যোগাযোগের ক্ষেত্রে উৎকৃষ্ট হলেও একটি স্ট্যাটিক "ওয়ার্ল্ড" স্থাপন করা প্রয়োজন, যার ফলে অংশগ্রহণকারী নোডগুলিকে সামঞ্জস্য করার সময় পুরো ক্লাস্টারটি রিস্টার্ট করতে হয়।
- NCCL-এর সিঙ্ক্রোনাস কমিউনিকেশন মডেল আমাদের অ্যাসিনক্রোনাস ওয়ার্কলোডের জন্য জটিলতা বাড়ায়
- আমরা অপ্টিমাইজেশনের জন্য আমাদের মেমরি স্থানান্তর প্যাটার্নগুলির উপর সরাসরি নিয়ন্ত্রণ চেয়েছিলাম
- আমাদের নিজস্ব সমাধান তৈরি করা মূল্যবান শেখার সুযোগ প্রদান করেছে
আধুনিক উচ্চ-কার্যক্ষমতা সম্পন্ন নেটওয়ার্ক
আমাদের সমাধান বুঝতে, আসুন প্রথমে অন্বেষণ করি কীভাবে আধুনিক উচ্চ-কার্যক্ষমতা সম্পন্ন নেটওয়ার্কগুলি ঐতিহ্যবাহী নেটওয়ার্কিং থেকে আলাদা।
আমরা প্রতিদিন যে বেশিরভাগ নেটওয়ার্ক ব্যবহার করি তা TCP/IP প্রোটোকলের উপর নির্ভর করে, যেখানে অ্যাপ্লিকেশনগুলি সকেট ব্যবহার করে অপারেটিং সিস্টেম কার্নেলের মাধ্যমে নেটওয়ার্ক কার্ডের সাথে যোগাযোগ করে। যাইহোক, উচ্চ-কার্যক্ষমতা সম্পন্ন নেটওয়ার্কগুলি RDMA (Remote Direct Memory Access) ব্যবহার করে - একটি সম্পূর্ণ ভিন্ন হার্ডওয়্যার এবং সফটওয়্যার স্ট্যাক যা CPU-কে যুক্ত না করেই মেশিনগুলির মধ্যে সরাসরি মেমরি অ্যাক্সেস সক্ষম করে।
AWS প্রদান করে Elastic Fabric Adapter (EFA), একটি কাস্টম নেটওয়ার্ক ইন্টারফেস যা Amazon-এর কাস্টম প্রোটোকল বাস্তবায়ন করে যাকে Scalable Reliable Datagram (SRD) বলা হয়। ঐতিহ্যবাহী TCP/IP নেটওয়ার্কিংয়ের বিপরীতে যেখানে ইউজার স্পেস, কার্নেল স্পেস এবং নেটওয়ার্ক বাফারের মধ্যে ডেটা একাধিকবার অনুলিপি করতে হয়, RDMA সহ EFA জিপিইউ মেমরি এবং নেটওয়ার্ক কার্ডের মধ্যে সরাসরি ডেটা স্থানান্তরের অনুমতি দেয়, যা CPU-কে সম্পূর্ণভাবে এড়িয়ে চলে।
উচ্চ-কার্যক্ষমতা সম্পন্ন নেটওয়ার্ক ডিজাইনের দর্শন
উচ্চ-কার্যক্ষমতা সম্পন্ন নেটওয়ার্কিং সিস্টেম তৈরির জন্য বেশ কিছু মৌলিক ধারণাকে নতুন করে ভাবার প্রয়োজন হয়:
- বাফার মালিকানা: ঐতিহ্যবাহী সকেটের বিপরীতে যেখানে কার্নেল নেটওয়ার্ক বাফার পরিচালনা করে এবং ইউজার স্পেস ও কার্নেল স্পেসের মধ্যে অনুলিপি করার প্রয়োজন হয়, RDMA-তে অ্যাপ্লিকেশনগুলিকে তাদের নিজস্ব বাফার পরিচালনা করতে হয়। যখন কোনো অ্যাপ্লিকেশন একটি নেটওয়ার্ক অপারেশন শুরু করে, তখন এটি অপারেশন সম্পূর্ণ না হওয়া পর্যন্ত বাফারের মালিকানা নেটওয়ার্ক কার্ডে স্থানান্তর করে, যা ডেটা অনুলিপির প্রয়োজনীয়তা দূর করে।
- মেমরি রেজিস্ট্রেশন: অ্যাপ্লিকেশনগুলিকে অবশ্যই অপারেটিং সিস্টেম কার্নেলের সাথে মেমরি অঞ্চলগুলি রেজিস্টার করতে হবে। কার্নেল ভার্চুয়াল অ্যাড্রেস ম্যাপিং সেট আপ করে যা CPU, GPU এবং নেটওয়ার্ক কার্ডগুলিকে একই ভার্চুয়াল অ্যাড্রেস বুঝতে দেয়। এই রেজিস্ট্রেশনটি একটি এককালীন অপারেশন যা পরবর্তী জিরো-কপি ডেটা স্থানান্তর সক্ষম করে।
- কন্ট্রোল প্লেন বনাম ডেটা প্লেন: উচ্চ-কার্যক্ষমতা সম্পন্ন নেটওয়ার্কগুলি অপারেশনগুলিকে দুটি বিভাগে বিভক্ত করে:
- নিরাপত্তা নিশ্চিত করতে কন্ট্রোল প্লেন অপারেশনগুলি (যেমন কানেকশন সেটআপ এবং মেমরি রেজিস্ট্রেশন) কার্নেলের মাধ্যমে যায়
- সর্বোচ্চ পারফরম্যান্সের জন্য ডেটা প্লেন অপারেশনগুলি (প্রকৃত ডেটা স্থানান্তর) কার্নেলকে এড়িয়ে চলে
- ট্রান্সমিশনের আগে রিসেপশন: কার্নেল-পরিচালিত বাফার ছাড়া, অ্যাপ্লিকেশনগুলিকে অবশ্যই ইনকামিং ডেটা কোথায় রাখা উচিত তা নির্দিষ্ট করে রিসিভ অপারেশনগুলি প্রি-পোস্ট করতে হবে। এটি সকেট মডেল থেকে একটি মৌলিক পরিবর্তন যেখানে অ্যাপ্লিকেশনগুলি যে কোনো সময় ডেটা রিসিভ করতে পারে।
- পোল-ভিত্তিক কমপ্লিশন:
epoll-এর মতো মেকানিজমের মাধ্যমে কার্নেল নোটিফিকেশনের জন্য অপেক্ষা করার পরিবর্তে, অ্যাপ্লিকেশনগুলি সরাসরি হার্ডওয়্যার কমপ্লিশন কিউ পোল করে। এটি সিস্টেম কল ওভারহেড দূর করে এবং সম্পূর্ণ হওয়া অপারেশনগুলিতে অবিলম্বে প্রতিক্রিয়া জানানোর অনুমতি দেয়। - হার্ডওয়্যার টপোলজি সচেতনতা: সর্বাধিক পারফরম্যান্স অর্জনের জন্য হার্ডওয়্যার টপোলজি বোঝা এবং অপ্টিমাইজ করা অত্যন্ত গুরুত্বপূর্ণ।
হার্ডওয়্যার টপোলজি বোঝা
AWS p5 ইন্সট্যান্সগুলির একটি পরিশীলিত অভ্যন্তরীণ আর্কিটেকচার রয়েছে। নিচে দেখানো হয়েছে, প্রতিটি ইন্সটান্সে দুটি NUMA নোড গঠনকারী দুটি CPU সকেট রয়েছে, যেখানে প্রতিটি NUMA নোড চারটি PCIe সুইচের সাথে সংযুক্ত রয়েছে:
প্রতিটি PCIe সুইচের নিচে, আমরা পাই:
- চারটি 100 Gbps EFA নেটওয়ার্ক কার্ড
- একটি NVIDIA H100 GPU
- একটি NVMe SSD
TCP/IP এবং RDMA স্থানান্তরের জন্য ডেটা পাথগুলি তাদের পদ্ধতির মৌলিক পার্থক্যগুলি প্রদর্শন করে:
TCP/IP (বাম দিক) এর সাথে, ডেটা একাধিকবার অনুলিপি করা আবশ্যক:
- জিপিইউ মেমরি থেকে ইউজার স্পেসে অ্যাপ্লিকেশন বাফারে
- ইউজার স্পেস বাফার থেকে কার্নেল বাফারে
- কার্নেল বাফার থেকে নেটওয়ার্ক কার্ডে
- রিসিভিং সাইডে বিপরীত প্রক্রিয়া ঘটে
প্রতিটি অনুলিপি অপারেশন CPU সাইকেল এবং মেমরি ব্যান্ডউইথ খরচ করে। প্রতিটি নেটওয়ার্ক অপারেশনের জন্য অ্যাপ্লিকেশনটিকে অবশ্যই ইউজার স্পেস এবং কার্নেল স্পেসের মধ্যে কনটেক্সট সুইচ করতে হবে।
এর বিপরীতে, RDMA (ডান দিক) প্রকৃত জিরো-কপি ডেটা স্থানান্তর প্রদান করে:
- নেটওয়ার্ক কার্ড সরাসরি জিপিইউ মেমরি থেকে পড়ে
- ডেটা সরাসরি রিমোট নেটওয়ার্ক কার্ডে ভ্রমণ করে
- রিমোট নেটওয়ার্ক কার্ড সরাসরি গন্তব্য জিপিইউ মেমরিতে লেখে
- স্থানান্তর শেষ হলে কখন তা জানতে অ্যাপ্লিকেশনটিকে শুধুমাত্র ইউজার স্পেসে একটি কমপ্লিশন কিউ (CQ) পরীক্ষা করতে হয়
RDMA এবং সঠিক হার্ডওয়্যার পেয়ারিংয়ের মাধ্যমে, দুটি জিপিইউ-এর মধ্যে ডেটা স্থানান্তর করতে শুধুমাত্র স্থানীয় PCIe সুইচ এবং নেটওয়ার্ক অতিক্রম করতে হয়:
এর বিপরীতে, TCP/IP স্থানান্তরকে প্রধান মেমরির মাধ্যমে একাধিকবার ডেটা অনুলিপি করতে হয়, যার ফলে উল্লেখযোগ্য PCIe বাস কনজেশন ঘটে:
libfabric দিয়ে তৈরি করা
আমরা libfabric ব্যবহার করেছি - একটি ফ্রেমওয়ার্ক যা ফ্যাব্রিক পরিষেবাগুলির জন্য একটি সাধারণ ইন্টারফেস সরবরাহ করে। আমাদের বাস্তবায়নে দুই ধরণের RDMA অপারেশন ব্যবহার করা হয়েছে:
- মেমরি অঞ্চল সম্পর্কে মেটাডেটা বহনকারী কন্ট্রোল মেসেজের জন্য টু-সাইডেড RDMA (SEND/RECV) (যেমন, অফসেট এবং সাইজ)।
- প্রকৃত ডেটা স্থানান্তরের জন্য ওয়ান-সাইডেড RDMA WRITE, যেখানে প্রতিটি WRITE অপারেশন একটি সংলগ্ন মেমরি অংশ পরিচালনা করে।
পিক পারফরম্যান্সের যাত্রা
আমাদের উন্নয়ন বেশ কয়েকটি ধাপের মাধ্যমে অগ্রসর হয়েছে:
- SEND/RECV ব্যবহার করে বেসিক ইউনিডাইরেকশনাল মেসেজ ট্রান্সফার প্রয়োগ করা হয়েছে
- বাইডাইরেকশনাল যোগাযোগের ক্ষেত্রে প্রসারিত
- সরাসরি GPU-GPU স্থানান্তরের জন্য GPUDirect RDMA WRITE যোগ করা হয়েছে
- একাধিক সমকালীন (কনকারেন্ট) স্থানান্তর পরিচালনা করার জন্য প্রসারিত
- দৃঢ়তার জন্য অপারেশন কিউইং প্রবর্তন করা হয়েছে
- একটি একক নেটওয়ার্ক কার্ডে 97.4% ব্যান্ডউইথ ব্যবহার অর্জিত হয়েছে
32টি নেটওয়ার্ক কার্ডে স্কেল করার সময়, আমরা বেশ কয়েকটি গুরুত্বপূর্ণ অপ্টিমাইজেশন বাস্তবায়ন করেছি:
- অপারেশন কিউইং: নেটওয়ার্ক কার্ডগুলিতে সরাসরি অপারেশন জমা দেওয়ার পরিবর্তে, আমরা একটি অ্যাপ্লিকেশন-স্তরের কিউ বজায় রাখি। এটি নেটওয়ার্ক কনজেশনের বিরুদ্ধে দৃঢ়তা প্রদান করে এবং প্রোগ্রামিং মডেলকে সহজ করে।
- নেটওয়ার্ক ওয়ার্মআপ: প্রি-এস্টাবলিশিং কানেকশন স্টার্টআপ পারফরম্যান্স উন্নত করেছে।
- মাল্টি-থ্রেডিং: প্রতিটি জিপিইউ-এর নেটওয়ার্ক অপারেশনের জন্য ডেডিকেটেড থ্রেড।
- CPU কোর পিনিং: NUMA প্রভাব এবং ক্যাশ মিস এড়াতে নির্দিষ্ট CPU কোরে থ্রেড বাইন্ড করা।
- স্টেট শার্ডিং: থ্রেডগুলির মধ্যে দ্বন্দ্ব কমানো।
- অপারেশন ব্যাচিং: একসাথে একাধিক অপারেশন জমা দেওয়া।
- লেজি অপারেশন পোস্টিং: অপারেশনগুলি প্রথমে অ্যাপ্লিকেশনে কিউ করা হয়। কমপ্লিশন কিউ পোল করার পরে, আমরা নেটওয়ার্ক সম্পদের দক্ষ ব্যবহার নিশ্চিত করে, নেটওয়ার্ক কার্ডে পেন্ডিং অপারেশন জমা দেওয়ার চেষ্টা করি।
- NUMA-সচেতন রিসোর্স অ্যালোকেশন: মেমরি অ্যাক্সেস লেটেন্সি কমাতে সঠিক NUMA নোডে কমপ্লিশন কিউয়ের মতো libfabric রিসোর্স বরাদ্দ করুন।
এই অপ্টিমাইজেশনের মাধ্যমে, আমরা 3,108 Gbps এর চূড়ান্ত পারফরম্যান্স অর্জন করেছি - যা তাত্ত্বিক সর্বোচ্চ ব্যান্ডউইথের 97.1%।
নীচের ভিডিওটি আমাদের কমান্ড-লাইন প্রোগ্রামটিকে কার্যরত অবস্থায় দেখায়। এটি রিমোট নোডে জিপিইউ মেমরি জিপিইউ-এর অ-সংলগ্ন অংশগুলি স্থানান্তর করে, 3108.283 Gbps এর একটি ট্রান্সমিশন গতি অর্জন করে - যা নেটওয়ার্ক অবকাঠামোর প্রায়-তাত্ত্বিক ব্যান্ডউইথ ব্যবহার প্রদর্শন করে:
উপসংহার
একটি উচ্চ-কার্যক্ষমতা সম্পন্ন নেটওয়ার্কিং সিস্টেম তৈরির জন্য হার্ডওয়্যার আর্কিটেকচার এবং সিস্টেম ডিজাইন নীতি উভয়ই বোঝার প্রয়োজন হয়। যদিও NCCL-এর মতো লাইব্রেরিগুলি সাধারণ প্যাটার্নগুলির জন্য চমৎকার সমাধান প্রদান করে, তবুও নির্দিষ্ট প্রয়োজনীয়তার জন্য কখনও কখনও কাস্টম সমাধানের প্রয়োজন হয়।
আমাদের যাত্রা দেখায় যে সিস্টেম আর্কিটেকচার, হার্ডওয়্যার টপোলজি এবং বিভিন্ন অপ্টিমাইজেশন কৌশলের প্রতি সতর্ক মনোযোগের মাধ্যমে প্রায়-তাত্ত্বিক নেটওয়ার্ক পারফরম্যান্স অর্জন করা সম্ভব। মূল বিষয় হলো শুধুমাত্র পৃথক উপাদানগুলি বোঝা নয়, বরং তারা কীভাবে একটি সম্পূর্ণ সিস্টেম তৈরি করতে একে অপরের সাথে যোগাযোগ করে তা বোঝা।
বাস্তবায়নের বিশদ বিবরণ এবং কোড উদাহরণ সহ এই যাত্রার সম্পূর্ণ প্রযুক্তিগত ডিপ-ডাইভ আমাদের ওপেন সোর্স রিপোজিটরিতে উপলব্ধ রয়েছে।
উদ্ধৃতি
@online{perplexity2025HighPerformanceGpuMemoryTransferOnAwsSagemakerHyperpod,
author = {{Perplexity} and Lequn Chen and Phi Hoang},
title = {{High-performance GPU memory transfer on AWS Sagemaker Hyperpod}},
date = {2025-02-10},
url = {https://www.perplexity.ai/hub/blog/high-performance-gpu-memory-transfer-on-aws-sagemaker-hyperpod}
}