জেফ ডীনের কর্মজীবন ও সেই সিস্টেমগুলির ব্যবহারিক বিশ্লেষণ—MapReduce, Bigtable, ও সমকালীন এমএল ইনফ্রাস্ট্রাকচার থেকে শেখার পাঠ।

জেফ ডীন গুরুত্বপূর্ণ এক সহজ কারণে: অনেক "ব্রেকথ্রু" আইডিয়া তখনই কাজের যখন সেগুলো বিশাল ডেটায় নিয়মিত, বারবার এবং সাশ্রয়ীভাবে চলতে পারে। তার সবচেয়ে প্রভাবশালী কাজগুলো প্রায়ই একটি প্রতিশ্রুতিবাদী ধারণা এবং এমন একটি সিস্টেমের মাঝে থাকে যা মিলিয়ন-সংখ্যক ব্যবহারকারীর জন্য নির্ভরযোগ্যভাবে কাজ করে।
যখন টিমগুলো বলে তারা "এআই স্কেল করতে চায়," তারা সাধারণত একসঙ্গে কয়েকটি সীমাবদ্ধতার মধ্যে ভারসাম্য রাখছে:
বড় আকারে এআই একটি একক মডেল নিয়েই নয়; এটি একটি অ্যাসেম্বলি লাইন—পাইপলাইন, স্টোরেজ, বিতরণকৃত এক্সিকিউশন, মনিটরিং, এবং পরিষ্কার ইন্টারফেস যা অনেক টিমকে একসাথে কাজ করতে দেয়।
এটি কোনো সেলিব্রিটি প্রোফাইল বা এক ব্যক্তিই গুগলের এআই "আবিষ্কার করেছেন"—এর দাবি নয়। গুগলের সাফল্য এসেছে বড় দলগুলোর কাজ থেকে, এবং অনেক প্রকল্পসহ-লেখক ও সহ-নির্মিত।
এই পোস্টটি তার পরিবর্তে ইঞ্জিনিয়ারিং প্যাটার্নগুলোর দিকে মন দেয়—যেগুলো MapReduce, Bigtable এবং পরে ML ইনফ্রা কাজগুলোতে বারবার দেখেছে। লক্ষ্য হলো বাস্তব পৃথিবীতে প্রয়োগযোগ্য ধারণা তোলা: ফেলিউরের জন্য ডিজাইন কিভাবে করা যায়, ওয়ার্কফ্লো কিভাবে স্ট্যান্ডার্ড করা যায়, এবং কিভাবে এক্সপেরিমেন্টকে নায়কাভিত্তিক কাজ নয় বরং নিয়মিত প্রক্রিয়া করা যায়।
যদি আপনি এমন মেশিন লার্নিং শিপ করতে চান যা বাস্তব ট্রাফিক ও সীমাবদ্ধতার মধ্যে টিকে থাকে, তবে সিস্টেম ভিউ-ই কথাটির মূল—এবং জেফ ডীনের ক্যারিয়ার অনুসরণ করার মতো একটি কার্যকর সূত্র।
জেফ ডীন গুগলে যোগ দিলেন যখন গুগল এখনও ওপেন ইন্টারনেটে "প্রোডাকশন" কীভাবে হওয়া উচিত তা সংজ্ঞায়িত করছিল: কয়েকটি সার্ভিস, দ্রুত বাড়তে থাকা ইউজার বেস, এবং প্রত্যাশা যে সার্চ ফলাফল প্রতিবারই দ্রুত দেখাতে হবে।
সার্চ-দৌরের গুগল এমন সীমাবদ্ধতার মুখোমুখি হয়েছিল যা যেকোনো স্কেলিং টিমকে পরিচিত লাগবে:
এটি একটি বাস্তবমুখী মানসিকতা পোষণ করতে বাধ্য করেছিল: ফেলিউর ধরেই নাও, রিকভির জন্য ডিজাইন করো, এবং পারফরম্যান্স সিস্টেম স্তরে কাজ করো—কোনো এক সার্ভার ম্যানুয়াল টিউনিং করে নয়।
কারণ সার্চ প্রতিটি কোয়েরিতে অনেক মেশিনকে স্পর্শ করে, ছোট অকার্যকরতাগুলো দ্রুত গুণিত হয়। সেই চাপ এমন প্যাটার্নকে অনুকরন করেছিল যা:
গুগল পরে বড়-স্কেলের ডেটা প্রসেসিং ও মেশিন লার্নিং-এ প্রসারিত হলেও, সেই অগ্রাধিকারগুলি অটল রয়ে গিয়েছিল: পূর্বানুমেয় পারফরম্যান্স, অপারেশনাল সেফটি, এবং আংশিক আউটেজ সহ্য করতে সক্ষম ডিজাইন।
জেফ ডীনের প্রভাবের সাথে জড়িত একটি পুনরাবৃত্ত থিম হলো লিভারেজ। প্রতিটি নতুন স্কেলিং চ্যালেঞ্জ আলাদা করে সমাধান করার বদলে, গুগল অভ্যন্তরীণ বিল্ডিং ব্লক—শেয়ারড সিস্টেমে বিনিয়োগ করেছিল যা অনেক টিমকে কম বিশেষজ্ঞে দ্রুত শিপ করতে দেয়।
প্ল্যাটফর্ম-মনোভাবটি তখনই অত্যন্ত গুরুত্বপূর্ণ হয়ে ওঠে যখন আপনার কাছে ডজন (তারপর শত) টিম থাকে। এটি কেবল একটি সিস্টেমকে দ্রুত করা নয়; এটি পুরো সংগঠনকে দ্রুত সিস্টেম তৈরি করতে শেখানো যাতে লোকেরা প্রতি বার বেসিকগুলো পুনরায় আবিষ্কার না করে।
যখন একটি ওয়ার্কলোড একক মেশিন ছাড়িয়ে যায়, প্রথম বটলনেক সাধারণত "আরও CPU" নয়। এটি বড় হয়ে ওঠা সেই ফাঁক যা আপনি ক্যালকুলেট করতে চান এবং যা আপনার সিস্টেম নিরাপদভাবে সমন্বয় করতে পারে তার মধ্যে। ট্রেনিং ও সার্ভিং এমএল সিস্টেম সবকিছুকে একসঙ্গে স্ট্রেস করে: কম্পিউট (GPU/TPU টাইম), ডেটা (থ্রুপুট ও স্টোরেজ), এবং রিলায়েবিলিটি (কী ঘটে যখন কিছু ফেল করে)।
একটি সার্ভার ফেল করা একধরনের অসুবিধা। একটি ফ্লিটে এটা স্বাভাবিক। যখন কাজ শত বা হাজার মেশিনে ছড়ায়, আপনি পূর্বানুমেয় ব্যথাগুলো দেখতে শুরু করবেন: স্ট্রাগলারস (এক ধীর কর্মী সবাইকে আটকে দেয়), নেটওয়ার্ক কনটেনশন, অনিয়মিত ডেটা রিড, এবং ক্যাসকেডিং রিট্রাই যা মূল সমস্যাটাকে বাড়িয়ে দেয়।
শার্ডিং ডেটা ও কাজকে ছোট অংশে ভাগ করে যাতে কোনো এক মেশিন গলদঘর্ম না হয়।
রেপ্লিকেশন একাধিক কপি রাখে যাতে ফেলিউর ডাউনটাইম বা ডেটা লসে পরিণত না হয়।
ফল্ট-টলারেন্স আংশিক ফেলিউর ধরেই নেয় এবং রিকভির জন্য ডিজাইন করে: টাস্ক রিস্টার্ট, শার্ড পুনরায় নিয়োগ, ফলাফল ভেরিফাই করা।
ব্যাকপ্রেশার প্রযোজককে আস্তে করে দেয় যখন কনজিউমার ধরতে পারে না—কিউ, পাইপলাইন ও ট্রেনিং ইনপুটে এটা অত্যাবশ্যক।
স্কেলে, এমন একটি প্ল্যাটফর্ম যেটা অনেক টিম সঠিকভাবে ব্যবহার করতে পারে, একটি কাস্টম-উচ্চ-পারফরম্যান্স সিস্টেমের চেয়েও বেশি মূল্যবান যা কেবল তার লেখকরা চালাতে পারে। স্পষ্ট ডিফল্ট, ধারাবাহিক API, এবং পূর্বানুমেয় ফেলিউর মোড দুর্ঘটনাজনিত জটিলতা কমায়—বিশেষত যখন ব্যবহারকারীরা গবেষক যারা দ্রুত ইটারেট করতে চান।
সবকিছুই একসঙ্গে সর্বোচ্চ করা দুর্লভ। আগ্রাসী ক্যাশিং ও অ্যাসিঙ্ক প্রসেসিং পারফরম্যান্স বাড়ায় কিন্তু সঠিকতা জটিল করে; কঠোর কনসিস্টেন্সি সঠিকতা বাড়ায় কিন্তু থ্রুপুট কমাতে পারে। অপারেবিলিটি—ডিবাগিং, মেট্রিক্স, নিরাপদ রোলআউট—ঘটুক এক সিস্টেম বাঁচে কি না তা প্রায়ই নির্ধারণ করে।
এই টানাপোড়েনটি সেই ইনফ্রাস্ট্রাকচারকে রূপ দেয় যা জেফ ডীনকে জনপ্রিয় করেছে: সিস্টেমগুলো কেবল কম্পিউট নয়, বরং রিলায়েবিলিটি ও মানুষের ব্যবহারযোগ্যতাকে একই সময়ে স্কেল করার জন্য নির্মিত।
MapReduce একটি সহজ ধারণা যার প্রভাব বড়: একটি বড় ডেটা জবকে অনেক ছোট টাস্কে ("map") ভাগ করা, ক্লাস্টারে সমান্তরালভাবে চালানো, তারপর আংশিক ফলাফলগুলি একত্রিত করা ("reduce"). আপনি যদি কখনও মিলিয়ন ডকুমেন্টে শব্দ গণনা করে থাকেন, লগকে ইউজার অনুসারে গ্রুপ করে থাকেন, বা সার্চ ইনডেক্স তৈরি করে থাকেন, তাহলে মানসিকভাবে আপনি MapReduce-র আদ্যোপান্ত বুঝে ফেলেছেন—কেবল না গুগলের স্কেলে।
MapReduce-এর আগে, ইন্টারনেট-স্কেলের ডেটাসেট প্রক্রিয়াকরণ মানে প্রায়ই কাস্টম বিতরণকৃত কোড লেখা। সেই কোড লেখা কঠিন, অপারেট করতে ভঙ্গুর, এবং সহজে ভুল হতো।
MapReduce একটি গুরুত্বপূর্ণ অনুমান নেয়: মেশিন ফেল করবে, ডিস্ক মারা যাবে, নেটওয়ার্ক হিচকিস করবে। ফেলিউরকে বিরল ব্যতিক্রম মনে করার পরিবর্তে সিস্টেম সেগুলোকে রুটিন হিসেবেই দেখে। টাস্কগুলো স্বয়ংক্রিয়ভাবে পুনরায় চালানো যায়, মধ্যবর্তী ফলাফল পুনর্নির্মাণ করা যায়, এবং মোট জবটি মানুষের প্রতিটি ক্র্যাশে পোহাতে বাধ্য নয়।
এ ফেলিউর-প্রথম মনোভাব পরে এমএল-এ গুরুত্বপূর্ণ হয়, কারণ বড় ট্রেনিং পাইপলাইনগুলোর একই উপাদান লাগে—বিশাল ডেটাসেট, বহু মেশিন, এবং দীর্ঘ-চলতি কাজ।
MapReduce কেবল গতি দেয়নি; এটি স্ট্যান্ডার্ডাইজ করেছে।
টিমগুলো ডেটা প্রসেসিংকে একটি পুনরাবৃত্ত জব হিসেবে প্রকাশ করতে পেরেছিল, শেয়ারড ইনফ্রাস্ট্রাকচারে চালাতে পারছিল, এবং ধারাবাহিক আচরণ আশা করত। প্রতিটি গ্রুপ ক্লাস্টার স্ক্রিপ্ট, মনিটরিং এবং রিট্রাই লজিক নিজে না বানিয়ে একটি সাধারণ প্ল্যাটফর্মে নির্ভর করে। এর ফলে এক্সপেরিমেন্ট দ্রুত হল (ভিন্ন ফিল্টার দিয়ে জব পুনরায় চালাও), ফলাফল পুনরুত্পাদনযোগ্য হয়ে উঠল, এবং "হিরো ইঞ্জিনিয়ার"-এর প্রয়োজন কমল।
এটি ডেটাকে একটি প্রোডাক্ট বানাতে সাহায্য করে: পাইপলাইনগুলো যখন নির্ভরযোগ্য হয়, তখন সেগুলো শিডিউল করা যায়, ভার্সন করা যায়, এবং আউটপুটগুলো আত্মবিশ্বাসের সাথে ডাউনস্ট্রীম সিস্টেমে হ্যান্ডঅফ করা যায়।
অনেক প্রতিষ্ঠান এখন Spark, Flink, Beam বা ক্লাউড-নেটিভ ETL টুল ব্যবহার করে। সেগুলো আরও নমনীয় (স্ট্রিমিং, ইন্টারঅ্যাকটিভ কুয়েরি), কিন্তু MapReduce-এর মূল পাঠ এখনও প্রযোজ্য: প্যারালেলিজম ডিফল্ট করো, রিট্রাই ডিজাইন করো, এবং টিমগুলোকে ক্লাস্টার টাকসিঠা নিয়ে না করে ডেটা কুয়ালিটি ও মডেলিং-এ সময় ব্যয় করার মতো শেয়ারড পাইপলাইন টুলিং-এ বিনিয়োগ করো।
মেশিন লার্নিং উন্নতি কেবল ভালো মডেলের ওপরই নির্ভর করে না—সঠিক ডেটা সঠিক জব-এ সঠিক স্কেলে কিভাবে পৌছায় তাও গুরুত্বপূর্ণ। গুগলে, ডীন যে সিস্টেম মাইন্ডসেটটা জোর দিয়েছেন তা স্টোরেজকে "ব্যাকএন্ড প্লম্বিং" থেকে এমএল ও অ্যানালিটিক্স কাহিনীর প্রথম-শ্রেণির অংশে উন্নীত করে। Bigtable সেই গুরুত্বপূর্ণ বিল্ডিং ব্লকগুলোর একজন হয়ে দাঁড়ায়: একটি স্টোরেজ সিস্টেম যা বিশাল থ্রুপুট, পূর্বানুমেয় ল্যাটেন্সি, এবং অপারেশনাল কন্ট্রোলের জন্য ডিজাইন করা।
Bigtable হলো ওয়াইড-কোলাম স্টোর: সারি ও স্থির কলামের ধারনায় চিন্তা না করে, আপনি sparse, বিবর্তিত ডেটা রাখতে পারেন যেখানে ভিন্ন সারিগুলো ভিন্ন "আকৃতি" রাখবে। ডেটা টেবলটস-এ বিভক্ত হয় (রো-রেঞ্জ), যা লোড ব্যালান্স করতে সার্ভার জুড়ে সরানো যায়।
এই স্ট্রাকচার সাধারণ বড়-স্কেল অ্যাক্সেস প্যাটার্নের উপযোগী:
স্টোরেজ ডিজাইন নীরবে প্রভাব ফেলে টিমগুলো কী ফিচার জেনারেট করে এবং কতটা নির্ভরযোগ্যভাবে তারা ট্রেন করতে পারে।
আপনার স্টোর যদি কার্যকর রেঞ্জ স্ক্যান ও ভার্সনড ডেটা সমর্থন করে, আপনি নির্দিষ্ট সময় উইন্ডো পুনর্গঠিত করে পরিক্ষা পুনরুত্পাদন করতে পারবেন। রিড ধীর বা অনিয়মিত হলে ফিচার জেনারেশন ভঙ্গুর হয়ে ওঠে এবং টিমগুলো ওয়ার্কঅরাউন্ড শুরু করে—যা ডেটাসেটকে পক্ষপাতী করে এবং ডিবাগ করা কঠিন করে তোলে।
Bigtable-শৈলীর অ্যাক্সেসও একটি বাস্তবধর্মী দৃষ্টিভঙ্গি উৎসাহ দেয়: একবার রা সিগন্যাল লেখা, তারপর বিভিন্ন ফিচার ভিউ নিরপেক্ষভাবে উৎপন্ন করা যায়, সম্পূর্ণভাবে প্রতিলিপি করে ডুপ্লিকেট করার দরকার পড়ে না।
স্কেলে, স্টোরেজ ফেলিউরগুলো বড় আউটেজের মতো দেখায় না—এগুলো ছোট, ক্রমাগত ঘর্ষণ হিসেবে দেখা যায়। Bigtable-এর ক্লাসিক পাঠগুলো সরাসরি এমএল ইনফ্রার কথোপকথনে প্রয়োগ্য:
যখন ডেটা অ্যাক্সেস পূর্বানুমেয় হয়, ট্রেনিং পূর্বানুমেয় হয়—এবং সেটাই এমএল-কে গবেষণা থেকে নির্ভরযোগ্য প্রোডাকশন ক্যাপেবিলিটিতে পরিণত করে।
একটি মডেল এক মেশিনে ট্রেন করা মূলত প্রশ্ন "এই বক্স কত দ্রুত গণনা করতে পারে?"। অনেক মেশিনে ট্রেনিং করা কঠিন—কীভাবে দশ থেকে হাজার কর্মীকে একটি coherent ট্রেনিং রান হিসেবে রাখা যায়? এ কারণেই বিতরণকৃত ট্রেনিং প্রায়ই বিতরণকৃত ডেটা প্রসেসিংয়ের চেয়ে কঠিন।
MapReduce-এর মতো সিস্টেমগুলোতে টাস্কগুলো পুনরায় চালানো যায় কারণ আউটপুট নির্ধারিত: একই ইনপুট পুনরায় চালালে একই ফলাফল মেলে। নিউরাল নেটওয়ার্ক ট্রেনিং ইটারেটিভ ও স্টেটফুল। প্রত্যেক স্টেপ শেয়ার্ড প্যারামিটার আপডেট করে, এবং ছোট টাইমিং তফাৎও শেখার পথকে বদলে দিতে পারে। আপনি কেবল কাজ ভাগ করছেন না—আপনি একটি চলমান লক্ষ্যকে সমন্বয় করছেন।
স্কেল বাড়লে কয়েকটি সমস্যা তাড়াতাড়ি দেখা দেয়:
গুগলের ভেতরে, জেফ ডীনের সংশ্লিষ্ট কাজ DistBelief-এর মতো সিস্টেমগুলোকে একটি উত্তেজনাপূর্ণ গবেষণা আইডিয়ার থেকে এমন কিছুতে ঠেলে দিয়েছিল যা ধারাবাহিকভাবে ফ্লিটে চালানো যায়, পূর্বানুমেয় ফল দেয়। মূল পরিবর্তন ছিল ট্রেনিংকে একটি প্রোডাকশন ওয়ার্কলোড হিসেবে দেখা: স্পষ্ট ফল্ট টলারেন্স, পরিষ্কার পারফরম্যান্স মেট্রিক, এবং জব শিডিউলিং ও মনিটরিংয়ের চারপাশে স্বয়ংক্রিয়করণ।
অনেক প্রতিষ্ঠানে সঠিক আর্কিটেকচার নয়, বরং শৃঙ্খলটাই স্থানান্তরযোগ্য:
Google Brain যখন মেশিন লার্নিংকে কয়েকটি গবেষণা প্রকল্প থেকে বহু পণ্য-টিমের প্রত্যাশায় রূপান্তরিত করেছিল, তখন বটলনেক শুধুই ভাল মডেল ছিল না—এটি সমন্বয় ছিল। একটি শেয়ারড এমএল প্ল্যাটফর্ম ঘর্ষণ কমায়, কারণ এটি একক "হিরো ওয়ার্কফ্লো"-গুলোকে এমন একটি রাস্তায় পরিণত করে যা শত শত ইঞ্জিনিয়ার নিরাপদে ব্যবহার করতে পারে।
কমন টুলিং না থাকলে প্রতিটি টিম একই বেসিকগুলো (ডেটা এক্সট্র্যাকশন, ট্রেনিং স্ক্রিপ্ট, ইভাল কোড, ডেপ্লয়মেন্ট গ্লু) পুনরায় তৈরি করে। সেই ডুপ্লিকেশন অসামঞ্জস্যপূর্ণ গুণমান সৃষ্টি করে এবং টিমগুলোর মধ্যে ফলাফল তুলনা করা কঠিন করে। একটি কেন্দ্রীয় প্ল্যাটফর্ম বিরক্তিকর অংশগুলো স্ট্যান্ডার্ড করে টিমগুলোকে তাদের প্রকৃত সমস্যার উপর সময় দিতে দেয়—বিতরণকৃত ট্রেনিং, ডেটা ভ্যালিডেশন, বা প্রোডাকশন রোলআউট পুনরায় শিখতে নয়।
একটি ব্যবহারিক শেয়ারড এমএল প্ল্যাটফর্ম সাধারণত কভার করে:
প্ল্যাটফর্ম কাজ এক্সপেরিমেন্টকে পুনরুত্পাদনযোগ্য করে: কনফিগারেশন-চালিত রান, ভার্সনড ডেটা ও কোড, এবং এক্সপেরিমেন্ট ট্র্যাকিং যা কি বদলেছে ও কেন কোনো মডেল উন্নত বা ব্যর্থ হলো তা রেকর্ড করে। এটা নতুন আর্কিটেকচার আবিষ্কারের চেয়ে কম গ্ল্যামারস কিন্তু তা নিশ্চিত করে "গত সপ্তাহের জয় পুনরুত্পাদন করা যাচ্ছে না" সাধারণ না হয়।
ভাল ইনফ্রাসট্রাকচার নিজে স্মার্ট মডেল তৈরি করে না—কিন্তু তা ফ্লোর বাড়ায়। পরিষ্কার ডেটা, মানানসই ফিচার, বিশ্বাসযোগ্য ইভালুয়েশন ও নিরাপদ ডেপ্লয়মেন্ট লুকায়িত ত্রুটি কমায়। সময়ের সঙ্গে, এর মানে হলো কম ভীতিং জয়, দ্রুত ইটারেশন, এবং প্রোডাকশনে স্থিতিশীল মডেল।
ছোট সংস্থায় এই ধরনের "পেভড রোড" তৈরি করতে বললে মূল কথা একই: সমন্বয় খরচ কমাও। একটি বাস্তবিক পন্থা হলো অ্যাপ/সার্ভিস/ডেটা-ব্যাকড ওয়ার্কফ্লো তৈরির নিয়ম একইভাবে স্ট্যান্ডার্ড করা। উদাহরণস্বরূপ, Koder.ai হলো একটি ভিব-কোডিং প্ল্যাটফর্ম যা চ্যাটের মাধ্যমে ওয়েব, ব্যাকএন্ড ও মোবাইল অ্যাপ বানাতে দেয় (React ওয়েব, Go + PostgreSQL ব্যাকএন্ড, Flutter মোবাইল)। যথাযথভাবে ব্যবহার করলে 이런 টুলগুলো প্ল্যাটফর্ম-ইঞ্জিনিয়ারিংকে ত্বরান্বিত করে—অ্যাডমিন কনসোল, ডেটাসেট রিভিউ অ্যাপ, এক্সপেরিমেন্ট ড্যাশবোর্ড বা সার্ভিস র্যাপার—এবং সোর্স-কোড এক্সপোর্ট, ডেপ্লয়মেন্ট ও রোলব্যাক রেখে দেয় যখন প্রোডাকশন কন্ট্রোল দরকার।
TensorFlow এমন একটি উদাহরণ যা দেখায় যখন একটি কোম্পানি মেশিন লার্নিং কোডকে বিচ্ছিন্ন গবেষণা প্রকল্প হিসেবে না দেখে অবকাঠামোর মতো প্যাকেজ করে—কি ঘটে। প্রতিটি টিম আলাদা করে ডেটা পাইপলাইন, ট্রেনিং লুপ, ডেপ্লয়মেন্ট গ্লু বানানোর বদলে একটি শেয়ারড ফ্রেমওয়ার্ক "ডিফল্ট উপায়" কে দ্রুত, নিরাপদ ও রক্ষণাবেক্ষণযোগ্য করে তোলে।
গুগলের ভেতরে সমস্যা শুধু বড় মডেল ট্রেন করা ছিল না—এটি ছিল অনেক টিমকে ধারাবাহিকভাবে ট্রেন ও শিপ করতে সাহায্য করা। TensorFlow অভ্যন্তরীণ অনুশীলনগুলোকে একটি পুনরাবৃত্তযোগ্য ওয়ার্কফ্লোতে পরিণত করেছিল: একটি মডেল সংজ্ঞায়িত করা, বিভিন্ন হার্ডওয়্যারে চালানো, প্রয়োজনে ডিস্ট্রিবিউটেড ট্রেনিং করা, এবং প্রোডাকশন সিস্টেমে এক্সপোর্ট করা।
এই ধরনের প্যাকেজিং সমন্বয় খরচ কমায়। যখন টিম একই প্রিমিটিভ শেয়ার করে, কম bespoke টুল, কম লুকানো অনুমান, এবং বেশি পুনঃব্যবহারযোগ্য কম্পোনেন্ট (মেট্রিক, ইনপুট প্রসেসিং, মডেল সার্ভিং ফরম্যাট) দেখা যায়।
আদ্যতন TensorFlow গণনার গ্রাফ-ভিত্তিক ছিল: আপনি কী গণনা করতে হবে তা বর্ণনা করেন, এবং সিস্টেমটি কিভাবে কার্যকর করা হবে তা নির্ধারণ করে। এই বিভাজন CPU, GPU এবং পরে বিশেষায়িত অ্যাকসিলারেটর টার্গেট করা সহজ করেছে।
পোর্টেবিলিটি এখানে নীরব সুপারপাওয়ার: একটি মডেল যা বিভিন্ন পরিবেশ—রিসার্চ নোটবুক, বড় ট্রেনিং ক্লাস্টার, প্রোডাকশন সার্ভিস—এ চলে, তা "এখানে কাজ করে, ওখানে ভেঙে যায়"-এর করকে কমায়।
আপনি যদি কিছুও ওপেনসরস না করেও কাজ করেন, এক "ওপেন টুলিং" মানসিকতা সাহায্য করে: পরিষ্কার API, শেয়ারড কনভেনশন, সামঞ্জস্য গ্যারান্টি, এবং নতুন ব্যবহারকারীদের মনোযোগে ডকুমেন্টেশন। স্ট্যান্ডার্ডাইজেশন অনবোর্ডিং ভালো করে এবং ডিবাগিং পূর্বানুমেয় করে—ফলস্বরূপ ভেলোসিটি বেড়ে যায়।
কারো গবেষণাকে বেশি দাবি করা সহজ। স্থানান্তরযোগ্য পাঠ নতুনত্ব নয়—প্রভাব। কয়েকটি মূল অ্যাবস্ট্র্যাকশন বেছে নিন, সেগুলোকে ব্যবহারযোগ্য করুন, এবং স্ট্যান্ডার্ড পথকে সহজ করে তুলুন।
ডিপ লার্নিং কেবল "আরও সার্ভার" চায়নি; এটা একটি আলাদা ধরনের কম্পিউটার চেয়েছিল। মডেল সাইজ ও ডেটাসেট বাড়ার সঙ্গে সাধারণ CPU বাধা হয়ে উঠল—নিউরাল নেটের ঘন লিনিয়ার আলজেব্রার জন্য CPU অকার্যকর।
GPU-রা দেখিয়েছে massively parallel চিপ বহু ক্ষেত্রেই CPU-ফ্লিটের চেয়ে প্রতি ডলারে মডেল ট্রেনিং দ্রুত করতে পারে। বড় পরিবর্তনটা সাংস্কৃতিক: ট্রেনিং এখন এমন কিছু যাকে আপনি "ইঞ্জিনিয়ার" করবেন (মেমরি ব্যান্ডউইডথ, ব্যাচ সাইজ, প্যারালেলিজম স্ট্র্যাটেজি), কেবল চালিয়ে অপেক্ষা করা নয়।
TPU-রা সাধারণ ML অপসের চারপাশে হার্ডওয়্যার অপ্টিমাইজ করে; ফলাফল কেবল গতি নয়—পূর্বানুমেয়তাও। ট্রেনিং সময় যখন সপ্তাহ থেকে দিন (বা ঘণ্টা) হয়ে যায়, ইটারেশন লুপগুলো আঁটসাঁট হয় এবং গবেষণা প্রোডাকশনের মতো দেখতে শুরু করে।
বিশেষায়িত হার্ডওয়্যার কেবল তখনই লাভজনক যদি সফটওয়্যার স্ট্যাক এটিকে ব্যস্ত রাখে। এজন্য কম্পাইলার, কের্নেল, ও শিডিউলিং গুরুত্বপূর্ণ:
অর্থাৎ: মডেল, রন্টাইম, এবং চিপ একসাথে পারফরম্যান্স স্টোরি।
স্কেলে প্রশ্ন হয় থ্রুপুট প্রতি ওয়াট এবং প্রতিটি অ্যাকসিলারেটর-ঘন্টার ব্যবহার কতটা। টিমগুলো জবগুলো রাইট-সাইজ করতে শুরু করে, ওয়ার্কলোড প্যাক করে, এবং প্রিসিশন/প্যারালেলিজম সেটিং বেছে নেয় যা প্রয়োজনীয় কোয়ালিটি ধরে রাখে কিন্তু ক্যাপাসিটি নষ্ট করে না।
একটি অ্যাকসিলারেটর ফ্লিট চালানোও ক্যাপাসিটি প্ল্যানিং ও রিলায়েবিলিটি ইঞ্জিনিয়ারিং চায়: বিরল ডিভাইস ম্যানেজ করা, প্রিম্পশন সামলানো, ফেলিউর মনিটরিং, এবং ট্রেনিংকে নবায়নযোগ্য করে ডিজাইন করা যাতে পুরো এস্টার্ট না করতে হয়।
জেফ ডীনের প্রভাব শুধু দ্রুত কোড লেখা নয়—এটি এমনভাবে টিমকে সিদ্ধান্ত নেওয়ার ধরন গড়ে তোলা যেগুলো সিস্টেম এত বড় যে কোনো এক ব্যক্তি পুরোটা বুঝতে পারে না।
স্কেলে, স্থপত্য কোনো এক ডায়াগ্রাম দ্বারা নির্ধারিত হয় না; এটা পলিসি দ্বারা পরিচালিত হয় যা ডিজাইন রিভিউ ও দৈনন্দিন পছন্দে প্রতিফলিত হয়। নেতারা যেসব ট্রেডঅফকে নিয়মিত পুরস্কৃত করে—সহজতাকে বুদ্ধিমত্তার চেয়ে, স্পষ্ট মালিকানা "সবাই মালিক"-এর চেয়ে, নির্ভরযোগ্যতাকে এক-অফ স্পিডআপের চেয়ে—ওইগুলো নীরবে পুরো অর্গানাইজেশনের ডিফল্ট স্থাপত্য নির্ধারণ করে।
একটি শক্তিশালী রিভিউ সংস্কৃতি তার অংশ। "গটচা" রিভিউ নয়, এমন রিভিউ যা পূর্বানুমেয় প্রশ্ন তোলে:
যখন এসব প্রশ্ন রোবটিকভাবে ওঠে, টিমগুলো অপারেট করা সহজ ও বিবর্তিত করা সহজ এমন সিস্টেম তৈরি করে।
একটি পুনরাবৃত্ত নেতৃত্বগত কৌশল হলো অন্যদের সময়কে সবচেয়ে মূল্যবান সম্পদ ধরা। "অন্যদের জন্য সহজ করা" মানসিকতা ব্যক্তিগত উৎপাদনশীলতাকে সংগঠনিক থ্রুপুটে পরিণত করে: ভালো ডিফল্ট, নিরাপদ API, স্পষ্ট এরর মেসেজ, এবং কম লুকানো নির্ভরশীলতা।
এভাবেই প্ল্যাটফর্ম অভ্যন্তরে জিততে শুরু করে। যদি পেভড রোড সত্যিই মসৃণ হয়, বিধি ছাড়াই গ্রহণ করা হয়।
ডিজাইন ডক ও স্পষ্ট ইন্টারফেসগুলো ব্যুরোক্রেসি নয়; এগুলো টিম ও সময় জুড়ে উদ্দেশ্য প্রেরণ করার উপায়। একটি ভাল ডক বিরোধকে উত্পাদনশীল করে তোলে ("কোন অনুমানটি ভুল?") এবং পুনরায় কাজ কমায়। একটি ভাল ইন্টারফেস সেই সীমানা টেনে দেয় যা বহু টিমকে পাশাপাশি শিপ করতে দেয়।
সরল শুরুর জন্য, একটি হালকা-ওজন টেমপ্লেট স্ট্যান্ডার্ড করুন এবং এটির ধারাবাহিকতা বজায় রাখুন (দেখুন /blog/design-doc-template)।
মানুষকে স্কেল করা মানে জাজমেন্টের জন্য লোক নিয়োগ করা—শুধু প্রযুক্তিগত কৌতুক নয়—এবং অপারেশনাল পরিণততার জন্য মেন্টর করা: চাপের মধ্যে ডিবাগ করা, নিরাপদে সিস্টেম সহজ করা, এবং ঝুঁকি সংযোগ করা। লক্ষ্য হলো এমন একটি টিম তৈরি করা যা ক্রিটিক্যাল ইনফ্রাস্ট্রাকচার শান্তভাবে চালাতে পারে—কারণ শান্ত টিমগুলো অপরিবর্তনীয় ভুল কম করে।
জেফ ডীনের গল্প প্রায়ই "10x ইঞ্জিনিয়ার" ন্যারেটিভে সরলীকৃত হয়: একজন ব্যক্তি অন্যদের চেয়ে দ্রুত টাইপ করে এবং একাই স্কেল আবিষ্কার করে। সেটাই উপকারী অংশ নয়।
স্থানান্তরযোগ্য পাঠ কাঁচা আউটপুট নয়—এটি লিভারেজ। সবচেয়ে মূল্যবান কাজ হলো যা অন্য ইঞ্জিনিয়ারদের দ্রুত করে এবং সিস্টেমগুলোকে নিরাপদ করে: পরিষ্কার ইন্টারফেস, শেয়ারড টুলিং, কম ফাটল, এবং এমন ডিজাইন যা সময়ের সাথে ভাল থাকে।
যখন লোকেরা কিংবদন্তি উৎপাদনশীলতার দিকে ইঙ্গিত করে, তারা সাধারণত লুকানো মাল্টিপ্লায়ারগুলো ছেড়ে দেয়: সিস্টেমের গভীর ধারণা, শৃঙ্খলাবদ্ধ অগ্রাধিকার, এবং এমন পরিবর্তনে ঝোঁক যা ভবিষ্যৎ কাজ কমায়।
কয়েকটি অভ্যাস নিয়মিত এমন টিমে দেখা যায়:
এই অভ্যাসগুলো গুগল-আকারের অবকাঠামো ছাড়াও প্রযোজ্য; তাদের জন্য ধারাবাহিকতা দরকার।
হিরো স্টোরিগুলো প্রকৃত কারণ ঢেকে দিতে পারে: যত্ন সহকারে পরীক্ষণ, শক্তিশালী রিভিউ সংস্কৃতি, এবং ফেলিউরের জন্য ডিজাইন করা সিস্টেম। "কে বানিয়েছে?" জিজ্ঞেস করার বদলে প্রশ্ন করো:
আপনার কাছে কাস্টম হার্ডওয়্যার বা গ্রহ-পরিসরের ডেটা না থাকলেও প্রিন্সিপলগুলো প্রয়োগযোগ্য:
একটি কম প্রচলিত অ্যাক্সিলারেটর হলো ইনফ্রা UI গ্যাপ ছোট করা। অভ্যন্তরীণ টুলিং ধীর হলে টিমরা তা তৈরি করে না—তারপর ম্যানুয়াল অপসের মূল্য চিরকাল পরিশোধ করে। Koder.ai-এর মতো টুলগুলো দ্রুত প্ল্যাটফর্ম সারফেস শিপ করতে সাহায্য করতে পারে (অপস কনসোল, ডেটাসেট লেবেলিং অ্যাপ, রিভিউ ওয়ার্কফ্লো) এবং স্ন্যাপশট/রোলব্যাক, ডেপ্লয়মেন্ট/হোস্টিং ফিচার দিয়ে প্ল্যাটফর্ম ইঞ্জিনিয়ারিংকে দক্ষ করে তোলে।
জেফ ডীনের কাজ স্মরণ করায় যে "এআই স্কেল করা" প্রায়ই পুনরাবৃত্ত ইঞ্জিনিয়ারিং: এক-অফ মডেল জয়কে এমন একটি নির্ভরযোগ্য ফ্যাক্টরিতে পরিণত করা—ডেটা, ট্রেনিং, ইভালুয়েশন, ও ডেপ্লয়মেন্টের জন্য।
ভবিষ্যতের প্রতিটি প্রকল্পকে গুণগতভাবে বাড়ানো বোরিং অংশগুলো দিয়ে শুরু করুন:
বেশিরভাগ স্কেলিং ব্যর্থতা "আরো GPU দরকার" ধাঁচের নয়। সাধারণ বাধা:
ডেটা ক্ঈউলিটি ডেবট: লেবেল ড্রিফট করে, সংজ্ঞা পরিবর্তিত হয়, মিসিং ভ্যালু বাড়ে। সমাধানগুলো হিরোদের দরকার নয়—মালিকানা ও SLA দরকার।
ইভালুয়েশন গ্যাপ: টিম একট্রাফিক অফলাইন মেট্রিকের ওপর নির্ভর করে, পরে প্রোডাকশনে অবাক হয়। রিজিওন/ডিভাইস/কাস্টমার সেগমেন্ট অনুযায়ী স্লাইস-বেইসড রিপোর্টিং যোগ করুন এবং গো/নো-গো থ্রেশহোল্ড নির্ধারণ করুন।
ডেপ্লয়মেন্ট ড্রিফট: ট্রেনিং একটি ফিচার ক্যাল্কুলেশন ব্যবহার করে, সার্ভিং আরেকটি। শেয়ারড ফিচার কোড, এন্ড-টু-এন্ড টেস্ট, ও পুনরুত্পাদনযোগ্য বিল্ড দিয়ে সমাধান করুন।
কোঅর্ডিনেশনের খরচ কমিয়ে দেয় এমন অবকাঠামো ও ওয়ার্কফ্লো মানদণ্ড বেছে নিন: কম কাস্টম পাইপলাইন, কম লুকানো ডেটা অনুমান, এবং স্পষ্ট প্রোমোশন নিয়ম। এসব পছন্দগুলো কম্পাউন্ড করে—প্রতিটি নতুন মডেলকে সস্তা, নিরাপদ এবং দ্রুত শিপ করার মতো করে তোলে।
"স্কেলিং এআই" মানে বাস্তবে মেশিন লার্নিংকে নিয়মিত এবং নির্ভরযোগ্যভাবে চালানো যাতে বাস্তব সীমাবদ্ধতার মধ্যে কাজ করে:
এটি একক মডেল টিউনিংয়ের চেয়ে বেশি—একটি অ্যাসেম্বলি লাইন বানানোর মতো।
কারণ অনেক ML আইডিয়া তখনই মূল্য অর্জন করে যখন সেগুলো বড় ডেটা ও ট্রাফিকে নিয়মিত, বারবার ও সস্তায় চলে।
প্রভাবটা প্রায়ই মাঝামাঝি স্তরে পড়ে:
ফ্লিট স্কেলে ব্যর্থতা নিয়মে পরিণত হয়। সাধারণ প্রথম ভাঙনগুলো:
রিকভির জন্য ডিজাইন (রিট্রাই, চেকপয়েন্ট, ব্যাকপ্রেশার) সাধারণত একক-মেশিনের চূড়ান্ত গতি ছাড়াও বেশি গুরুত্বপূর্ণ।
MapReduce বড় ব্যাচ প্রসেসিংকে মানক ও টেকসই করে তুলেছিল:
আধুনিক টুল (Spark/Flink/Beam, ক্লাউড ETL) বৈশিষ্ট্যে আলাদা হলেও মূল শিক্ষা একই: সমান্তরালতা ও রিট্রাই ডিফল্ট হওয়া উচিত।
Bigtable হলো একটি ওয়াইড-কোলাম স্টোর, যা উচ্চ থ্রুপুট এবং পূর্বানুমেয় ল্যাটেন্সি-এর জন্য ডিজাইন করা। মূল ধারণা:
এমএল-এ, পূর্বানুমেয় ডেটা অ্যাক্সেস ট্রেনিং সময়সূচি ও এক্সপেরিমেন্ট পুনরুৎপাদন সহজ করে।
স্টোরেজ ডিজাইন নির্ধারণ করে আপনি কিরকম ফিচার তৈরি করতে পারবেন এবং কীভাবে পুনরায় চালাতে পারবেন:
সংক্ষেপে: স্থিতিশীল স্টোরেজ নির্ভরযোগ্য এমএল-কে প্রোডাকশন সক্ষম করে বা নাহলে বারবার আগুন নিভানোর মতো করে তোলে।
ট্রেনিং স্টেটফুল ও ইটারেটিভ হওয়ার কারণে সমান্তরাল ব্যাচ প্রক্রিয়ার চেয়ে কঠিন:
শেয়ারড এমএল প্ল্যাটফর্ম 'হিরো ওয়ার্কফ্লো'-গুলোকে paved road-এ পরিণত করে:
এটি ডুপ্লিকেশন কমায় এবং টিমগুলোর মধ্যে ফল তুলনা যোগ্য করে—পরিণামে ইটারেশন স্পিড বাড়ে।
স্ট্যান্ডার্ডাইজেশন সমন্বয়ের খরচ কমায়:
TensorFlow নিজেই নয়, এই মেসেজটি: কয়েকটি স্থিতিশীল অ্যাবস্ট্র্যাকশন চয়ন করুন, ভাল ডকুমেন্ট করুন, এবং স্ট্যান্ডার্ড পথকে সহজ করে তুলুন।
বিশেষায়িত হার্ডওয়্যার ছাড়া বড় ডিপ লার্নিং-এ দ্রুততার লাভ সীমিত:
সফটওয়্যার স্ট্যাক (কম্পাইলার, কের্নেল, শিডিউলার) হার্ডওয়্যারকে সদ্ব্যবহার করতে হবে—মডেল, রানটাইম ও চিপ একসাথে পারফরম্যান্স গল্প।
শুরুতে এমন সংগ্রহযোগ্য ভিত্তি তৈরির উপর নজর দিন যা ভবিষ্যৎ প্রতিটি প্রকল্পকে গুণগতভাবে বাড়ায়:
প্র্যাকটিক্যাল রুটিন: একমত হওয়া আগে এন্ড-টু-এন্ড সময় মাপুন, topology সহজ রাখুন, তারপর অপ্টিমাইজ করুন।
সাধারণভাবে এগুলোই নতুন মডেলদের সস্তা, নিরাপদ ও দ্রুত শিপ করা নিশ্চিত করে।