[IPython-dev] ipython on the sun grid engine

Brian Granger ellisonbg.net at gmail.com
Sun Mar 22 02:06:54 EDT 2009


Ondrej,

Very nice.  Can you just run the controller on the head node (that you
use to submit the job)?  It is odd that one of the ssh trys failed.
Usually we start the controller on the head node and then run the
engines using the queue.  But on some systems, this is bad I think.

As for the ugly output [3], it is definitely a pretty print thing, but
I don't know where it is coming from.  It could be from sage (maybe
they have a custom ipython config file).

But, this look great.  Were you able to connect to the running cluster
using a client on your laptop, or was the client on the head node?

Great!

Brian

On Sat, Mar 21, 2009 at 10:38 PM, Ondrej Certik <ondrej at certik.cz> wrote:
> Hi,
>
> so I made it run.
>
> 1. install SPD using this howto:
>
> http://code.google.com/p/qsnake/wiki/SPD
>
> 2. create ex9.sge (adjust the path to spd):
>
> $ cat ex9.sge
> #/bin/bash
> #$ -cwd
> #$ -pe Common.pe 40
> NUM_WORKER=$(($NSLOTS - 1))
> MASTER=$(head -n 1 $TMP/machines)
> WORKERS=$(tail -n $NUM_WORKER $TMP/machines)
> echo "My Master nodes:"
> echo $MASTER
> echo "My Worker nodes:"
> echo $WORKERS
> {
> ssh $MASTER '~/spd/spd-0.3/spd -python ~/spd/spd-0.3/local/bin/ipcontroller' &
> sleep 3
> for x in $WORKERS; do
>    ssh $x '~/spd/spd-0.3/spd -python ~/spd/spd-0.3/local/bin/ipengine' &
> done
> } > runlog.txt
> wait
>
>
> 3. submit the job:
>
> $ qsub ex9.sge
>
> 4. connect to the ipcontroller:
>
> $ ./spd
> ----------------------------------------------------------------------
> | Source Python Distribution, Version 0.3, Release Date: 2009-03-21  |
> | Type notebook() for the GUI, and license() for information.        |
> ----------------------------------------------------------------------
> In [1]: from IPython.kernel import client
> In [2]: mec = client.MultiEngineClient()
> In [3]: mec.get_ids()
> Out[3]:
> [0,
>  1,
>  2,
>  3,
>  4,
>  5,
>  6,
>  7,
>  8,
>  9,
>  10,
>  11,
>  12,
>  13,
>  14,
>  15,
>  16,
>  17,
>  18,
>  19,
>  20,
>  21,
>  22,
>  23,
>  24,
>  25,
>  26,
>  27,
>  28,
>  29,
>  30,
>  31,
>  32,
>  33,
>  34,
>  35,
>  36,
>  37]
> In [8]: print mec.get_ids()
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
> 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
> 37]
> In [9]: mec.activate()
> In [10]: mec.block=True
> In [11]: %px import numpy
> Parallel execution on engines: all
> Out[11]:
> <Results List>
> [0] In [1]: import numpy
> [1] In [1]: import numpy
> [2] In [1]: import numpy
> [3] In [1]: import numpy
> [4] In [1]: import numpy
> [5] In [1]: import numpy
> [6] In [1]: import numpy
> [7] In [1]: import numpy
> [8] In [1]: import numpy
> [9] In [1]: import numpy
> [10] In [1]: import numpy
> [11] In [1]: import numpy
> [12] In [1]: import numpy
> [13] In [1]: import numpy
> [14] In [1]: import numpy
> [15] In [1]: import numpy
> [16] In [1]: import numpy
> [17] In [1]: import numpy
> [18] In [1]: import numpy
> [19] In [1]: import numpy
> [20] In [1]: import numpy
> [21] In [1]: import numpy
> [22] In [1]: import numpy
> [23] In [1]: import numpy
> [24] In [1]: import numpy
> [25] In [1]: import numpy
> [26] In [1]: import numpy
> [27] In [1]: import numpy
> [28] In [1]: import numpy
> [29] In [1]: import numpy
> [30] In [1]: import numpy
> [31] In [1]: import numpy
> [32] In [1]: import numpy
> [33] In [1]: import numpy
> [34] In [1]: import numpy
> [35] In [1]: import numpy
> [36] In [1]: import numpy
> [37] In [1]: import numpy
>
> In [12]: %px a = numpy.random.rand(2,2)
> Parallel execution on engines: all
> Out[12]:
> <Results List>
> [0] In [2]: a = numpy.random.rand(2,2)
> [1] In [2]: a = numpy.random.rand(2,2)
> [2] In [2]: a = numpy.random.rand(2,2)
> [3] In [2]: a = numpy.random.rand(2,2)
> [4] In [2]: a = numpy.random.rand(2,2)
> [5] In [2]: a = numpy.random.rand(2,2)
> [6] In [2]: a = numpy.random.rand(2,2)
> [7] In [2]: a = numpy.random.rand(2,2)
> [8] In [2]: a = numpy.random.rand(2,2)
> [9] In [2]: a = numpy.random.rand(2,2)
> [10] In [2]: a = numpy.random.rand(2,2)
> [11] In [2]: a = numpy.random.rand(2,2)
> [12] In [2]: a = numpy.random.rand(2,2)
> [13] In [2]: a = numpy.random.rand(2,2)
> [14] In [2]: a = numpy.random.rand(2,2)
> [15] In [2]: a = numpy.random.rand(2,2)
> [16] In [2]: a = numpy.random.rand(2,2)
> [17] In [2]: a = numpy.random.rand(2,2)
> [18] In [2]: a = numpy.random.rand(2,2)
> [19] In [2]: a = numpy.random.rand(2,2)
> [20] In [2]: a = numpy.random.rand(2,2)
> [21] In [2]: a = numpy.random.rand(2,2)
> [22] In [2]: a = numpy.random.rand(2,2)
> [23] In [2]: a = numpy.random.rand(2,2)
> [24] In [2]: a = numpy.random.rand(2,2)
> [25] In [2]: a = numpy.random.rand(2,2)
> [26] In [2]: a = numpy.random.rand(2,2)
> [27] In [2]: a = numpy.random.rand(2,2)
> [28] In [2]: a = numpy.random.rand(2,2)
> [29] In [2]: a = numpy.random.rand(2,2)
> [30] In [2]: a = numpy.random.rand(2,2)
> [31] In [2]: a = numpy.random.rand(2,2)
> [32] In [2]: a = numpy.random.rand(2,2)
> [33] In [2]: a = numpy.random.rand(2,2)
> [34] In [2]: a = numpy.random.rand(2,2)
> [35] In [2]: a = numpy.random.rand(2,2)
> [36] In [2]: a = numpy.random.rand(2,2)
> [37] In [2]: a = numpy.random.rand(2,2)
>
> In [13]: %px print numpy.linalg.eigvals(a)
> Parallel execution on engines: all
> Out[13]:
> <Results List>
> [0] In [3]: print numpy.linalg.eigvals(a)
> [0] Out[3]: [ 0.04392391  0.3245973 ]
>
> [1] In [3]: print numpy.linalg.eigvals(a)
> [1] Out[3]: [ 1.55163721  0.20437739]
>
> [2] In [3]: print numpy.linalg.eigvals(a)
> [2] Out[3]: [ 1.20045213  0.04814805]
>
> [3] In [3]: print numpy.linalg.eigvals(a)
> [3] Out[3]: [ 0.32003643  0.57111291]
>
> [4] In [3]: print numpy.linalg.eigvals(a)
> [4] Out[3]: [-0.19009279  0.99128112]
>
> [5] In [3]: print numpy.linalg.eigvals(a)
> [5] Out[3]: [ 1.03829332  0.36075953]
>
> [6] In [3]: print numpy.linalg.eigvals(a)
> [6] Out[3]: [-0.1517235   1.67516513]
>
> [7] In [3]: print numpy.linalg.eigvals(a)
> [7] Out[3]: [ 1.39960728 -0.28465163]
>
> [8] In [3]: print numpy.linalg.eigvals(a)
> [8] Out[3]: [ 1.17044538  0.36920544]
>
> [9] In [3]: print numpy.linalg.eigvals(a)
> [9] Out[3]: [ 1.29444925  0.03147179]
>
> [10] In [3]: print numpy.linalg.eigvals(a)
> [10] Out[3]: [ 1.06269256  0.00629928]
>
> [11] In [3]: print numpy.linalg.eigvals(a)
> [11] Out[3]: [ 0.1934025   0.04709656]
>
> [12] In [3]: print numpy.linalg.eigvals(a)
> [12] Out[3]: [-0.23157366  0.79206212]
>
> [13] In [3]: print numpy.linalg.eigvals(a)
> [13] Out[3]: [ 0.87736399  0.36763171]
>
> [14] In [3]: print numpy.linalg.eigvals(a)
> [14] Out[3]: [ 0.75825399  0.42571366]
>
> [15] In [3]: print numpy.linalg.eigvals(a)
> [15] Out[3]: [ 0.83819298 -0.33422046]
>
> [16] In [3]: print numpy.linalg.eigvals(a)
> [16] Out[3]: [ 0.05119763  1.25161191]
>
> [17] In [3]: print numpy.linalg.eigvals(a)
> [17] Out[3]: [ 0.6356765  -0.18668048]
>
> [18] In [3]: print numpy.linalg.eigvals(a)
> [18] Out[3]: [ 0.05417072  0.64346778]
>
> [19] In [3]: print numpy.linalg.eigvals(a)
> [19] Out[3]: [ 0.94357665  0.08495554]
>
> [20] In [3]: print numpy.linalg.eigvals(a)
> [20] Out[3]: [-0.20071214  1.44548662]
>
> [21] In [3]: print numpy.linalg.eigvals(a)
> [21] Out[3]: [ 1.20371805  0.17458575]
>
> [22] In [3]: print numpy.linalg.eigvals(a)
> [22] Out[3]: [ 1.47189454 -0.25060313]
>
> [23] In [3]: print numpy.linalg.eigvals(a)
> [23] Out[3]: [ 0.62675299  0.00833881]
>
> [24] In [3]: print numpy.linalg.eigvals(a)
> [24] Out[3]: [-0.61704795  0.86785185]
>
> [25] In [3]: print numpy.linalg.eigvals(a)
> [25] Out[3]: [ 0.51454737  1.09251881]
>
> [26] In [3]: print numpy.linalg.eigvals(a)
> [26] Out[3]: [ 1.0025157   0.37926302]
>
> [27] In [3]: print numpy.linalg.eigvals(a)
> [27] Out[3]: [ 0.07562955  0.69529292]
>
> [28] In [3]: print numpy.linalg.eigvals(a)
> [28] Out[3]: [ 0.70206288  0.09943419]
>
> [29] In [3]: print numpy.linalg.eigvals(a)
> [29] Out[3]: [-0.41140114  0.76592533]
>
> [30] In [3]: print numpy.linalg.eigvals(a)
> [30] Out[3]: [-0.41483813  0.66156836]
>
> [31] In [3]: print numpy.linalg.eigvals(a)
> [31] Out[3]: [ 0.06939694  0.82218779]
>
> [32] In [3]: print numpy.linalg.eigvals(a)
> [32] Out[3]: [-0.27583508  0.96545541]
>
> [33] In [3]: print numpy.linalg.eigvals(a)
> [33] Out[3]: [-0.07448614  0.95500699]
>
> [34] In [3]: print numpy.linalg.eigvals(a)
> [34] Out[3]: [ 0.57380518  1.01918719]
>
> [35] In [3]: print numpy.linalg.eigvals(a)
> [35] Out[3]: [ 0.90397042  0.06531227]
>
> [36] In [3]: print numpy.linalg.eigvals(a)
> [36] Out[3]: [ 0.89331523  0.58087954]
>
> [37] In [3]: print numpy.linalg.eigvals(a)
> [37] Out[3]: [ 0.69227186  1.25013097]
>
>
>
>
>
>
> Any idea, why the output [3] looks so ugly? Is it some pretty printing
> relict from Sage?
>
> the ssh command actually failed to connect to 1 node, as seen from the
> ex9.sge.e105489:
>
> Permission denied, please try again.
> Permission denied, please try again.
> Permission denied (publickey,gssapi-with-mic,password).
>
> so only 38 engines were registered (e.g. 1 node is for ipcontroller,
> 38 for engines and 1 failed = 40 nodes).
>
> This rocks!
>
> Ondrej
> _______________________________________________
> IPython-dev mailing list
> IPython-dev at scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-dev
>



More information about the IPython-dev mailing list