ডকার ও কাস্টম ইমেজ সহ ক্লাউড জিপিইউ প্রদানকারীগণ
ডকার সমর্থন আপনাকে প্রি-ইনস্টল করা ফ্রেমওয়ার্ক, CUDA সংস্করণ এবং নির্ভরশীলতাসহ আপনার নিজস্ব পরিবেশ নিয়ে আসার সুযোগ দেয়, যা উন্নয়ন এবং উৎপাদনের মধ্যে পুনরুত্পাদনযোগ্যতা নিশ্চিত করে। কাস্টম ডকার ইমেজ পরিবেশ সেটআপের সময় কমিয়ে দেয় এবং এমএল ওয়ার্কফ্লোর জন্য CI/CD ইন্টিগ্রেশন সক্ষম করে। এই গাইডটি ক্লাউড জিপিইউ প্রদানকারীদের তালিকা দেয় যারা ডকার কন্টেইনার এবং কাস্টম ইমেজ ডিপ্লয়মেন্ট সমর্থন করে।
এই গাইডের জন্য এখনও কোনো মিল থাকা GPU প্রদানকারী পাওয়া যায়নি। শীঘ্রই আবার দেখুন।
যখন আপনি একটি GPU ভাড়া নেন তখন “ডকার সাপোর্ট” আসলে কী বোঝায়
যখন একটি ক্লাউড GPU প্রদানকারী ডকার সাপোর্ট বিজ্ঞাপন দেয়, এর মানে আপনি আপনার ওয়ার্কলোডটি একটি কন্টেইনার ইমেজের ভিতরে চালাতে পারেন, হোস্ট যেই অপারেটিং সিস্টেম, ড্রাইভার স্ট্যাক এবং লাইব্রেরি সরবরাহ করুক না কেন তার উপর নির্ভর না করে। বাস্তবে, এটি একটি GPU ইনস্ট্যান্সকে পুনরুত্পাদনযোগ্য করে তোলে: নতুন একটি বক্সে SSH করে CUDA, cuDNN, PyTorch এবং একটি ডজন পাইথন প্যাকেজ হাতে ইনস্টল করার পরিবর্তে, আপনি ইনস্ট্যান্সটিকে এমন একটি ইমেজের দিকে নির্দেশ করেন যা ইতিমধ্যে আপনার প্রয়োজনীয় সঠিক সংস্করণগুলি ধারণ করে, এবং এটি প্রতিবার একটি পরিচিত-ভাল পরিবেশে বুট হয়।
GPU-র জন্য একটি গুরুত্বপূর্ণ সূক্ষ্ম পার্থক্য রয়েছে। একটি কন্টেইনার GPU নিজেই ভার্চুয়ালাইজ করে না — হোস্ট এখনও NVIDIA ড্রাইভারটির মালিক এবং NVIDIA কন্টেইনার টুলকিটের মাধ্যমে হার্ডওয়্যারটি কন্টেইনারের কাছে প্রকাশ করে। এর মানে ইমেজটি CUDA রানটাইম, cuDNN এবং আপনার ফ্রেমওয়ার্কগুলি বহন করে, যখন হোস্ট কর্ণেল ড্রাইভার বহন করে। এই দুটি কেবল সামঞ্জস্যপূর্ণ হতে হবে, অভিন্ন নয়, কারণ CUDA একটি নির্দিষ্ট পরিসরের মধ্যে ফরোয়ার্ড সামঞ্জস্য প্রদান করে। এজন্য একটি ভালভাবে তৈরি ইমেজ উপরের তালিকার বিভিন্ন হোস্টে অপরিবর্তিতভাবে চলতে পারে, এমনকি যখন সেই হোস্টগুলি ভিন্ন সময়ে সামান্য ভিন্ন ড্রাইভার সংস্করণ দিয়ে প্রোভিশন করা হয়।
উপরের তুলনায় প্রদানকারীরা এই ক্ষমতাটি কয়েকটি পৃথক উপায়ে প্রকাশ করে, এবং পার্থক্যটি গুরুত্বপূর্ণ:
- নিজের ইমেজ নিয়ে আসুন: আপনি একটি রেজিস্ট্রি URL (একটি পাবলিক বা প্রাইভেট ইমেজ) সরবরাহ করেন এবং প্ল্যাটফর্ম এটি টেনে এনে ইনস্ট্যান্সের রুট পরিবেশ হিসেবে চালু করে।
- বেস ইমেজের ভিতরে চালান: আপনি একটি SSH বা Jupyter সেশন পান যা ইতিমধ্যে একটি বিক্রেতা-রক্ষণাবেক্ষিত CUDA কন্টেইনারের ভিতরে থাকে, এবং আপনি আপনার কোড তার উপরে লেয়ার করেন।
- পূর্ণ রুট ডকার ডেমন: আপনি ইনস্ট্যান্সে প্রকৃত docker (অথবা একটি রুটলেস সমতুল্য) অ্যাক্সেস পান যাতে আপনি নিজে থেকে একাধিক কন্টেইনার তৈরি, টেনে এবং চালাতে পারেন।
কেন কন্টেইনারগুলি প্রকৃত GPU ওয়ার্কলোডের জন্য গুরুত্বপূর্ণ
পুনরুত্পাদনযোগ্যতা প্রধান সুবিধা, তবে ডকার সাপোর্ট ভাড়া নেওয়া হার্ডওয়্যারের দৈনন্দিন অর্থনীতিতে কয়েকটি স্পষ্ট উপায়ে পরিবর্তন আনে।
- দ্রুত, পূর্বানুমানযোগ্য স্টার্টআপ: স্পট বা ইন্টারাপ্টেবল ক্যাপাসিটিতে একটি ইনস্ট্যান্স অদৃশ্য হয়ে যেতে পারে এবং আপনি অন্যত্র পুনরায় চালু করেন। একটি প্রি-বিল্ট ইমেজ আপনাকে সম্পূর্ণ পরিবেশ পুনরায় বুটস্ট্র্যাপ করার পরিবর্তে কয়েক মিনিটের মধ্যে একটি কাজ করা ট্রেইনারে ফিরিয়ে আনে, যা সরাসরি অপচয় হওয়া বিলযোগ্য সময় কমায়।
- সংস্করণ পিনিং: AI স্ট্যাকগুলি CUDA, ফ্রেমওয়ার্ক এবং কাস্টম কার্নেল যেমন FlashAttention বা bitsandbytes এর মধ্যে মিল না থাকার প্রতি অত্যন্ত সংবেদনশীল। সঠিক সংস্করণগুলি ইমেজে অন্তর্ভুক্ত করা “আমার মেশিনে কাজ করে” ব্যর্থতাগুলি দূর করে যখন আপনি হোস্ট পরিবর্তন করেন।
- প্রদানকারীদের মধ্যে বহনযোগ্যতা: একই ইমেজ উপরের তালিকার যেকোনো হোস্টে চলে যা সেদিন সস্তা বা আসলেই স্টক আছে, তাই আপনি এক বিক্রেতার পূর্ব-ইনস্টল করা সফটওয়্যারে আটকে থাকেন না।
- বিচ্ছিন্নতা: শেয়ার করা বেস OS-এ সংঘর্ষকারী নির্ভরশীলতাগুলি আলাদা ইমেজে পরিষ্কারভাবে সহঅবস্থান করে, যা তখন উপকারী যখন একটি নোড একাধিক মডেল বা পরীক্ষার সেবা দেয়।
যে ওয়ার্কফ্লোগুলি সবচেয়ে বেশি উপকৃত হয় তা হল পুনরাবৃত্তিমূলক প্রশিক্ষণ এবং ফাইন-টিউনিং রান, CI পাইপলাইন যা বাস্তব GPU-তে মডেল কোড পরীক্ষা করে, এবং আপনি যে ইনফারেন্স সার্ভিস চালাতে চান — কারণ আপনি যে কন্টেইনারটি পরীক্ষা করেছেন সেটি বাইট-ফর-বাইটই আপনি স্থাপন করছেন। একটি এককালীন ইন্টারঅ্যাকটিভ পরীক্ষা-নোটবুকে সুবিধাটি ছোট, কারণ একটি বিক্রেতা বেস ইমেজ ইতিমধ্যে সাধারণ ক্ষেত্রে কভার করে।
মনে রাখার জন্য ট্রেড-অফসমূহ
কন্টেইনারগুলি ভাড়া নেওয়া GPU-তে friction মুক্ত নয়। বড় ইমেজ — বহু গিগাবাইট CUDA বেস সহ মডেল ওজন — প্রথম চালুর সময় টানতে সময় লাগে, এবং আপনি ডাউনলোড চলাকালীন ইনস্ট্যান্সের জন্য অর্থ প্রদান করেন। ক্যাশিং লেয়ার, পূর্ণ ডেভেল ইমেজের পরিবর্তে স্লিমার রানটাইম বেস ব্যবহার এবং ইমেজের ভিতরে না রেখে একটি মাউন্ট করা ভলিউমে ওজন সংরক্ষণ সবই সাহায্য করে। এছাড়াও একটি বাস্তব ব্যর্থতা মোড রয়েছে যেখানে একটি নতুন CUDA টুলকিটের বিরুদ্ধে তৈরি ইমেজ পুরানো ড্রাইভার সহ হোস্টে চালাতে অস্বীকার করে; দীর্ঘ রান কমিট করার আগে ড্রাইভার/CUDA জোড়া পরীক্ষা করলে এক ঘণ্টা পরে আকস্মিক ক্র্যাশ এড়ানো যায়।
আপনি ভাড়া নেওয়ার আগে এই দিকটি কী পরীক্ষা করবেন
দুটি ইনস্ট্যান্সই ডকার সাপোর্ট দাবি করতে পারে এবং তবুও খুব ভিন্নভাবে আচরণ করতে পারে। উপরের তুলনা পড়ার সময়, সাধারণ হ্যাঁ-এর বাইরে দেখুন এবং নির্দিষ্ট বিষয়গুলি যাচাই করুন:
- কাস্টম ইমেজ বনাম শুধুমাত্র বেস-ইমেজ: আপনি কি নিজের রেজিস্ট্রি থেকে যেকোনো ইমেজ পুশ করতে পারেন, নাকি আপনি শুধুমাত্র প্রদানকারীর নির্বাচিত বেসগুলিতে সীমাবদ্ধ? কাস্টম-ইমেজ সাপোর্ট বেশি নমনীয় এবং বহনযোগ্য বিকল্প।
- রুট বনাম রুটলেস ডকার: আপনি কি প্রকৃত docker ডেমন পান কন্টেইনার তৈরি ও চালানোর জন্য, নাকি শুধুমাত্র একটি কন্টেইনারাইজড পরিবেশ? বক্সে ইমেজ তৈরি করতে হলে প্রথমটি প্রয়োজন।
- প্রাইভেট রেজিস্ট্রি অথেনটিকেশন: আপনি কি প্রাইভেট রেজিস্ট্রি থেকে ক্রেডেনশিয়াল সহ টানতে পারেন, যা মালিকানা কোড এবং ওজনের জন্য গুরুত্বপূর্ণ?
- GPU পাসথ্রু ফ্ল্যাগ: নিশ্চিত করুন প্ল্যাটফর্ম NVIDIA কন্টেইনার টুলকিট সংযুক্ত করে যাতে কন্টেইনার GPU দেখতে পারে; এটি না হলে, কন্টেইনারের ভিতরে nvidia-smi ব্যর্থ হয়।
- হোস্টের ড্রাইভার এবং CUDA সংস্করণ: ইনস্টল করা ড্রাইভার পরীক্ষা করুন যাতে আপনি একটি সামঞ্জস্যপূর্ণ CUDA বেস লক্ষ্য করতে পারেন এবং সংস্করণ মিল না হওয়ার ব্যর্থতা এড়াতে পারেন।
- স্থায়ী ভলিউম: যাচাই করুন আপনি ডেটাসেট, চেকপয়েন্ট এবং ইমেজ ক্যাশের জন্য স্টোরেজ মাউন্ট করতে পারেন যা রিস্টার্টের পরেও টিকে থাকে, যাতে প্রতিটি বিঘ্নের পরে সবকিছু পুনরায় টানতে না হয়।
- মাল্টি-কন্টেইনার এবং কম্পোজ: আপনার ওয়ার্কলোডে যদি একটি মডেল সার্ভার প্লাস একটি ডাটাবেস বা ভেক্টর স্টোর প্রয়োজন হয়, নিশ্চিত করুন আপনি একাধিক কন্টেইনার চালাতে পারেন, শুধুমাত্র একটি নয়।
ভালভাবে ব্যবহৃত হলে, ডকার সাপোর্ট একটি ভাড়া নেওয়া GPU-কে একটি হাতে-কনফিগার করা পোষা প্রাণী থেকে একটি ব্যবহারযোগ্য, পুনরুত্পাদনযোগ্য রানটাইমে পরিণত করে — যা ঠিকই আপনি চান যখন ক্ষমতা ইন্টারাপ্টেবল এবং আপনি সেকেন্ড ভিত্তিতে অর্থ প্রদান করছেন।
প্রায়শই জিজ্ঞাসিত প্রশ্ন
ডকার সাপোর্ট মানে আমি কি ডকার ডেমনের পূর্ণ রুট অ্যাক্সেস পাচ্ছি?
সবসময় নয়। কিছু প্ল্যাটফর্ম কেবল আপনার সেশনকে একটি প্রি-কনফিগার্ড CUDA কন্টেইনারের ভিতরে চালায়, অন্যরা আপনাকে প্রকৃত রুট অ্যাক্সেস দেয় docker ডেমনটিতে যাতে আপনি নিজে থেকে কন্টেইনার তৈরি ও চালাতে পারেন। যদি আপনাকে বক্সে ইমেজ তৈরি করতে হয় বা একাধিক কন্টেইনার চালাতে হয়, নিশ্চিত করুন তালিকাটি কেবল একটি কন্টেইনারাইজড বেস পরিবেশ নয়, পূর্ণ ডেমন অ্যাক্সেস অফার করে।
আমার কি GPU ড্রাইভার আমার ডকার ইমেজের ভিতরে রাখতে হবে?
না। হোস্ট কর্নেল-স্তরের NVIDIA ড্রাইভারটির মালিক, এবং NVIDIA কন্টেইনার টুলকিটের মাধ্যমে GPU কন্টেইনারের কাছে প্রকাশ পায়। আপনার ইমেজে CUDA রানটাইম, cuDNN এবং আপনার ফ্রেমওয়ার্ক থাকা উচিত, কিন্তু ড্রাইভার নয়। আপনার ইমেজের CUDA সংস্করণ হোস্টের ড্রাইভারের সাথে সামঞ্জস্যপূর্ণ হতে হবে, এজন্য দীর্ঘ রান করার আগে হোস্ট ড্রাইভার সংস্করণ পরীক্ষা করা মূল্যবান।
আমার কাস্টম ইমেজ কি নতুন GPU ইনস্ট্যান্সে তৎক্ষণাৎ শুরু হবে?
প্রথম চালু করার সময় ইমেজ টানতে হয়, এবং বহু গিগাবাইট CUDA ইমেজ ডাউনলোড করতে সময় লাগে — যার জন্য আপনাকে বিল করা হয়। তারপর ক্যাশ করা লেয়ারগুলি পরবর্তী স্টার্টকে অনেক দ্রুত করে তোলে। ইমেজগুলি লীন রাখা, পূর্ণ ডেভেল বেসের পরিবর্তে রানটাইম বেস ব্যবহার এবং বড় মডেল ওজন স্থায়ী স্টোরেজ থেকে মাউন্ট করা ইমেজে বেক করার পরিবর্তে সবই স্টার্টআপ সংক্ষিপ্ত করে।
আমি কি একই ইমেজ উপরের বিভিন্ন প্রদানকারীর মধ্যে চালাতে পারি?
সাধারণত হ্যাঁ, এবং এই বহনযোগ্যতা কন্টেইনারাইজ করার একটি প্রধান কারণ। একটি সঠিকভাবে তৈরি ইমেজ অপরিবর্তিতভাবে চলে যেখানে সামঞ্জস্যপূর্ণ ড্রাইভার থাকে, তাই আপনি পরিবেশ পুনর্নির্মাণ না করেই সস্তা উপলব্ধ ক্যাপাসিটির পিছনে যেতে পারেন। প্রধান সতর্কতা হল CUDA-টু-ড্রাইভার সামঞ্জস্য, তাই প্রতিটি হোস্টের ড্রাইভার আপনার ইমেজের CUDA সংস্করণ সমর্থন করে কিনা যাচাই করুন।