প্রকল্প সম্পর্কে
NEAT-AI-core হলো NEAT-AI-এর শেয়ারড নেটিভ Rust কোর, যা NEAT (NeuroEvolution of Augmenting Topologies)-এর একটি ইমপ্লিমেন্টেশন; এই অ্যালগরিদমটি একটি নিউরাল নেটওয়ার্কের ওয়েট এবং টপোলজি উভয়কেই বিবর্তিত করে। এই রিপোজিটরিটি একটি Cargo ওয়ার্কস্পেস যার সদস্য neat-core ক্রেটটি টেস্টসহ শেয়ারড কম্পিউটেশন লাইব্রেরি ধারণ করে।
ক্রেটটি যা প্রদান করে: স্কোরিং, লস এবং SIMD কার্নেল যা একটি একক বিবর্তিত ইন্ডিভিজুয়াল (যাকে প্রজেক্টটি 'creature' বলে অভিহিত করে) এর মাধ্যমে অনেক রেকর্ড পাঠাতে ব্যবহৃত হয়। ডিফল্ট বিল্ড এবং wasm32 বিল্ড সিঙ্গেল-থ্রেডেড পথ অনুসরণ করে; parallel Cargo ফিচারটি সক্রিয় করলে নেটিভ টার্গেটগুলোতে rayon-ভিত্তিক ডেটা-প্যারালাল রেকর্ড স্কোরিং যুক্ত হয়। সিকোয়েন্সিয়াল এবং প্যারালাল উভয় স্কোরিং পথই একটি 8-রেকর্ড ব্যাচড SIMD পথ, তারপরে একটি 4-রেকর্ড গ্রুপ এবং একটি স্কেলার টেইল-এর মাধ্যমে ফরওয়ার্ড পাস পরিচালনা করে। README-তে উল্লেখ করা হয়েছে যে, কমিটেড প্রোডাকশন টপোলজিতে সেফ কার্নেলগুলোর একটি পরিমাপযোগ্য প্রি-পাস খরচ রয়েছে, তাই নিজস্ব লোড-টাইম ভ্যালিডেশন থাকা ব্যবহারকারীদের unchecked টুইনগুলোর দিকে নির্দেশ করা হয়েছে এবং এটি জানানো হয়েছে যে নেটিভ লেন প্রতি কোরে wasm32 লেনের চেয়ে ভালো পারফর্ম করে।
স্কোরিং API: ইনপুট এবং আউটপুট একটি ফ্ল্যাট, কন্টিনিউয়াস লেআউট ব্যবহার করে: রেকর্ড i ইনপুটগুলো inputs[i * stride .. i * stride + stride] থেকে পড়ে এবং এর আউটপুটগুলো out[i * num_outputs .. (i + 1) * num_outputs]-এ জমা হয়। পুরনো প্রতি-রেকর্ড ভেক্টর র্যাপারগুলো প্রথমে ডেপ্রিকেটেড এবং পরে রিমুভ করা হয়েছে, তাই কলারদের অবশ্যই রেকর্ডগুলোকে একটি বাফারে প্যাক করতে হবে এবং ফ্ল্যাট এন্ট্রি পয়েন্টগুলো কল করতে হবে; শূন্য স্ট্রাইড বা এমন বাফার যা রেকর্ডের পূর্ণ সংখ্যা নয়, তা সাইলেন্টলি মিস-স্লাইসিং করার পরিবর্তে প্যানিক করবে।
কম্পাইলড নেটওয়ার্কগুলো তৈরির পর রিড-অনলি থাকে। ফিল্ডগুলো প্রাইভেট এবং বরো-অনলি অ্যাক্সেসরের মাধ্যমে এক্সপোজ করা হয়, এবং একটি from_parts কনস্ট্রাক্টর মেমোরিতে থাকা নিউরন এবং সিন্যাপস থেকে একটি নেটওয়ার্ক তৈরি করে, যা বাফার-ভিত্তিক কনস্ট্রাক্টরের মতোই ভ্যালিডেশন প্রয়োগ করে এবং টেবিল ওভাররান করা সিন্যাপস স্প্যানকে প্রত্যাখান করে। README-তে উল্লেখ করা হয়েছে যে এটি ডাউনস্ট্রিম কনজিউমারদের জন্য একটি ব্রেকিং চেঞ্জ।
ফিচার ফ্ল্যাগ: parallel ডিফল্টভাবে বন্ধ থাকে, তাই ডিফল্ট এবং wasm32 বিল্ডে কোনো rayon সিম্বল থাকে না; checked-gather4-ও ডিফল্টভাবে বন্ধ থাকে এবং এটি wasm32 gather4 হেল্পারে বাউন্ডস-চেকড ইনডেক্সিং পুনরুদ্ধার করে। SIMD মডিউলের প্রতিটি কার্নেল একটি সেফ ফাংশন হিসেবে শিপ করা হয় যা এর স্প্যান ভ্যালিডেট করে এবং কন্ট্রাক্ট মেনে না চললে প্যানিক করে, সাথে একটি আনচেকড টুইন থাকে যার সেফটি কন্ট্রাক্ট হলো লোড-টাইম ইনডেক্স ইনভ্যারিয়েন্ট।
WebAssembly: প্রতিটি পুশ দুটি বান্ডেল পাবলিশ করে: একটি wasm64 Memory64 বিল্ড যা নতুন রিভিশনগুলো পিন করে, এবং একটি অপরিবর্তিত wasm32 বিল্ড যা রোলব্যাক উইন্ডো হিসেবে রাখা হয়; প্রতিটির নিজস্ব চেকসাম সাইডকার এবং SBOM থাকে, যা রিলিজের আগে বান্ডেল এবং আর্কিটেকচার-প্যারিটি চেক দ্বারা নিয়ন্ত্রিত হয়।
বিল্ড এবং কোয়ালিটি: ডেভেলপমেন্ট টেস্ট-ড্রিভেন ডেভেলপমেন্ট অনুসরণ করে; লোকাল কোয়ালিটি গেট ফরম্যাটিং, clippy, টেস্ট, ডক্স, লাইসেন্স এবং অ্যাডভাইজরি চেক এবং bats শেল-সুইট টেস্টগুলো রান করে, এবং CI পুল রিকোয়েস্ট এবং ম্যানুয়াল ডিসপ্যাচে পরিচালিত হয়। রুট ম্যানিফেস্ট ওয়ার্কস্পেস-ব্যাপী dev এবং release প্রোফাইল সংজ্ঞায়িত করে (দ্রুত ডেভ রিবিল্ডের জন্য line-tables-only ডিবাগ ইনফো; রিলিজের জন্য fat LTO এবং একটি একক কোডজেন ইউনিটসহ opt-level 3), যেখানে target-cpu=native ইচ্ছাকৃতভাবে এখানে পিন না করে ডাউনস্ট্রিম বাইনারি কনজিউমারদের জন্য রাখা হয়েছে।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.