سلام
توی تنسورفلو خیلی دست بازه برای اینکه کارهای مختلف انجام بده، مثلا اینکه شما لایه ها رو تقسیم کنید بین gpu های مختلف یا اینکه نه، کل گراف بین همه مشترک باشه و هر کدوم batch های مختلفی دریافت کنه و در نهایت وزنها رو از تجمیع گرادیان همه شبکه ها آپدیت کنید
که اگه اشتباه نکنم به اولی میگن in graph replication و به حالت دوم که وزنها بین گرافها مشترک میگن between graph replication، اگه اشتباه می کنم لطفا بگید تا جواب رو درست کنم
خوده این حالات هم کلی بحث داره که توی مقالات مربوط به distributed tensorflow خیلی روش بحث شده و میشه و اتفاقا موضوع داغی هم هست به نسبت، به خصوص برای کارهای بزرگ
اما حالا اینکه چطوری و از چه روشی استفاده کنیم، خیلی بستگی به شرایط مساله ما داره. مثلا توی همون الکس نت که مثال زدید، اگه اشتباه نکنم محدودیت سخت افزارهای اون سال باعث شده بود که شبکه رو دو قسمت کنن (یعنی in graph replication)
اما چیزی که هم راحت تره، هم مثل اینکه پرفورمنس بهتری توی خیلی از مسائل داده، همون استفاده از between graph replication ه
یعنی اگه 2 تا gpu دارید، گراف شبکتون رو روی هر دو قرار می دید و هر کدوم با batch های جداگانه گرادیان ها رو حساب می کنن و در نهایت به صورت سنکرون یا آسنکرون وزنها رو آپدیت می کنید. برای هر دونه gpu هم تقسیم کار اتوماتیک و خوب اتفاق می افته که خودش کمک خیلی بزرگیه
برای این مورد، خوده سایت تنسورفلو یه مثال خیلی خوب روی دیتاست cifar پیاده کرده
https://www.tensorflow.org/tutorials/deep_cnn
نظر و تجربه شخصی و چیزهایی که شنیدم از تجربه بقیه، حداقل فعلا اینطوری بوده که استفاده از training موازی چندتا شبکه همزمان، به جای تقسیم خوده شبکه روی چندتا gpu، تا وقتی که واقعا مساله ما رو مجبور نکرده، کارایی بیشتری داره و صد البته خیلی هم راحت تره D:
اگه خواستید راجع بهش سرچ هم بکنید بحث های جالبی حتی در مورد نویز paralle training روی دقت نهایی هست، به خصوص توی ساختارهایی مثل A3C که میگن شاید همین آپدیت های آسنکرون به خاطر نویزی که به آموزش تزریق میکنه، می تونه دقت رو بهتر کنه