ডিএনএন প্রশিক্ষণের সিপিইউ এবং জিপিইউ মেমরির প্রয়োজনীয়তার পূর্বাভাস


10

বলুন আমার কাছে কিছু গভীর শেখার মডেল আর্কিটেকচার রয়েছে, পাশাপাশি একটি নির্বাচিত মিনি-ব্যাচের আকার রয়েছে। এই মডেলটির প্রশিক্ষণের জন্য আমি কীভাবে এই প্রত্যাশিত মেমরির প্রয়োজনীয়তাগুলি থেকে উত্সর্গ করতে পারি?

উদাহরণস্বরূপ, মাত্রা 1000 এর ইনপুট সহ একটি (অ-পুনরাবৃত্ত) মডেলটি বিবেচনা করুন, মাত্রা 100 এর 4 টি সম্পূর্ণরূপে সংযুক্ত লুকানো স্তর এবং 10 মাত্রার একটি অতিরিক্ত আউটপুট স্তর The মিনি ব্যাচের আকারটি 256 উদাহরণ। কীভাবে একজন সিপিইউ এবং জিপিইউতে প্রশিক্ষণ প্রক্রিয়ার আনুমানিক মেমরি (র‌্যাম) পদচিহ্ন নির্ধারণ করে? যদি এটি কোনও পার্থক্য করে, ধরে নেওয়া যাক মডেলটি টেনসরফ্লো (এইভাবে cuDNN ব্যবহার করে) এর সাথে একটি জিপিইউতে প্রশিক্ষিত।

উত্তর:


3

@ কিক_ভিউজের উত্তর বর্ণনা করে যে ওজন সংরক্ষণের জন্য প্রয়োজনীয় মেমরির স্থানটি কীভাবে অনুমান করা যায় তবে আপনাকে মধ্যবর্তী ক্রিয়াকলাপগুলিও সংরক্ষণ করতে হবে এবং বিশেষত 3 ডি ডেটা নিয়ে কাজ করা কনভোলজিকাল নেটওয়ার্কগুলির জন্য এটি প্রয়োজনীয় মেমরির মূল অংশ।

আপনার উদাহরণ বিশ্লেষণ করতে:

  1. ইনপুটটির জন্য 1000 টি উপাদান দরকার
  2. স্তর 1-4 স্তর পরে আপনার 100 টি উপাদান রয়েছে, মোট 400
    1. চূড়ান্ত স্তর পরে আপনার 10 টি উপাদান রয়েছে

মোট 1 নমুনার জন্য আপনাকে ফরওয়ার্ড পাসের জন্য 1410 টি উপাদান দরকার। ইনপুট ব্যতীত, আপনার পশ্চাদপদ পাসগুলির জন্য তাদের প্রত্যেকের সম্পর্কে একটি গ্রেডিয়েন্ট তথ্যও প্রয়োজন, এটি 410 আরও বেশি, প্রতি নমুনা অনুসারে মোট 1820 উপাদান । 465 920 পেতে ব্যাচের আকার দিয়ে গুণ করুন।

আমি "উপাদানগুলি" বলেছিলাম, কারণ উপাদান হিসাবে প্রয়োজনীয় আকারটি ব্যবহৃত ডেটা টাইপের উপর নির্ভর করে। একক নির্ভুলতার জন্য float32এটি 4 বি এবং ডেটা ব্লবগুলি সঞ্চয় করতে মোট মেমরিটি প্রায় 1.8MB এর কাছাকাছি হবে।


1

আমি দুটি বিকল্প দেখতে পাচ্ছি:

  1. নেটওয়ার্কটি ডিস্ক থেকে লোড করা হয়
  2. নেটওয়ার্কটি ফ্লাইতে তৈরি করা হয়েছে

উভয় ক্ষেত্রেই জিপিইউতে থাকা মেমরির আকারটি ব্যাচের আকার দ্বারা গুণিত করা প্রয়োজন কারণ প্রতিটি স্যাম্পলের জন্য বেশিরভাগ নেটওয়ার্ক অনুলিপি করা হয়।

ডিস্ক থেকে লোড হলে থাম্বের বিধি: ডিএনএন যদি ডিস্কে এক্স এমবি নেয়, তবে ব্যাচের আকার 1 এর জন্য জিপিইউ মেমরিতে নেটওয়ার্ক 2 এক্স হবে।

নেটওয়ার্কটি ব্যাচের আকার 1 এর জন্য ফ্লাইতে তৈরি করা হয়েছে: প্যারামিটারটি গণনা করুন এবং 4 বাইট (ফ্লোট 32 বিট) দিয়ে গুণ করুন: প্যারামিটারের ম্যানুয়ালি সংখ্যা গণনা: fc1: 1000x100 (ওজন) + 100 (বায়াস) fc2: 100x100 (ওজন) + 100 (বায়াসস) fc3: 100x100 (ওজন) + 100 (বায়াস) fc4: 100x100 (ওজন) + 100 (বায়াস) আউটপুট: 100x10 (ওজন) + 10 (বায়াস)

কেরাস ব্যবহার করে প্যারামিটারের সংখ্যা গণনা করা হচ্ছে: Model.count_params ()


3
আমি যতদূর বলতে পারি, এটি ওজনগুলি নিজেরাই সঞ্চয় করার জন্য মেমরির প্রয়োজনীয়তা দেয় তবে প্রশিক্ষণের জন্য প্রয়োজনীয় কোনও কিছু যেমন গ্রেডিয়েন্টস সংরক্ষণ করার জন্য উত্সর্গীকৃত কোনও মেমরি উপেক্ষা করে । গ্রেডিয়েন্টগুলি সংরক্ষণ করা প্রয়োজন, গতি বাস্তবায়নের জন্য বলুন। আমি কি মিস করছি?
Whaa

1
@ এটি সত্য, সাধারণ প্রশিক্ষণের জন্য আপনার ওজন সংরক্ষণ করতে মেমরি দরকার, ফরোয়ার্ড পাসে অ্যাক্টিভেশন এবং ব্যাক-প্রসারণ পাসের গ্রেডিয়েন্টগুলি (গতি ছাড়াই মেমরি 3xও)।
mjul

@ এমজুল আমার পরীক্ষাগুলি 4.5x ik_vision এর অনুমান দেখায়। আমি 3x এর পিছনে যুক্তি বুঝতে পেরেছি তবে কেন অনুশীলনে এটি 4.5x ব্যবহার করছে তা নিশ্চিত নই। অন্য কেরাস / টিএফ ওভারহেড থাকতে হবে ??
ওয়েস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.