به بخش پرسش و پاسخ یادگیری عمیق خوش آمدید,
این نسخه آزمایشی سایت است.
لطفا به نکات زیر توجه کنید:
  • برای ارتباط با مدیران میتوانید از صفحه مدیران اقدام کنید.
  • سوال و جواب ها باید به زبان فارسی باشند. استفاده از زبان انگلیسی یا فینگلیش برای پاسخ دادن مجاز نیست.
  • لطفا بعد از پرسش سوال لینک سوال خود را در گرو تلگرام (Iran Deep Learning Group) معرفی کنید تا سریعتر به جواب برسید. برای دسترسی به آخرین لینک از منابع یادگیری استفاده کنید
  • لطفا بجای عکس از متن استفاده کنید. اگر متون طولانی هستند از سایت pastebin.com برای اپلود استفاده کرده و لینک حاصل را در سوال خود قرار دهید. برای قرار دادن تصویر ، از بخش ارسال تصویر ادیتور سایت استفاده کنید.
  • بعد از دریافت پاسخ، بهترین پاسخ را از طریق کلیک بر روی علامت تیک انتخاب کنید
  • اگر با خطا و یا مشکلی مواجه شدید از بخش تماس با ما در انتهای صفحه و یا ایمیل Coderx7@gmail.com موضوع را اطلاع دهید.

با تشکر

دسته بندی ها

0 امتیاز

سلام
روی یک سیستم گرافیک 980ti با گرافیک 4 گیگ روی ویندوز 7 با رم 8
روی یک سیستم دیگه 1080ti با گرافیک 11 گیگ روی ubuntu با رم 16 و هارد ssd
یک کد رو اجرا کردم
روی سیستم 980ti با batch size= 16 گرافیک 3800 مگش پر شد یعنی هر بچش 237 مگ گرفته
روی سیستم 1080ti با batch size= 24 گرافیک 10700 مگش پر میشه یعنی هر بچش 445 مگ گرفته !
چرا مقدار حافظه ی گرفته شده تو دو گرافیک انقدر فرق داره ؟
باید تنظیم خاصی انجام بدم ؟
با تشکر

توسط (208 امتیاز)

1 پاسخ

+1 امتیاز
 
بهترین پاسخ

سلام
اگه از تنسورفلو استفاده میکنید بنظرم میاد این عادیه چون تنسورفلو کل فضای gpu رو اشغال میکنه و بعد خودش مدیریت رو انجام میده .(سابقا اینو چندبار دیدم نمیدونم الان هم هست یا نه در ورژن جدید تست نکردم) میتونید با معماری خیلی سبکتری تست کنید و باید ببینید که اونجا هم باید در 1080 کل فضای رم شما اشغال میشه.
کلا هر کارت گرافیکی استفاده کنید تقریبا همه فضاش رو بدون توجه به اینکه واقعا خود معماری چقدر مصرف داره اشغال میکنه.

آپدیت :
سرچی که کردم به موارد زیر رسیدم . طبق مستندات خود تنسورفلو برای اینکه این مشکل رو برطرف کنید دو راه دارید
1. در داخل کد مشخص کنید که بر اساس مصرف معماری حافظه اختصاص پیدا کنه . برای اینکار از کد زیر استفاده کنید

config = tf.ConfigProto()
config.gpu_options.allow_growth=True
sess = tf.Session(config=config)

فقط این نکته ای که داره اینه که گفتن در این حالت ما خودمون حافظه رو ازاد نمیکنیم چون اگ راینکارو بکنیم پرفورمنس خیلی بد میشه!

2) برای هر gpu در سیستم یک حد بالایی مشخص کنید مثلا 40% فضای حافظه کارتهای گرافیک قابل استفاده باشه برای اینکار باید از گزینه per_process_gpu_memory_fraction در gpu_options استفاده کنید و مقدار اون رو برابر درصد مورد نظر قرار بدید و بعد موقع ساخت session ازش استفاده کنید : مثل زیر : .

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
sess = tf.Session(config=config, ...)
توسط (4.3k امتیاز)
انتخاب شده توسط
سلام
ممنونم
درست میگید ولی جالبیش اینه مقدار بچ هارو یکی بیشتر میدم دیگه اجرا نمیشه(یعنی کل حافظه رو گرفته)
حساب کردم انگارروی 1080 دوبرابر حافظه گرفته !
تنظیمی چیزی هست که باعث بشه این اتفاق بیفته ؟
سلام . جواب دادم چک کنید.
بازم ممنونم ولی اینم جوابم نیست !
من میخوام بدونم هر batch روی گرافیک 980 چرا 237 مگ از گرافیکو گرفته ولی روی 1080ti هر بچ 445 مگ
مشکلی نیست که تنسور کل گرافیکو بگیره مشکل اینه چرا داره مموری بیشتری برای هر بچ اختصاص میده
مثلا روی گرافیک 4 گیگی وقتی میشه 16 بچ رو اجرا کرد (یعنی هر گیگی 4 بچ) روی گرافیک 11 گیگی باید  بشه 4*11 بچ رو اجرا کرد = 44 بچ ولی با 24 بچ حافظه تموم میشه(اجازه نمیده مقدار بچ رو بیشتر بدم وگرنه خطای حافظه میده)
گویا روی 1080ti هر بچ دوبرابر فضا اشغال میکنن
حالا چراشو نمیفهمم
من یک اشتباهی کردم 980ti رو فک کردم 4 گیگ هست نه 6 گیگ برای همین اون فضا هم تقریبا کل حافظه رو گرفته گفتم و بخاطر مصرف حافظه واقعی معماری نیست بلکه بخاطر اینه که تنسورفلو همه رو اشغال کرده هست. الان مساله یکم عجیب شد . دیفالت تنسورفلو اینه که همه فضا رو بگیره . روی 980ti هم که 6 گیگ داره باید بیش از 5 و خورده ای گیگش اشغال بشه بصورت دیفالت نه 3.7 گیگ. چه اینکه معماری شما 1 گیگ مصرف داشته باشه چه 5 گیگ . کار خاص دیگه ای انجام نمیدید ؟ مثلا قبل از اینکه تنسورفلو رو ران کنید برنامه دیگه ای که حافظه 980ti رو اشغال کرده باشه شما ران ندارید (که مثلا بعد از اجرای تنسورفلو اون رو ببندید یا تموم بشه ) تنها حالتی که من بنظرم میاد قبلا خودم مواجه بودم یک همچین چیزی بود. مثلا با کفی ترین میکردم بخشی از حافظه اشغال میشد بعد تنسورفلو رو هم اجرا میکردم که باقی حافظه رو میگرفت  و بعد کفی رو میبستم که اینطور حافظه کفی ازاد میشد و میشد کار کرد. شاید این هم برای شماصادق باشه. شما اول باید مطمئن بشی چقدر فضا داره اختصاص داده میشه . اینجا رو ببینید : https://stackoverflow.com/questions/40190510/tensorflow-how-to-log-gpu-memory-vram-utilization
بعد میشه مطمئن شد ایا واقعا تفاوتی در میزان مصرف حافظه هست یا نه صرفا تنسورفلو کل حافظه رو در هر دو اشغال میکنه .
اگر هم تست کردید و دیدید اینطوره و کار خاصی هم نکردید و ورژن ها یکی و خلاصه همه چیز ثابته ممکنه یک باگی چیزی باشه. ارزش داشته باشه تو گیت هاب تو بخش issues مطرحش کنید.
سلام
شرمنده اشتباه گفتم نگاه کردم 980بود و 4 گیگ رم داره
نکته دوم هم چک کردم رم گرافیک تو هر دو خالی بود بعد اجرا کردم !
سلام خب اگه 4 گیگ بود پس همون بحث اوله . یعنی تنسورفلو کل فضای گرافیک رو میگیره. نسبت اشغال فضا هم در هر دو کارت یکیه. بعنوان مثال 92 93 درصد فضا در کارت اول اشغال شده . در کارت دوم هم به همین شکل. یعنی هیچ کاری نکنید اینه. و ربطی به این نداره که بچ اونجا انقدر فضا گرفته اینجا انقدر. حالا برای اینکه دقیق بدست بیارید مصرف حافظه هرکدوم چقدره میتونید از اون لینکی که بالا دادم استفاده کنید یا کلا allow_growth رو true کنید و با یک بچ یکسان در هر دو تست بگیرید و مصرف حافظه رو چک کنید.
سلام منظورم رو متوجه نشدید
من میزان حافظه مصرف شده رو با یه تقریبی میدونم علت اینکه روی 1080ti هر بچ مقدار دو برابر بیشتر از 980  حافظه رو میگیره رو نمیفهمم(منظورم اینه که گرافیک خوب خریدم بشه تعداد بچ بیشتری روش قرار داد نه اینکه با اضافه کردن 7 گیگ گرافیک (11 گیگ به نسبت 4 گیگ گرافیک 980) فقط بشه 8 بچ اضافه کنم.  اگر تناسب ببندیم 16 بچ روی 980 ران میشه باید روی 1080ti بشه 44 بچ ران کرد!
ولی با 24 بچ کل حافظه ی 1080tiپر میشه و 25 میدم خطا میده که حافظه پر شده (هیچ چیز دیگه ای هم ران نیست چک کردم)
درسته. عرض من اینه شما دقیق امار مصرفی رو در بیارید تا مشخص بشه ایا جایی لیکی وجود داره که خطا میده یا بحث دیگه ایه . اینکه نسبت ها نمیخونه و در 1080ti باید بچ بزرگتری رو زد درسته ولی من میگم اطلاعات رو بدست بیارید ببینید اندازه بچی که با 24 مثلا میزنید دقیقا چقدر از حافظه رو اشغال میکنه بقیه اش ایا بخاطر لیک شدن حافظه اس که خطا میده یا نه کلا دوبرابر بیشتر داره اختصاص میده.
اینو باید تو issues تنسورفلو مطرح کنید و برای اینکه اونجا جواب درست بگیرید لازمه این اطلاعات اولیه رو هم ضمیمه کنید تا سریعتر اونجا پیگیری کنن .
با لینکی که خدمتتون دادم تو استک اورفلو بنظر میاد بطور دقیق میشه مصرف حافظه رو در جاهای مختلف گراف دیدو چک کرد اینطور بهتر میشه فهمید گیر کار ازکجاست.
...