Skip to content

Instantly share code, notes, and snippets.

@lajosdeme
Forked from stsievert/Centralized-PS.ipynb
Created December 6, 2023 23:44
Show Gist options
  • Save lajosdeme/e6a5b465938d64e391cb8b16cb15dda5 to your computer and use it in GitHub Desktop.
Save lajosdeme/e6a5b465938d64e391cb8b16cb15dda5 to your computer and use it in GitHub Desktop.
PyTorch MNIST parameter server
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is a centralized parameter server with PyTorch's MNIST example. Is is centralized because the model is stored in one place. This requires the communication of models in addition to the communication of gradients.\n",
"\n",
"The next couple cells are basically copy/pasted from [PyTorch's MNIST example](https://github.com/pytorch/examples/tree/master/mnist)."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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AYRGp80444UABCAAgVYngNBo9Rmk/xDoEAIIjQ6ZaIYJAQhAAAJtQwCh0TZTyUAg0N4EEBrtPb+MDgIQgAAE2o8AQqP95pQRQaAtCSA02nJaGRQEIAABCLQxAYRGG08uQ4NAOxFAaLTTbDKWVifw448/2rfffmt67c024YQTWv/+/a1fv3692X2cfXSusWPHxp/PPvvMvvrqK5tgggls8sknjz/TTjut6Wf88ccf51g+gAAEmkcAodE89pwZAhCogQBCowZY7AqBPibw5ptv2p133mlvvPFGr8408cQT28CBA6MYkCCYY445bPbZZ+9RGEhQvPzyy/bYY4/ZM888Y++//34UG1988YVJvEw11VSx3VlnndUWW2wxW3LJJW3uuec2nY8NAhBoPgGERvPngB5AAAK9IIDQ6AUkdoFAgwjcf//9dvjhh9vdd9/dqzOON954Numkk9oMM8xgM800ky2yyCK29tpr2/LLLx+FQlojb7/9tt18883x56GHHooiI20/fSZLxmyzzRbbW3PNNW211VazmWeeudrufA4BCDSIAEKjQaA5DQQgkI0AQiMbP46GQJ4EahUaleeWG9Wiiy5q22yzja2//vrRwlG+z3vvvWcXXXSRnXvuub22muh4uWbNN998tttuu9nWW29t00wzTXmzvIcABBpMAKHRYOCcDgIQqI8AQqM+bhwFgb4gkFVoJH2aa665bN9997WddtrJBgwYED/+6KOP7PLLL7eRI0dGt6lkX71ONtlkNv3000fXqO+++84+/vhj++STTyyEUNpNYmPhhRe2/fbbzzbddNN4TOmPvIEABBpKAKHRUNycDAIQqJcAQqNechwHgfwJpAkNuUctsMACtvTSS5dOKAHw/fff2+eff25vvfVWtE4o7iLZdMwqq6xiw4cPj25P+vyuu+6yww47zB588MFkN5tooolswQUXtDXWWCOeY5JJJrFvvvnG3n33XXv88cftkUcesTFjxpT2lyuV3KeOPvpoW3bZZUuf8wYCEGgsAYRGY3lzNghAoE4CCI06wXEYBPqAQJrQUHD29ttvb0cddVTpjBIaieXhhRdesBtuuCHGXMgKkWxTTz217bXXXnbooYfGLFbnnXeeHXTQQTGzVLLPoEGDooVi8803j1mmks8lYtSuXKwuvfRS+/TTT5M/xRiNYcOGRYtJ6UPeQAACDSWQt9CQ+ZINAhCAQO4Evv7663DiiSfKPyIMHTo0uMtE7uegQQhAoHcE7rvvvjB48OD4fdR3Uj8uNIK7QVVtwFPhBg/qDmuttVaX43Ssx1MET18bPvzww3DggQeO83d3gQqe6Sq17Z9++inccccdYbnllutynKe/DXvuuWf44YcfUo/jQwhAoO8JeLa4MGTIkDDjjDOGU045JfMJ+6kFv2mwQQACEMiVABaNXHHSGAQyEahm0dhjjz3s1FNPrdq20tKefvrpdsQRR5gLhNJ+6667rvmDBJN14w9/+IP5gqT0N73ZZJNN4mdzzjlnl8+TX+SW9de//jWm3E0+06syUCkwXMHnbBCAQOMJ5G3RQGg0fg45IwQ6ggBCoyOmmUG2CIF6hYYK/J199tm2zz77dCn2p3iKESNG2EILLWRnnnlmdKNyS0SJxvzzz2/bbbedrbfeeqYAcqXKLd/knqUYjfI4Df1dNTtUr0PF/dggAIHGE0BoNJ45Z4QABOoggNCoAxqHQKCPCNQrNBKLhmpwlDtAJBYNBXxfdtllMR7jgw8+KPVemaRmmWUWW2GFFWyJJZYwCQ8V/VOhPqWwpSJ4CRVvIFAoAgiNQk0HnYEABKoRQGhUI8PnEGg8gXqEhqwZjz76qB133HF24403dum06mmcdtppUTQ8+eSTcZ/rrrvOyq0ayQHKOCUrhTJcqWaGLBz6Pak2PuWUUya78goBCDSZAEKjyRPA6SEAgd4RQGj0jhN7QaARBNKEhtyTPFFDTE2b9EFWiyS97euvvx6zTl177bUx3W2yj+Iy9t577+guJcuEvuu33HKLnXDCCfbYY491ieVIjkleZemYfPLJo9iQlUPWjmWWWSYWA5TbFBsEINBcAgiN5vLn7BCAQC8JIDR6CYrdINAAAmlCQzUxFGNRXrdCAd9JettXXnkl1tH49ttvSz2UsFAdDdW7WH755UufK03tbbfdZhdffHG0gpS7UZV2Snkj0aGK4xtuuKFttNFGNs8886TsxUcQgECjCCA0GkWa80AAApkIIDQy4eNgCORKIE1o1HoCWSPk9qTA8J133jlW+y5vQ4Lk+eefj3U3Hn744VglXNmlvvzyy/LdUt8rnkPuWGp37rnnTt2HDyEAgb4ngNDoe8acAQIQyIEAQiMHiDQBgZwIZBUairNYeOGFTQX4lLpW8RXVNq+hY3K78nz89txzz9mrr75qb7/9dqw0LkuHLCZpmwLFd911V/vd734X0+am7cNnEIBA3xJAaPQtX1qHAARyIoDQyAkkzUAgBwK1CA1ZLiaaaCKbaqqpYrC3YicUyK1UtSuvvLJNMcUUve6RRMX7778frRsvvfRSrAquyuASIO+999447cgdS25Zq6+++jh/4wMIQKDvCSA0+p4xZ4AABHIggNDIASJNQCAnAmlCQzEaiy++eBQPlaeZeOKJY02LmWaayfSj2AlZHCRCkk3xHJ988ol99NFHyUfxdbLJJrPpppvOvPJ4l8/1y+effx7dq+688067+uqr7YknnugSPK5zDRs2LKbLHedgPoAABPqcAEKjzxFzAghAIA8CCI08KNIGBPIhkCY0JAR6qgze3dllrbj11lvtiiuu6LLbIossYptttlm37lWqz3HJJZfEon/vvPNO6Xi5aO211152/PHHlz7jDQQg0DgCeQsNFeBhgwAEIJA7AffTDieeeGLw22PwFJrh448/zv0cNAgBCPSOwH333RcGDx4cv4/6TurHhUbYd999e9dAyl4uNMLIkSODWzm6tOtZrIKnu005outHLn7Cqquu2uVYz0IVDjvssK478hsEINAwAh5bFYYMGRJmnHHGcMopp2Q+L0IjM0IagAAE0gggNNKo8BkEmkOgL4SGRuLpbIPHcHQRC+7+FDzOotuHC+52Fe64446w3HLLdTl2zjnnDOecc05zIHFWCEAgIDS4CCAAgZYggNBoiWmikx1CoK+ERppVQhYOj/0IZ511VvCMU8ELAHah7G6V4emnnw6eJjcMHDiwi9Dw4n3h5ptv7rI/v0AAAo0jkLfQ6KeuN87zizNBAAKdQoAYjU6ZacbZCgT6IkZD4x47dqxdcMEFdtppp3XJIqXCfqq54e5appgNZa7q37+/ffPNNzZmzBh75JFH7J577rEPP/ywhE/F+7baais75JBDbPbZZy99zhsIQKBxBPKO0UBoNG7uOBMEOooAQqOjppvBFpxAXwkNDVsVxEeNGhWDuz0WqwsJZalSgLdbLmzAgAGm+4L2Ua2N8k3pdH/5y19GkSFxUp7dqnw/3kMAAn1LAKHRt3xpHQIQyIkAQiMnkDQDgRwI9KXQkGOEivOdccYZdv3110crRS3OErJkLL300rbLLrvYxhtvHGt45DBkmoAABOoggNCoAxqHQAACjSeA0Gg8c84IgWoE+lJo6Jw//vhjrI9x44032oMPPmijR4+2d999t0uNjMq+qd7GoEGDbKWVVrI111zTPFuVSXSwQQACzSOA0Ggee84MAQjUQAChUQMsdoVAHxN47bXX7KabbjIPzi6dSQX7VlxxRdtwww1Ln2V9oxgMVQC/9957Y/VvFfRTkT79qMCfhMSUU04Zf1Scz4O/o8CYZpppsp6a4yEAgRwIIDRygEgTEIBA3xNAaPQ9Y84AgaISkIXjq6++ilXDFZPx6aefRqvHVFNNZRIV+pHoUNA4GwQgUBwCCI3izAU9gQAEuiGA0OgGDn+CAAQgAAEIFJAAQqOAk0KXIACBcQkgNMZlwicQgAAEIACBIhNAaBR5dugbBCBQIoDQKKHgDQQgAAEIQKAlCCA0WmKa6CQEIIDQ4BqAAAQgAAEItBYBhEZrzRe9hUDHEkBodOzUM3AIQAACEGhRAgiNFp04ug2BTiOA0Oi0GWe8EIAABCDQ6gQQGq0+g/QfAh1CAKHRIRPNMCEAAQhAoG0IIDTaZioZCATamwBCo73nl9FBAAIQgED7EUBotN+cMiIItCUBhEZbTiuDggAEIACBNiaA0GjjyWVoEGgnAgiNdppNxgIBCEAAAp1AAKHRCbPMGCHQBgQQGm0wiQwBAhCAAAQ6igBCo6Omm8FCoHUJIDRad+7asecfffSRjR492nRdLrXUUjbzzDO34zAZU44Evv32W/vggw/s008/tWmmmSZeM/369ct8hrFjx9p7771nk002mc0wwww28cQT2/PPP2/PPPOMDRo0yJZYYonM56ABCNRLAKFRLzmOgwAEGkoAodFQ3JysGwLff/+93XrrrXbKKafYnHPOaYcddpjNM8883RxR/U8//fSTffXVV/b111/HBaIWi+OPP371A/hLyxJ455137KqrrrL77rvP1lhjDdtxxx0zz7Wun1tuucXOP/98W2ihhWyLLbaweeed12644YZ4fS655JJ20EEHIYRb9qpp/Y7nLTQssEEAAhDoAwK+EAsnnnhi8NtuGDp0aPj444/74Cw0CYGeCbzwwgth++23DwsssEA455xzwg8//NDzQVX2+Pzzz8O1114b9t1333DBBReETz75pMqefNzqBJ577rmw1VZbxXvYLrvsEr777rvMQ9K198c//jG2ufLKKwcXMbHNV199Nfzud78LiyyySLyuXBxnPhcNQKAeAm5ZC0OGDAkzzjhj8Icz9TTR5RiERhcc/AIBCORFAKGRF0nayULgiy++CGeddVaYY4454qJRC7os2/vvvx/233//uFDcdNNNw5tvvpmlOY4tMIFGCg0Ji7///e/BrRxxkffiiy8WmAxda2cCCI12nl3GBoE2IoDQaKPJbOGhPPXUU2GTTTYJs88+exg1alRw15VMo0FoZMLXUgc3UmgIzEsvvRQtb+7eF84888zw448/thQvOtseBBAa7TGPjAICbU8AodH2U1z4AXowb3RDmWWWWcLqq68eHnnkkap91hPlb775pke3qnqFhgSOzpHVJSZpp5r7lxancvGp9Ty9HX9VgD38Qf1Sn7tbPOvv6ns9YjDhUuu4k27r3LpeyrnWKjR6w17tp7lOqR+6Z0oMTz311OE3v/lNeOutt5Lu8QqBhhHIW2j0U89bP3SFEUAAAkUjQDB40Wak8/rjbk120kknmcdS2A477GAjRoywySefvATC4ytitp+XX37ZlAlIWYaUAWjgwIExWFwZgKabbrq4/7vvvmtPP/20vf322zFwV8G7yyyzjG2zzTY27bTTmrtmxWxB/fv3L7Xvi2bzxaJ5jIh9+OGHpvNNMMEENv3009uss85q888/f8w6VDrg/97ou6Nj/Al37IeyZHmMUzy/PhswYIAtt9xy8Xgd4otr01j//e9/25gxY2KWJAWou4+1LbzwwnE/HVO51TL+ymPTftd43eUn9kNB94sttpj95z//sWeffdbEz+NbIn+3LtmCCy5os802myWMfFEf93FXN5t00knj33S89h1vvPHSTlc6tla+SWNffvmluSudvfLKKzG7lPo3ySSTxHN6rEQM+D/hhBPssssuM4/RsDPOOMMmnHDC5PD4Wit7FyPm1grbe++9zWM07Nhjj7UVV1yx1OYdd9xhhxxySDy3khZsvvnmpb/xBgKNIEAweMM0HSeCAASyEMCikYUex+ZB4Pbbbw8uBqLblC8SuzSp2IrTTz89Wjp84R98YR7jLvTqwiEMHjw4nHzyyeG1116Lx3nWqrDKKqsEXxyHKaaYIu7ri9LggiHI1cUXjsHFSukcChK/8cYbw8477xx8wRzbVNsuZGJ/Vl111TB8+PCgp4flT9HVgKwmRx99dGzXF53h9ddfDyNHjgwrrLBCcKEUXHiE6667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pxqREBACLYAAOTWGDx/uI5lxxhkzMyIRjcxMhToiBGpCgJwa77//vifum2mmmWq6tzcvFtHoTXSbX7eIRvPnQD0QAkJACJRFIMboQsFII41U9vNmnHzppZfcvvv666/35scaa6yw6667euKvZvRHbQoBIVA9AllcU/71r3/5moIGlzLmmGP6mkKCUpX8IyCikf851AiEgBAQAg1D4IMPPginnHJKOOOMM8Jvv/0WBgwYEPbZZx9PKNiwTqghISAEWgaBDz/8sLCm/Prrr6F///6+puy8884tM8Z2HoiIRjvPvsYuBISAEKgRAQQBMg1feuml4ZtvvgnzzjtvWH/99cMss8xSY026XAgIASEQQrKmXHbZZeHrr78O88wzj68ps846q+BpAQRENFpgEjUEISAEhEAjEUAw+Oyzz8J3330XiMk/0UQTNbJ5tSUEhECLIZCsKYThJXcQEbH69OnTYqNsz+GIaLTnvGvUQkAICAEhIASEgBAQAkKgVxEQ0ehVeFW5EBACQkAICAEhIASEgBBoTwRENNpz3jVqISAEhIAQEAJCQAgIASHQqwiIaPQqvKpcCAgBISAEhIAQEAJCQAi0JwIiGu057xq1EBACQkAICAEhIASEgBDoVQRENHoVXlUuBISAEBACQkAICAEhIATaEwERjfacd41aCAgBISAEhIAQEAJCQAj0KgIiGr0KryoXAkJACAgBISAEhIAQEALtiYCIRnvOu0YtBISAEBACQkAICAEhIAR6FQERjV6FV5ULASEgBISAEBACQkAICIH2REBEoz3nXaMWAkJACAgBISAEhIAQEAK9ioCIRq/Cq8qFgBAQAkJACAgBISAEhEB7IiCi0Z7zrlELASEgBISAEBACQkAICIFeRUBEo1fhVeVCQAgIASEgBISAEBACQqA9ERDRaM9516iFQMMQ+P3338Nvv/3WsPbUkBBoNwT69OkTRh55ZH+1w9i1prTDLGuMzUSgnmuKiEYzZ1JtC4EWR2D48OHh4YcfDryrCAEh0DsIjDTSSGHgwIFhqaWWCpNMMknvNJKRWj/44ANfU95///2M9EjdEAKth0Cypiy55JJh0kkn7dEARTR6BJ9uFgJCoBICaDGuueaacOCBB4b33nuv0mU6LwSEQA8RYPdxvvnmC4ccckhYY401elhbdm9nTbnuuuvC/vvvrzUlu9OknrUA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RX1qNQRENEQ0Wu2Z1niai4CIRnPxV+tCQAhUiYCIRpVA6TIh0AMERDRENHrw+OhWIdABARGNDpDohBAQAllEQEQji7OiPrUaAiIaIhqt9kxrPM1FQESjufirdSEgBKpEQESjSqB0mRDoAQIiGiIaPXh8dKsQ6ICAiEYHSHRCCAiBLCIgopHFWVGfWg0BEQ0RjVZ7pjWe5iIgotFc/NW6EBACVSIgolElULpMCPQAARENEY0ePD66VQh0QEBEowMkOiEEhEAWEcg70fjqq6/CCy+8EBjHfPPNF/r165dFmNWnNkdARCM/RENrSpt/WXMyfBGNnEyUuikE2h2BPBONX3/9Ndx9993hpJNOCtNMM0046KCDwvTTT9/uU9rr4//jjz/Cjz/+GP773/+GMcYYI4wzzjhh5JFH7vV289yAiEY+iIbWlOZ8y7Sm1I57vYlGiCpCQAgIgV5AwITFePzxx0db5uIWW2wRv/76615opXeqfP311+OgQYPiTDPNFM8555z422+/9U5DqrUIge+++y7efPPNcc8994wXXXRR/Oabb4o+1z8dEXjppZfieuutF6eYYop48sknd7yghc7Y5kU84YQTfE3ZfPPNo2kIcjM6rSnNmSqtKbXjbpsXcYMNNoiTTz55tM222isouUNEowQQ/SsEhEB9EMgr0fj+++/jWWedFQcMGBA32WST+M4779QHENXSJQKffPJJHDJkiAuSCM/vv/9+l/e0+wUiGtl/ArSmNG+OtKbUjr2IRu2Y6Q4hIASagEBeicaLL74Y11133di/f/84dOjQaKr3JqDXnk1KKKh93kU0ases0XdoTWk04n+2pzXlTyyqPRLRqBYpXScEhEBTEcgj0fj555/dZGfKKaeMyy+/fHzqqac6xfD333+Pv/zySzT7606vq/QhJIZ7u3s/9dIHTLt4r1T4nH52hzQlfWyE+Vh3hYKezAPY//TTT7k1jxPRqPTUZ+O81pSO86A1pSMmWTpTb6LRh8HV7iqiO4SAEBACnSOQR2dwM9UJZgMezD8gbL311uGYY44J4447btFAGdd7770X3nzzzfDZZ5+F//znP2GUUUYJE088cZhuuunCbLPNFiaaqLKDqgn8Yfjw4cFstsPnn38ezA/B75900knDVFNNFWacccYw2WSTFbXJPW+88UZ49dVX3Tl9rrnmCl988UV4+eWXw0cffRTMDtn7aVqYMOuss4app546JO288sorfo2Zb4Sxxx7bP+N+rh1ppJG8HRPUw1tvvRVMaPW2Z599dnfIxinQhP/w7bffhtFHHz2YH0CYdtppwwwzzNABl3QfidA199xzd7iGxugH4wBD8Jp33nnDp59+6m1/8MEH4bbbbvPXQgstFMwOP/Tt2zeYGVuYZ555vA8JMEYQAvNFXdzPPOA4bnbFgf6D45hjjplcXvQO5q+99pqP+csvvwwmDLrz+YQTTuhO/7PMMkuYZJJJiu7J6j8mFIQjjzwyPPbYY2GvvfYKgwcPzmpXe9wvI4TBtIxhn3328WfjtNNO6/S71uMG61CB1hStKQQSydOaImfwLNE+9UUICIGKCORRo3HvvfdGE3DdbOqMM87oMDacT6+//vq42WabRSMUcYIJJoh9+vSJRjSiEYW4zDLLuAO8Cfcd7uUEzs2333573G677aIJ+9GE6GjCcbQIS97msssuG4844ojIjlJag8B9OOVZBKy42267xUceeSTut99+0YT0aATH66AvCyywQDzssMOiCd9+zV//+lfvp5El93ugHSMi0QS1yE54UnCyxemd+vFLufLKK71++mikKRohiUZSohGMuPbaa8fzzz8/on1Il3Qft91224q+Lfi8mDDsbe27776Rti3Cl2NnBCmON9543texxhorGvHy63bfffdohKDQnJGKeOedd8btt98+GqkozANYcs9GG23kTuUWwapwT3KA38ff/vY311gxZ9xj8qS/Mx9LL710PPHEE+O7776b3JLpd2k0Mj09UWuK1pS8rSnSaNRhh0FVCAEh0PsI5E2jYer8cOmllwZzRvZdexPYw2qrrVYAyqJmhVtuuSWYo7hrEsy8yrUH7IITkhWNwLBhw3xnfNNNNw277rqr15NUwI77P//5z2AEJjz//POuOZhzzjl9x95IRTAB3HfnRx111LD66quHHXbYISy44IJ+O22feuqp4aijjgpGJnzXHW0Gmgu0H9yP5oJzaBOMsIQffvjB/2dnH60A16BFYQcczYaRkLD33nuH8ccf33OFsFNsgr9rK9CsoHFAMzNw4EC/Hi0AWhX6iVbDhPxgpKSgfUn3cc0113TNkEXtSoZfeKcONEWXXHJJ2GabbXyH2mzYg5EXr5t2eaGZ4H7C3BqBczzoKxqRu+66KxhZCOy8GTny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\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 1,
"metadata": {
"image/png": {
"width": 400
}
},
"output_type": "execute_result"
}
],
"source": [
"from IPython.display import Image\n",
"Image('./centralized.png', width=400)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"from __future__ import print_function\n",
"import argparse\n",
"import torch\n",
"import torch.nn as nn\n",
"import torch.nn.functional as F\n",
"import torch.optim as optim\n",
"from torchvision import datasets, transforms"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"class Net(nn.Module):\n",
" def __init__(self):\n",
" super(Net, self).__init__()\n",
" self.conv1 = nn.Conv2d(1, 10, kernel_size=5)\n",
" self.conv2 = nn.Conv2d(10, 20, kernel_size=5)\n",
" self.conv2_drop = nn.Dropout2d()\n",
" self.fc1 = nn.Linear(320, 50)\n",
" self.fc2 = nn.Linear(50, 10)\n",
"\n",
" def forward(self, x):\n",
" x = F.relu(F.max_pool2d(self.conv1(x), 2))\n",
" x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))\n",
" x = x.view(-1, 320)\n",
" x = F.relu(self.fc1(x))\n",
" x = F.dropout(x, training=self.training)\n",
" x = self.fc2(x)\n",
" return F.log_softmax(x, dim=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Depends on serialization of torch.Device objects: https://github.com/pytorch/pytorch/pull/7713"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"from types import SimpleNamespace\n",
"args = SimpleNamespace(batch_size=64, test_batch_size=1000,\n",
" epochs=2, lr=0.01, momentum=0.5,\n",
" no_cuda=True, seed=42, log_interval=80)\n",
" \n",
"use_cuda = not args.no_cuda and torch.cuda.is_available()\n",
"\n",
"torch.manual_seed(args.seed)\n",
"\n",
"kwargs = {'num_workers': 1, 'pin_memory': True} if use_cuda else {}\n",
"train_loader = torch.utils.data.DataLoader(\n",
" datasets.MNIST('../data', train=True, download=True,\n",
" transform=transforms.Compose([\n",
" transforms.ToTensor(),\n",
" transforms.Normalize((0.1307,), (0.3081,))\n",
" ])),\n",
" batch_size=args.batch_size, shuffle=True, **kwargs)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/Users/ssievert/Developer/mrocklin/distributed/distributed/__init__.py\n"
]
},
{
"data": {
"text/html": [
"<table style=\"border: 2px solid white;\">\n",
"<tr>\n",
"<td style=\"vertical-align: top; border: 0px solid white\">\n",
"<h3>Client</h3>\n",
"<ul>\n",
" <li><b>Scheduler: </b>tcp://127.0.0.1:49717\n",
" <li><b>Dashboard: </b><a href='http://127.0.0.1:8787/status' target='_blank'>http://127.0.0.1:8787/status</a>\n",
"</ul>\n",
"</td>\n",
"<td style=\"vertical-align: top; border: 0px solid white\">\n",
"<h3>Cluster</h3>\n",
"<ul>\n",
" <li><b>Workers: </b>8</li>\n",
" <li><b>Cores: </b>8</li>\n",
" <li><b>Memory: </b>17.18 GB</li>\n",
"</ul>\n",
"</td>\n",
"</tr>\n",
"</table>"
],
"text/plain": [
"<Client: scheduler='tcp://127.0.0.1:49717' processes=8 cores=8>"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from distributed import Client\n",
"import distributed as d\n",
"print(d.__file__)\n",
"client = Client()\n",
"client"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This next cell is *almost* copy and pasted. It takes in a `(data, target)` pair instead of `train_loader`, does not do anything with the optimizer."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def train(model, device, data, target):\n",
" model.train()\n",
" \n",
" data, target = data.to(device), target.to(device)\n",
" # optimizer.zero_grad()\n",
" output = model(data)\n",
" loss = F.nll_loss(output, target)\n",
" loss.backward()\n",
" # optimizer.step()\n",
" return model"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"from time import sleep\n",
"import copy\n",
"\n",
"def clone(model):\n",
" return copy.deepcopy(model)\n",
"\n",
"def test_clone_no_modification():\n",
" model = Net()\n",
" m2 = clone(model)\n",
"\n",
" m2_params = dict(m2.named_parameters())\n",
" for name, param in model.named_parameters():\n",
" param = param.detach()\n",
" param.data += 1\n",
" assert (m2_params[name].data != param.data).all()\n",
" \n",
"test_clone_no_modification()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's the definition of our actor. It sends out models, and receives gradients."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"class PS:\n",
" def __init__(self, model, num_workers=1):\n",
" self.models = {0: model}\n",
" self._grads = {}\n",
" self.model = model\n",
" self.optimizer = optim.SGD(self.model.parameters(), lr=args.lr, momentum=args.momentum)\n",
" self.num_workers = num_workers\n",
" \n",
" def pull(self, key):\n",
" \"\"\"\n",
" For a worker to pull a model from this PS\n",
" \"\"\"\n",
" if key not in self.models:\n",
" return None\n",
" return self.models[key]\n",
" \n",
" def pull_latest(self):\n",
" key = max(self.models)\n",
" return key, self.pull(key)\n",
" \n",
" def push(self, key, grads):\n",
" \"\"\"\n",
" For a worker to push some gradients to this PS\n",
" \"\"\"\n",
" if key not in self._grads:\n",
" self._grads[key] = []\n",
" self._grads[key] += [grads]\n",
" \n",
" # have we collected enough gradients?\n",
" if len(self._grads[key]) == self.num_workers:\n",
" old_model = clone(self.model)\n",
" self.aggregate(self._grads[key])\n",
" self.models[key + 1] = self.model\n",
" self.models[key] = old_model\n",
" \n",
" def aggregate(self, grads):\n",
" for name, param in self.model.named_parameters():\n",
" worker_grads = [grad[name] for grad in grads]\n",
" param.grad = sum(worker_grads)\n",
" self.optimizer.step()\n",
" self.optimizer.zero_grad()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"import itertools\n",
"from time import sleep, time\n",
"import toolz\n",
"import numpy as np\n",
"\n",
"def worker(ps, device, train_loader,\n",
" worker_id=0, num_workers=1,\n",
" iters=5):\n",
" meta = {'comm_model': 0, 'compute_grad': 0, 'comm_grad': 0}\n",
" step_start, _model = ps.pull_latest().result()\n",
" whole_start = time()\n",
" params = [np.prod(tuple(p.size())) for p in _model.parameters()]\n",
" \n",
" for step in range(step_start, step_start + iters):\n",
" start = time()\n",
" while _model is None:\n",
" _model = ps.pull(key=step).result()\n",
" sleep(1e-4)\n",
" meta['comm_model'] += time() - start\n",
" model, _model = _model, None\n",
" \n",
" param_check = toolz.last(model.parameters())\n",
" check = param_check.detach().numpy().flat[:4]\n",
" print(\"worker {} iter {}, last params = {}\".format(worker_id, step, check))\n",
" \n",
" data, target = next(iter(train_loader))\n",
" start = time()\n",
" model = train(model, device, data, target)\n",
" grads = {name: p.grad.data for name, p in model.named_parameters()}\n",
" meta['compute_grad'] += time() - start\n",
" \n",
" start = time()\n",
" ps.push(step, grads)\n",
" meta['comm_grad'] += time() - start\n",
" meta = {k: v / iters for k, v in meta.items()}\n",
" meta['avg_step_time'] = (time() - whole_start) / iters\n",
" meta['params'] = sum(params)\n",
" return meta"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Actor: PS, key=PS-362f3f6b-5654-4665-ad6a-79f69aa95d59>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"device = torch.device(\"cuda\" if use_cuda else \"cpu\")\n",
"model = Net().to(device)\n",
"num_workers = 4\n",
"\n",
"model = client.scatter(model)\n",
"train_loader = client.scatter(train_loader)\n",
"\n",
"ps = client.gather(client.submit(PS, model, num_workers=num_workers,\n",
" actor=True))\n",
"ps"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Here's calling the train function. This can be called repeated times, since the function `worker` gets the latest model to start."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"futures = [client.submit(worker, ps, device, train_loader,\n",
" worker_id=i, num_workers=num_workers)\n",
" for i in range(num_workers)]\n",
"meta = client.gather(futures)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>avg_step_time</th>\n",
" <th>comm_grad</th>\n",
" <th>comm_model</th>\n",
" <th>compute_grad</th>\n",
" <th>params</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.334983</td>\n",
" <td>0.000134</td>\n",
" <td>0.259987</td>\n",
" <td>0.054862</td>\n",
" <td>21840</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.245956</td>\n",
" <td>0.000338</td>\n",
" <td>0.175483</td>\n",
" <td>0.054756</td>\n",
" <td>21840</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.112934</td>\n",
" <td>0.000140</td>\n",
" <td>0.035176</td>\n",
" <td>0.063261</td>\n",
" <td>21840</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.113489</td>\n",
" <td>0.000145</td>\n",
" <td>0.043078</td>\n",
" <td>0.055989</td>\n",
" <td>21840</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" avg_step_time comm_grad comm_model compute_grad params\n",
"0 0.334983 0.000134 0.259987 0.054862 21840\n",
"1 0.245956 0.000338 0.175483 0.054756 21840\n",
"2 0.112934 0.000140 0.035176 0.063261 21840\n",
"3 0.113489 0.000145 0.043078 0.055989 21840"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"df = pd.DataFrame(meta)\n",
"df"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x1245cc470>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEfCAYAAABBHLFTAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xt0VeWd//H3l3CJFhoQMrOsYANTRgUSAiSAY0ZuVbCKgKLgBfFSqVpsa8cby8JQrLPQdsqIFxQrKlYGKAwlS+mgFmi1BUwoGSBQEDRKxN8MAl64RJPw/f1xNunxcEL2SU5yAn5ea53F3vt59rOfA5pP9u15zN0RERFpkeoOiIhI86BAEBERQIEgIiIBBYKIiAAKBBERCSgQREQEUCCIiEhAgSAiIoACQUREAi1T3YFEdOrUybOyslLdDRGRk8qGDRs+cvfMuuqdVIGQlZVFcXFxqrshInJSMbP3wtTTJSMREQEUCCIiElAgiIgIcJLdQxCRplVZWUl5eTkVFRWp7oqEkJ6eTufOnWnVqlW99lcgiEitysvLadeuHVlZWZhZqrsjJ+Du7Nu3j/Lycrp27VqvNnTJSERqVVFRQceOHRUGJwEzo2PHjg06m1MgiMgJKQxOHg39twoVCGY2wsy2m9lOM7s/TvmPzWyrmW0ys9+b2Tejyiaa2dvBZ2LU9n5mtjloc7bpvzoRkZSq8x6CmaUBTwAXAeVAkZkVuvvWqGobgTx3P2xmtwOPAOPM7AzgX4E8wIENwb4HgDnAJGAdsAIYAfwueV9N6pJ1/yup7kKdymZemuouSJRk/zejf9/mJcwZQn9gp7u/4+5fAAuBUdEV3H21ux8OVtcBnYPl4cBr7r4/CIHXgBFmdibwdXdf6+4OzAdGJ+H7iIg0yJo1a/jzn/+c1DbLyspYsGBBzXpxcTE/+MEPknqMZAgTCGcBu6PWy4NttbmFv/2mX9u+ZwXLdbZpZpPMrNjMivfu3RuiuyIi9dcUgZCXl8fs2bOTeoxkCBMI8a7te9yKZtcTuTz08zr2Dd2mu8919zx3z8vMrHNsJhE5BY0ePZp+/frRs2dP5s6dy5w5c7j33ntryp9//nnuvPNOAB588EHOPfdcLrroIq655hp+8Ytf1Nru7Nmz6dGjBzk5OYwfP56ysjKeeuopZs2aRW5uLm+88QZ79+7lyiuvJD8/n/z8fP70pz8BMH36dCZMmMDQoUPp3r07zzzzTK3Huf/++3njjTfIzc1l1qxZrFmzhssuu6ymnYkTJ3LxxReTlZXFf/3Xf3HvvfeSnZ3NiBEjqKysBGDDhg0MGjSIfv36MXz4cD788MMG/73GCvMeQjnQJWq9M7AntpKZfRt4ABjk7p9H7Ts4Zt81wfbOMduPa1NEBGDevHmcccYZHDlyhPz8fH7/+99zwQUX8MgjjwCwaNEiHnjgAYqLi1m6dCkbN26kqqqKvn370q9fv1rbnTlzJu+++y5t2rTh448/pn379tx22220bduWu+++G4Brr72Wu+66i4KCAt5//32GDx/Otm3bANi0aRPr1q3j0KFD9OnTh0svvZRvfOMbcY/zi1/8gpdffhmInIVE27VrF6tXr2br1q2cf/75LF26lEceeYQxY8bwyiuvcOmll3LnnXeyfPlyMjMza77vvHnzkvHXWyNMIBQB3c2sK/ABMB64NrqCmfUBngZGuPv/RRWtBP7NzDoE6xcDU9x9v5l9ZmYDgfXADcBjDfsqInKqmj17NsuWLQNg9+7dvPvuu3Tr1o1169bRvXt3tm/fzgUXXMCjjz7KqFGjOO200wAYOXLkCdvNycnhuuuuY/To0YweHf825uuvv87WrX97hubTTz/ls88+A6g51mmnncaQIUN46623am3nRC655BJatWpFdnY21dXVjBgxAoDs7GzKysrYvn07W7Zs4aKLLgKgurqaM888M+Hj1KXOQHD3KjObTOSHexowz91LzWwGUOzuhUQuEbUFfhM8Pfq+u18e/OB/kEioAMxw9/3B8u3A88BpRO456AkjETnOmjVreP3111m7di2nn346gwcPpqKignHjxrF48WLOPfdcxowZg5kReUYlvFdeeYU//vGPFBYW8uCDD1JaWnpcnaNHj7J27dqakIkW+7R8fZ+eb9OmDQAtWrSgVatWNe20aNGCqqoq3J2ePXuydu3aerUfVqihK9x9BZFHQ6O3TYta/vYJ9p0HHHde4+7FQK/QPRWRlEvFY6KffPIJHTp04PTTT+evf/0r69atA+CKK67goYce4pvf/CYPP/wwAAUFBXzve99jypQpVFVV8corr3DrrbfGbffo0aPs3r2bIUOGUFBQwIIFCzh48CDt2rXj008/ral38cUX8/jjj3PP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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"show = df.groupby('params').mean()\n",
"show.plot.bar()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Display the source blob
Display the rendered blob
Raw
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment