當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。