|
19 | 19 | { |
20 | 20 | "cell_type": "code", |
21 | 21 | "execution_count": null, |
22 | | - "metadata": { |
23 | | - "collapsed": false, |
24 | | - "jupyter": { |
25 | | - "outputs_hidden": false |
26 | | - } |
27 | | - }, |
| 22 | + "metadata": {}, |
28 | 23 | "outputs": [], |
29 | 24 | "source": [ |
30 | 25 | "import socket\n", |
|
40 | 35 | "metadata": {}, |
41 | 36 | "source": [ |
42 | 37 | "For this demo, I will connect to a cluster with engines started with MPI.\n", |
43 | | - "If you have MPI and mpi4py on your machine, you can start a local cluster with MPI with:\n", |
44 | 38 | "\n", |
45 | | - " ipcluster start -n 8 --engines=MPI --profile mpi" |
| 39 | + "One way to do so would be:\n", |
| 40 | + "\n", |
| 41 | + " ipcluster start -n 64 --engines=MPI --profile mpi\n", |
| 42 | + " \n", |
| 43 | + "In this directory is a docker-compose file to simulate multiple engine sets in " |
46 | 44 | ] |
47 | 45 | }, |
48 | 46 | { |
49 | 47 | "cell_type": "code", |
50 | 48 | "execution_count": null, |
51 | | - "metadata": { |
52 | | - "collapsed": false, |
53 | | - "jupyter": { |
54 | | - "outputs_hidden": false |
55 | | - } |
56 | | - }, |
| 49 | + "metadata": {}, |
57 | 50 | "outputs": [], |
58 | 51 | "source": [ |
59 | | - "mpi_profile = 'mpi'\n", |
60 | | - "rc = ipp.Client(profile=mpi_profile)\n", |
61 | | - "eall = rc[:]\n", |
62 | | - "root = rc[-1]" |
| 52 | + "rc = ipp.Client(profile=\"mpi\")\n", |
| 53 | + "rc.wait_for_engines(32)\n", |
| 54 | + "eall = rc.broadcast_view(coalescing=True)\n", |
| 55 | + "root = rc[0]" |
63 | 56 | ] |
64 | 57 | }, |
65 | 58 | { |
66 | 59 | "cell_type": "code", |
67 | 60 | "execution_count": null, |
68 | | - "metadata": { |
69 | | - "collapsed": false, |
70 | | - "jupyter": { |
71 | | - "outputs_hidden": false |
72 | | - } |
73 | | - }, |
| 61 | + "metadata": {}, |
| 62 | + "outputs": [], |
| 63 | + "source": [ |
| 64 | + "rc.ids" |
| 65 | + ] |
| 66 | + }, |
| 67 | + { |
| 68 | + "cell_type": "code", |
| 69 | + "execution_count": null, |
| 70 | + "metadata": {}, |
| 71 | + "outputs": [], |
| 72 | + "source": [ |
| 73 | + "root['a'] = 5" |
| 74 | + ] |
| 75 | + }, |
| 76 | + { |
| 77 | + "cell_type": "code", |
| 78 | + "execution_count": null, |
| 79 | + "metadata": {}, |
74 | 80 | "outputs": [], |
75 | 81 | "source": [ |
76 | 82 | "%px from mpi4py.MPI import COMM_WORLD as MPI" |
|
79 | 85 | { |
80 | 86 | "cell_type": "code", |
81 | 87 | "execution_count": null, |
82 | | - "metadata": { |
83 | | - "collapsed": false, |
84 | | - "jupyter": { |
85 | | - "outputs_hidden": false |
86 | | - } |
87 | | - }, |
| 88 | + "metadata": {}, |
88 | 89 | "outputs": [], |
89 | 90 | "source": [ |
90 | 91 | "mpi_ranks = eall.apply_async(lambda : MPI.Get_rank()).get_dict()\n", |
|
95 | 96 | { |
96 | 97 | "cell_type": "code", |
97 | 98 | "execution_count": null, |
98 | | - "metadata": { |
99 | | - "collapsed": false, |
100 | | - "jupyter": { |
101 | | - "outputs_hidden": false |
102 | | - } |
103 | | - }, |
| 99 | + "metadata": {}, |
104 | 100 | "outputs": [], |
105 | 101 | "source": [ |
106 | | - "sz = 1024\n", |
| 102 | + "sz = 512\n", |
107 | 103 | "data = np.random.random((sz, sz))\n", |
108 | | - "data = data.dot(data.T)" |
| 104 | + "data.nbytes // (1024 * 1024)" |
109 | 105 | ] |
110 | 106 | }, |
111 | 107 | { |
112 | 108 | "cell_type": "code", |
113 | 109 | "execution_count": null, |
114 | | - "metadata": { |
115 | | - "collapsed": false, |
116 | | - "jupyter": { |
117 | | - "outputs_hidden": false |
118 | | - } |
119 | | - }, |
| 110 | + "metadata": {}, |
120 | 111 | "outputs": [], |
121 | 112 | "source": [ |
122 | 113 | "%%time \n", |
123 | 114 | "ar = eall.push({'data': data}, block=False)\n", |
124 | | - "ar.wait_interactive()" |
| 115 | + "ar.wait_interactive()\n" |
125 | 116 | ] |
126 | 117 | }, |
127 | 118 | { |
128 | 119 | "cell_type": "code", |
129 | 120 | "execution_count": null, |
130 | | - "metadata": { |
131 | | - "collapsed": false, |
132 | | - "jupyter": { |
133 | | - "outputs_hidden": false |
134 | | - } |
135 | | - }, |
| 121 | + "metadata": {}, |
136 | 122 | "outputs": [], |
137 | 123 | "source": [ |
138 | 124 | "@ipp.interactive\n", |
|
156 | 142 | { |
157 | 143 | "cell_type": "code", |
158 | 144 | "execution_count": null, |
159 | | - "metadata": { |
160 | | - "collapsed": false, |
161 | | - "jupyter": { |
162 | | - "outputs_hidden": false |
163 | | - } |
164 | | - }, |
| 145 | + "metadata": {}, |
165 | 146 | "outputs": [], |
166 | 147 | "source": [ |
167 | 148 | "%%time\n", |
|
172 | 153 | { |
173 | 154 | "cell_type": "code", |
174 | 155 | "execution_count": null, |
175 | | - "metadata": { |
176 | | - "collapsed": false, |
177 | | - "jupyter": { |
178 | | - "outputs_hidden": false |
179 | | - } |
180 | | - }, |
| 156 | + "metadata": {}, |
181 | 157 | "outputs": [], |
182 | 158 | "source": [ |
183 | | - "eall.apply_sync(np.linalg.norm, parallel.Reference('data'), 2)" |
| 159 | + "%%px\n", |
| 160 | + "import numpy as np\n", |
| 161 | + "np.linalg.norm(data, 2)\n" |
184 | 162 | ] |
185 | | - }, |
186 | | - { |
187 | | - "cell_type": "code", |
188 | | - "execution_count": null, |
189 | | - "metadata": {}, |
190 | | - "outputs": [], |
191 | | - "source": [] |
192 | 163 | } |
193 | 164 | ], |
194 | 165 | "metadata": { |
|
0 commit comments