当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Julia Distributed.addprocs用法及代码示例


用法一

addprocs(manager::ClusterManager; kwargs...) -> List of process identifiers

通过指定的集群管理器启动工作进程。

例如,通过 ClusterManagers.jl 包中实现的自定义集群管理器支持 Beowulf 集群。

新启动的工作进程等待从主进程建立连接的秒数可以通过工作进程环境中的变量JULIA_WORKER_TIMEOUT 指定。仅在使用 TCP/IP 作为传输时相关。

要在不阻塞 REPL 的情况下启动工作程序,或者如果以编程方式启动工作程序,则要启动包含函数,请在其自己的任务中执行 addprocs

例子

# On busy clusters, call `addprocs` asynchronously
t = @async addprocs(...)
# Utilize workers as and when they come online
if nprocs() > 1   # Ensure at least one new worker is available
   ....   # perform distributed execution
end
# Retrieve newly launched worker IDs, or any error messages
if istaskdone(t)   # Check if `addprocs` has completed to ensure `fetch` doesn't block
    if nworkers() == N
        new_pids = fetch(t)
    else
        fetch(t)
    end
end

用法二

addprocs(machines; tunnel=false, sshflags=``, max_parallel=10, kwargs...) -> List of process identifiers

通过 SSH 在远程机器上添加进程。请参阅exename 以设置远程计算机上julia 安装的路径。

machines 是机器规格的向量。为每个规格启动工人。

机器规范是字符串 machine_spec 或元组 - (machine_spec, count)

machine_spec 是格式为 [user@]host[:port] [bind_addr[:port]] 的字符串。 user 默认为当前用户,port 为标准 ssh 端口。如果指定了[bind_addr[:port]],其他worker会在指定的bind_addrport连接到这个worker。

count 是要在指定主机上启动的工作人员数量。如果指定为:auto,它将启动与特定主机上的 CPU 线程数一样多的工作程序。

关键字参数:

  • tunnel :如果 true 则 SSH 隧道将用于从主进程连接到工作进程。默认为 false

  • multiplex :如果 true 则 SSH 多路复用用于 SSH 隧道。默认为 false

  • ssh :用于启动工作程序的 SSH 客户端可执行文件的名称或路径。默认为 "ssh"

  • sshflags :指定其他 ssh 选项,例如sshflags=`-i /home/foo/bar.pem`

  • max_parallel :指定主机上并行连接的最大工作线程数。默认为 10。

  • shell :指定 ssh 连接到 worker 的 shell 类型。

    • shell=:posix:POSIX 兼容的 Unix/Linux shell(bash、sh 等)。默认。

    • shell=:wincmd:微软视窗cmd.exe

  • dir :指定workers的工作目录。默认为主机的当前目录(由 pwd() 找到)

  • enable_threaded_blas :如果 true 则 BLAS 将在添加的进程中的多个线程上运行。默认为 false

  • exenamejulia 可执行文件的名称。默认为 "$(Sys.BINDIR)/julia""$(Sys.BINDIR)/julia-debug" 视情况而定。

  • exeflags :传递给工作进程的附加标志。

  • topology :指定工作人员如何相互连接。在未连接的工作人员之间发送消息会导致错误。

    • topology=:all_to_all :所有进程相互连接。默认。

    • topology=:master_worker :只有驱动进程,即pid 1 连接到工作进程。工作人员不相互连接。

    • topology=:custom:集群管理器的launch方法通过WorkerConfig中的identconnect_idents字段指定连接拓扑。具有集群管理器身份 ident 的工作人员将连接到 connect_idents 中指定的所有工作人员。

  • lazy :仅适用于 topology=:all_to_all 。如果 true , worker-worker 连接是惰性设置的,即它们是在工作人员之间远程调用的第一个实例中设置的。默认为真。

  • env :提供一个字符串对数组,例如 env=["JULIA_DEPOT_PATH"=>"/depot"] 以请求在远程计算机上设置环境变量。默认情况下,只有环境变量JULIA_WORKER_TIMEOUT 会自动从本地环境传递到远程环境。

  • cmdline_cookie :通过 --worker 命令行选项传递身份验证 cookie。通过 ssh stdio 传递 cookie 的(更安全的)默认行为可能会与使用较旧(ConPTY 之前)Julia 或 Windows 版本的 Windows 工作人员挂起,在这种情况下,cmdline_cookie=true 提供了一种解决方法。

Julia 1.6

在 Julia 1.6 中添加了关键字参数 sshshellenvcmdline_cookie

环境变量:

如果 master 进程在 60.0 秒内未能与新启动的 worker 建立连接,则 worker 将其视为致命情况并终止。这个超时可以通过环境变量 JULIA_WORKER_TIMEOUT 来控制。主进程上JULIA_WORKER_TIMEOUT 的值指定新启动的工作人员等待连接建立的秒数。

用法三

addprocs(; kwargs...) -> List of process identifiers

相当于addprocs(Sys.CPU_THREADS; kwargs...)

请注意,worker 不会运行 .julia/config/startup.jl 启动脚本,也不会将其全局状态(例如全局变量、新方法定义和加载的模块)与任何其他正在运行的进程同步。

用法四

addprocs(np::Integer; restrict=true, kwargs...) -> List of process identifiers

使用内置的 LocalManager 启动工作程序,它只在本地主机上启动工作程序。这可用于利用多个内核。 addprocs(4) 将在本地机器上添加 4 个进程。如果 restricttrue ,则绑定仅限于 127.0.0.1 。关键字参数 direxenameexeflagstopologylazyenable_threaded_blas 具有与 addprocs(machines) 记录的相同效果。

相关用法


注:本文由纯净天空筛选整理自julialang.org 大神的英文原创作品 Distributed.addprocs — Function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。