|
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