Parallel processing ipythonjupyter中的Julia并行计算
我正在准备一个在Ipython的小演示,我想展示在Julia中执行并行操作是多么容易 这基本上是一个蒙特卡罗Pi计算 问题是我不能让它在IPython(Jupyter)笔记本中并行工作,它只使用一个 我从朱莉娅开始是:Parallel processing ipythonjupyter中的Julia并行计算,parallel-processing,ipython-notebook,julia,jupyter,Parallel Processing,Ipython Notebook,Julia,Jupyter,我正在准备一个在Ipython的小演示,我想展示在Julia中执行并行操作是多么容易 这基本上是一个蒙特卡罗Pi计算 问题是我不能让它在IPython(Jupyter)笔记本中并行工作,它只使用一个 我从朱莉娅开始是:Julia-p4 如果我在REPL中定义函数并在那里运行它,它就可以正常工作 @everywhere function compute_pi(N::Int) """ Compute pi with a Monte Carlo simulation of N dart
Julia-p4
如果我在REPL中定义函数并在那里运行它,它就可以正常工作
@everywhere function compute_pi(N::Int)
"""
Compute pi with a Monte Carlo simulation of N darts thrown in [-1,1]^2
Returns estimate of pi
"""
n_landed_in_circle = 0
for i = 1:N
x = rand() * 2 - 1 # uniformly distributed number on x-axis
y = rand() * 2 - 1 # uniformly distributed number on y-axis
r2 = x*x + y*y # radius squared, in radial coordinates
if r2 < 1.0
n_landed_in_circle += 1
end
end
return n_landed_in_circle / N * 4.0
end
但当我这样做的时候:
using IJulia
notebook()
试着在笔记本内做同样的事情,它只使用一个核心:
In [5]: @time parallel_pi_computation(int(10e8))
elapsed time: 10.277870808 seconds (219188 bytes allocated)
Out[5]: 3.141679988
那么,为什么Jupyter不使用所有的内核呢?我能做些什么使它工作
谢谢。解决这个问题的一个方法是创建一个始终使用4个内核的内核。为此,需要一些手工工作。我假设您在unix计算机上 在文件夹
~/.ipython/kernels/julia-0.x
中,您将找到以下kernel.json
文件:
{
"display_name": "Julia 0.3.9",
"argv": [
"/usr/local/Cellar/julia/0.3.9_1/bin/julia",
"-i",
"-F",
"/Users/ch/.julia/v0.3/IJulia/src/kernel.jl",
"{connection_file}"
],
"language": "julia"
}
{
"display_name": "Julia 0.3.9 p4",
"argv": [
"/usr/local/Cellar/julia/0.3.9_1/bin/julia",
"-p",
"4",
"-i",
"-F",
"/Users/ch/.julia/v0.3/IJulia/src/kernel.jl",
"{connection_file}"
],
"language": "julia"
}
如果复制整个文件夹cp-r julia-0.x julia-0.x-p4
,并修改新复制的kernel.json
文件:
{
"display_name": "Julia 0.3.9",
"argv": [
"/usr/local/Cellar/julia/0.3.9_1/bin/julia",
"-i",
"-F",
"/Users/ch/.julia/v0.3/IJulia/src/kernel.jl",
"{connection_file}"
],
"language": "julia"
}
{
"display_name": "Julia 0.3.9 p4",
"argv": [
"/usr/local/Cellar/julia/0.3.9_1/bin/julia",
"-p",
"4",
"-i",
"-F",
"/Users/ch/.julia/v0.3/IJulia/src/kernel.jl",
"{connection_file}"
],
"language": "julia"
}
对你来说,路径可能会有所不同。请注意,我只给内核起了一个新名称,并添加了命令行参数“-p4”
您应该会看到一个名为julia0.3.9p4的新内核,它应该始终使用4个内核
还请注意,当您更新
IJulia
时,此内核文件不会得到更新,因此每当您使用addprocs(4)更新julia
或IJulia
时,必须手动更新它
作为笔记本电脑中的第一个命令,应该提供四个工作线程,用于从笔记本电脑中执行并行操作。您是否尝试修改相应的kernel.json
文件并在那里添加-p
开关?如果笔记本电脑中首先发出addprocs(4)
,会发生什么情况?@rickhg12hs,我认为这应该行得通,如果是的话,这是一个比我丑陋的内核文件破解更好的解决方案。@rickhg12hs谢谢。它工作得很好。我将把我的评论转换成一个答案,让其他人更容易找到它。谢谢你的答案。我没有尝试过这个,但我认为这可以找到一个更持久的解决方案@rickhg12hs解决方案目前运行良好。当我已经在Jupyter上进行Julia课程时。。。有没有命令可以告诉我已经启用了多少进程?@skan有一个procs()
函数返回所有进程的ID。如果在使用-p4
启动julia后调用它,将得到一个长度为5的数组:一个是主进程,另外四个是-p
请求的工作进程。