use*_*310 20 parallel-processing for-loop julia
我遇到了以下问题:
我有一个名为TrainModel的函数,它在一个线程上运行很长时间.当它完成计算时,它返回一个函数作为输出参数,让我们称之为f.当我询问这个f的类型时,朱莉娅回归:
(1种方法的通用功能)
(我不确定这最后一条信息对于阅读此内容的人有用)
现在,在第二步中,我需要在非常大的值数组上应用函数f.这是我想要并行化的一个步骤.已经启动了具有多个流程的Julia,例如
julia -p 4
Run Code Online (Sandbox Code Playgroud)
理想情况下,我会使用:
pmap(f, my_values)
Run Code Online (Sandbox Code Playgroud)
也许:
aux = @parallel (hcat) for ii=1:100000000
f(my_values[ii])
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.朱莉娅抱怨工人不知道功能f,即我得到一个消息:
错误:过程2中未定义函数f
我怎样才能使功能˚F提供给所有工人呢?显然,一个"脏"的解决方案是对所有工人运行耗时的函数TrainModel,这可能是:
@everywhere f = TrainModel( ... )
Run Code Online (Sandbox Code Playgroud)
但是当我想要的只是结果f可供所有工作人员使用时,这将浪费cpu .
虽然我搜索了类似问题的帖子,但到目前为止我找不到答案......
提前致谢!最好,
N.
返回函数的方法看起来很优雅,但不幸的是,与 JavaScript 不同,Julia 在创建函数时不会解析所有变量。从技术上讲,您的训练函数可以生成函数的源代码,其中包含所有训练参数的文字值。然后将其传递给每个工作进程,工作进程可以在其环境中将其解析为可调用函数。
我建议返回一个数据结构,其中包含生成训练函数的所有信息:ANN 的权重、支持向量、决策规则...在工作进程上定义一个“训练”函数,以便它将利用训练过的函数参数。无论如何,您可能希望能够将训练结果保存到磁盘,以便您可以轻松地重新生成计算。
| 归档时间: |
|
| 查看次数: |
1431 次 |
| 最近记录: |