<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sat, Mar 22, 2014 at 6:47 AM, Doug Blank <span dir="ltr"><<a href="mailto:doug.blank@gmail.com" target="_blank">doug.blank@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Fri, Mar 21, 2014 at 12:10 PM, Min RK <<a href="mailto:benjaminrk@gmail.com">benjaminrk@gmail.com</a>> wrote:<br>


><br>
>> On Mar 21, 2014, at 5:36, Doug Blank <<a href="mailto:doug.blank@gmail.com">doug.blank@gmail.com</a>> wrote:<br>
>><br>
>>> On Thu, Mar 20, 2014 at 4:06 PM, Doug Blank <<a href="mailto:doug.blank@gmail.com">doug.blank@gmail.com</a>> wrote:<br>
>>>> On Thu, Mar 20, 2014 at 2:19 PM, MinRK <<a href="mailto:benjaminrk@gmail.com">benjaminrk@gmail.com</a>> wrote:<br>
>>>><br>
>>>><br>
>>>><br>
>>>>> On Thu, Mar 20, 2014 at 10:58 AM, Doug Blank <<a href="mailto:doug.blank@gmail.com">doug.blank@gmail.com</a>> wrote:<br>
>>>>><br>
>>>>> After reading:<br>
>>>>><br>
>>>>> <a href="http://ipython.org/ipython-doc/dev/parallel/parallel_intro.html" target="_blank">http://ipython.org/ipython-doc/dev/parallel/parallel_intro.html</a><br>
>>>>><br>
>>>>> and related pages, I am unsure what the relationship between parallel<br>
>>>>> processing and kernels are. Can external kernels be used in a parallel<br>
>>>>> environment? Or is this part of IPython python-kernel specific? Does<br>
>>>>> it use ZMQ messages?<br>
>>>><br>
>>>><br>
>>>> Depends what you mean by 'external'. You can start engines at any time on<br>
>>>> any machine, and they can join a cluster.  Yes, IPython.parallel uses zmq.<br>
>>><br>
>>> If I wanted to explore using a cluster of 3rd-party kernels, such as<br>
>>> IHaskell or ICalico, in a parallel environment, where would I begin?<br>
>>> Has anyone done this before?<br>
>>><br>
>>> I see here:<br>
>>><br>
>>> <a href="http://ipython.org/ipython-doc/dev/parallel/magics.html#engines-as-kernels" target="_blank">http://ipython.org/ipython-doc/dev/parallel/magics.html#engines-as-kernels</a><br>
>>><br>
>>> that kernels connect to a controller to create an engine. If the<br>
>>> standard ipcontrollers can start up external kernels, I guess a place<br>
>>> to begin might be implementing what the %px magic does?<br>
>><br>
>> Along with those general questions, a specific one:<br>
>><br>
>> I would have thought that "ipcluster start --profile calico" would<br>
>> have used my c.KernelManager.kernel_cmd to start my kernels, but I<br>
>> can't get ipcluster to use it. Likewise, if I use the "Cluster" tab in<br>
>> the notebook to start a cluster, I also don't get my kernel.<br>
>><br>
>> How to start a cluster of third-party kernels?<br>
><br>
> It's not that simple. KernelManagers are not used in ipcluster. Normally, all engines are started manually (ipcluster is basically: for i in range(n): ipengine).  If you want to turn your kernel into an engine, you are going to have to teach it about the ipcontroller connection files, and connecting instead of binding.<br>


<br>
</div></div>First, the idea of allowing non-Python kernels to be able to easily<br>
become parallelized is a fantastic possibility! There are many<br>
languages/systems that could benefit from this.<br>
<br>
I have gone through the anatomy of the communication between a hub,<br>
engines, and a notebook here:<br>
<br>
<a href="http://wiki.roboteducation.org/IPython_Parallel_API" target="_blank">http://wiki.roboteducation.org/IPython_Parallel_API</a><br>
<br>
(corrections of misunderstandings welcome). Two questions:<br>
<br>
1) In addition to adding the ipcontroller communications needed, it<br>
appears that pickling and eval are used to execute remote code (even<br>
though pack/unpack settings in ipcontroller_*.py files are marked as<br>
"json"). Of course, this won't work for non-Python kernels. Could a<br>
real json representation be used for values, getting rid of the need<br>
for pickle?<br></blockquote><div><br></div><div>JSON *is* used for message serialization. However, the main message used in IPython.parallel is `apply`, which sends native functions and data, and thus uses native serialization (pickle on Python). There are no plans to change this. Code-as-text execution (%px, view.execute), however, uses the same execute_request message that is used for execution in the notebook, etc., and should work fine on a non-Python kernel.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
2) Knowing that "Full, integrated support for non-Python kernels" is a<br>
line item in the 3.0 roadmap [1], and this is mentioned in<br>
IPython/parallel/engine/engine.py:<br>
<br>
# FIXME: This is a hack until IPKernelApp and IPEngineApp can be fully merged<br>
app = IPKernelApp(parent=self, shell=self.kernel.shell,<br>
kernel=self.kernel, log=self.log)<br>
<br>
is there a chance that Kernels and Engines will be merged this year<br>
so that parallel processing for non-Python kernels would be possible?<br></blockquote><div><br></div><div>Yes, this is my hope.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<br>
Thanks for any additional information!<br>
<br>
-Doug<br>
<br>
[1] - <a href="https://hackpad.com/IPython-Winter-2014-Development-Meeting-fKrExqKCWmC" target="_blank">https://hackpad.com/IPython-Winter-2014-Development-Meeting-fKrExqKCWmC</a><br>
<div class="HOEnZb"><div class="h5"><br>
><br>
>><br>
>> -Doug<br>
>><br>
>>> -Doug<br>
>>><br>
>>>> -MinRK<br>
>>>><br>
>>>>><br>
>>>>><br>
>>>>> Thanks for any additional data,<br>
>>>>><br>
>>>>> -Doug<br>
>>>>> _______________________________________________<br>
>>>>> IPython-dev mailing list<br>
>>>>> <a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
>>>>> <a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
>>>><br>
>>>><br>
>>>><br>
>>>> _______________________________________________<br>
>>>> IPython-dev mailing list<br>
>>>> <a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
>>>> <a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
>>>><br>
>> _______________________________________________<br>
>> IPython-dev mailing list<br>
>> <a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
>> <a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
> _______________________________________________<br>
> IPython-dev mailing list<br>
> <a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
> <a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
_______________________________________________<br>
IPython-dev mailing list<br>
<a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
</div></div></blockquote></div><br></div></div>