添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Oracle Roving Edge Infrastructure 是一個堅固耐用的雲端運算和儲存平台,適合在網路邊緣部署,或在有限或沒有外部連線的位置部署。隨著更大、更複雜且高要求的負載移轉至網路邊緣,這可能會對邊緣基礎架構帶來挑戰。

開放 MPI 是「訊息傳送介面 (MPI)」標準的實作,用於在高效能運算 (HPC) 中開發平行應用程式。開放式 MPI 可用於在相對較小的基礎架構中部署高效能運算和高平行工作負載,然後以較大、聚總的一組資源方式運作。此方法可用來將工作負載分配給 CPU 和其他運算資源 (例如 GPU),以便在網路邊緣部署大型、運算密集的工作,例如預測模型或其他人工智慧 / 機器學習 (AI/ML) 工作。

開放式 MPI 可用來在 Oracle Roving Edge Infrastructure 節點上利用資源部署平行工作負載。Netfilter 使用跨 Oracle Roving Edge Infrastructure 節點代管的叢集軟體,為 VM 執行處理提供必要的目的地網路位址轉譯 (DNAT) 和來源網路位址轉譯 (SNAT)。本教學課程在 Oracle Roving Edge Infrastructure 上使用 Netfilter 實作 Open MPI,以執行質數計算器來示範使用平行資源時的效能提升。

開啟的 MPI 可在單一 Oracle Roving Edge Infrastructure 節點內或多個 Oracle Roving Edge Infrastructure 節點間跨多個虛擬機器 (VM) 執行處理執行。在單一 Oracle Roving Edge Infrastructure 節點上執行是無縫接軌的,不會造成任何問題。跨多個 Oracle Roving Edge Infrastructure 節點執行時,請務必瞭解 Oracle Roving Edge Infrastructure VM 執行處理的網路,以及 Open MPI 如何遞送流量以避免可能發生的問題。

Oracle Roving Edge Infrastructure 虛擬機器執行處理上的網路

在 Oracle Roving Edge Infrastructure 上執行的虛擬機器執行處理會使用專用 IP 位址,與相同節點上代管之相同子網路上的其他 VM 執行處理進行通訊。您可以將公用 IP 位址指定給 Oracle Roving Edge Infrastructure 上代管的 VM 執行處理,以允許執行處理與其代管之 Oracle Roving Edge Infrastructure 節點外部執行的其他子網路和資源進行通訊。

注意: 公用 IP 位址會從公用 IP 位址集區指派給 VM 執行處理 VNIC。這些位址稱為 公用 IP 時,實際上是 Oracle Roving Edge Infrastructure 節點透過其 RJ-45 連接埠連線之相同區域網路上的 IP 位址。這些位址可以是可從網際網路連線的 IPv4 位址,也可以是區域網路之專用子網路上的位址。這些位址也稱為外部 IP 位址,因為它們可以連線到代管 VM 執行處理之節點外部的資源。

請務必瞭解在 Oracle Roving Edge Infrastructure 節點內執行的 VM 執行處理何時嘗試存取節點外部的資源,流量會通過外部 IP 位址 (在節點內路由並輸出至外部網路連線)。

VM 所使用的專用 IP 位址是由代管 Oracle Roving Edge Infrastructure 節點轉譯為從公用 IP 位址集區指派的公用 (外部) IP 位址。

網路流量會從代管 Oracle Roving Edge Infrastructure 節點上的 VM 執行處理傳輸至外部網路,這實際上是 1:1 網路位址轉譯 (NAT)。

VM 執行處理有公用 (外部) IP 位址,但 VM 執行處理本身絕不會看到該 IP 位址。

另一方面,使用其指定之公用 (外部) IP 位址的 VM 執行處理外部流量會移至代管的 Oracle Roving Edge Infrastructure 節點,此節點會將公用 (外部) IP 位址轉譯為目的地 VM 執行處理的關聯專用 IP 位址。

下列影像顯示 Oracle Roving Edge Infrastructure 節點上的 VM 執行處理範例,注意指定的公用 IP 位址和專用 IP 位址。

在多個 Oracle Roving Edge Infrastructure 節點執行開啟 MPI 時所面臨的挑戰

若透過多個 Oracle Roving Edge Infrastructure 節點實作使用 VM 執行處理專用 IP 位址,叢集軟體 (例如 Open MPI) 會有問題。每個節點都無法察覺公用 IP 位址對應,以及轉譯其他節點上代管之 VM 執行處理的對應。由於未共用對應,因此使用專用 IP 位址的封包路由不正確或遺失。

叢集軟體通常會檢查 VM 執行處理介面和 IP 位址,並將資訊註冊到軟體叢集中的其他節點。

VM 執行處理只會知道其專用 IP 位址,無法共用其指定的公用 IP 位址。

代管其他叢集成員的遠端 Oracle Roving Edge Infrastructure 節點也無法將非代管的 VM 執行處理專用 IP 位址轉譯為其個別的公用 IP 位址。

叢集化由不同 Oracle Roving Edge Infrastructure 節點代管的 VM 執行處理時,其公用 IP 位址的組態交換只能包含其專用 IP 位址。

  • 如果這些 VM 執行處理嘗試透過跨 Oracle Roving Edge Infrastructure 節點的專用 IP 位址進行通訊,則會將流量推送至外部網路,並可能被外部網路捨棄或路由不正確。
  • 外部網路不知道如何處理 10.0.200.12 ,或者可以在其他地方遞送,而不是在其他 Oracle Roving Edge Infrastructure 節點上代管的預期目的地 VM 執行處理。這是開啟的 MPI 通訊封包遺失的方式。

    請記住,在 Oracle Roving Edge Infrastructure 節點上代管的虛擬實例 IP 上, 10.0.200.12 是專用的,外部網路不知道如何將專用 IP 位址對應回 VM 實例。

    外部網路只知道將導向目的地 Oracle Roving Edge Infrastructure 節點的 10.123.123.99 ( vm-node-2 的公用 IP),然後會轉譯位址並將流量傳送至正確的 VM 執行處理。

    在 Oracle Roving Edge Infrastructure 導入開放式 MPI

    為了因應 Oracle Roving Edge Infrastructure 內部網路的非共用性質,Linux VM 執行處理上的 Netfilter 軟體可用來重寫來自其他 Oracle Roving Edge Infrastructure 節點上代管之 VM 的網路封包,並銷毀這些封包。

    在本教學課程中,會使用三個 Oracle Roving Edge Infrastructure Roving Edge Devices (RED) 節點來建立 Open MPI 叢集。所有 RED 都會連線至共用的外部網路。每個節點都已設定自己的外部 IP 集區,以配置給 VM 執行處理。

    RED 的外部網路仍然是 RFC1918 中的專用網路。

    每個 RED 都會設定一個 VCN。在此使用案例中,VCN 使用 10.0.0.0/16 的 CIDR。

    每個 RED 在將使用的子網路中都會有不同的 CIDR。使用不同的子網路 CIDR 可簡化設定,並確保不會在不同 RED 上的 VM 之間發生 IP 衝突。

    VCN 和子網路 CIDR 表格

    存取一或多個 Oracle Roving Edge Infrastructure 節點 webUI,本教學課程中的範例使用 3 個 Oracle Roving Edge Infrastructure 裝置 (RED)。

    Oracle Roving Edge Infrastructure 的使用者權限,可建立及啟動執行處理。如需詳細資訊,請參閱 Roving Edge Infrastructure 的運算權限

    在每個 Oracle Roving Edge Infrastructure 節點上設定虛擬雲端網路 (VCN)。如需詳細資訊,請參閱 建立 Roving Edge Infrastructure 裝置的 VCN

    在每個具有公用 IP 位址的 Oracle Roving Edge Infrastructure 節點上設定子網路。如需詳細資訊,請參閱 建立 Roving Edge Infrastructure 裝置的子網路

    瞭解如何將自訂運算映像檔匯入 Oracle Roving Edge Infrastructure。如需詳細資訊,請參閱 管理 OCI Compute 中的自訂映像檔 將自訂映像檔從儲存桶匯入至 Roving Edge Infrastructure 裝置

    設定在 Oracle Roving Edge Infrastructure 節點上執行的執行處理,並透過 SSH 存取這些節點,請參閱 建立 Roving Edge Infrastructure 裝置的執行處理

    對 Oracle Linux 的基本瞭解,可透過 SSH 連線至執行處理、使用 IP 表格、服務、編輯檔案、執行 Shell 命令檔、變更目錄、安裝軟體、使用套裝程式儲存區域以及使用代理主機伺服器。

    作業 1:建立虛擬機器執行處理

    在每個 RED 的每個子網路中建立 VM 執行處理。

    IP 位址指定範例:

    redvm3 輸入 src 10.123.123.32 SNAT to src 10.0.1.2 輸入 src 10.123.123.67 SNAT to src 10.0.2.2

    redvm1

    sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT -m comment --comment "Allow REDs public subnet access."
    sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.67 -j SNAT --to-source 10.0.2.2
    sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.101 -j SNAT --to-source 10.0.3.2
    sudo netfilter-persistent save
                

    redvm2

    sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT -m comment --comment "Allow REDs public subnet access."
    sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.32 -j SNAT --to-source 10.0.1.2
    sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.101 -j SNAT --to-source 10.0.3.2
    sudo netfilter-persistent save
                

    redvm3

    sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT -m comment --comment "Allow REDs public subnet access."
    sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.32 -j SNAT --to-source 10.0.1.2
    sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.67 -j SNAT --to-source 10.0.2.2
    sudo netfilter-persistent save
                  redvm3
                  輸出 dst 10.0.1.2 DNAT to dst 10.123.123.32
                  輸出 dst 10.0.2.2 DNAT to dst 10.123.123.67
                

    redvm1

    sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.2.2 -j DNAT --to-destination 10.123.123.67
    sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.3.2 -j DNAT --to-destination 10.123.123.101
    sudo netfilter-persistent save
                

    redvm2

    sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.1.2 -j DNAT --to-destination 10.123.123.32
    sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.3.2 -j DNAT --to-destination 10.123.123.101
    sudo netfilter-persistent save
                

    redvm3

    sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.1.2 -j DNAT --to-destination 10.123.123.32
    sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.2.2 -j DNAT --to-destination 10.123.123.67
    sudo netfilter-persistent save
        

    開啟的 MPI 將使用每個 VM 的專用 IP 位址,在每個開啟的 MPI VM 執行處理上,為每個 VM 執行處理和其專用 IP 位址建立 /etc/hosts 項目。

    例如,使用 redvm1/etc/hosts 項目上方的組態將包含下列項目:

    127.0.0.1 localhost
    127.0.1.1 redvm1  redvm1
    10.0.2.2  redvm2
    10.0.3.2  redvm3
        

    redvm2 上,/etc/hosts 將包含下列項目:

    127.0.0.1 localhost
    127.0.1.1 redvm2  redvm2
    10.0.1.2  redvm1
    10.0.3.2  redvm3
        

    redvm3 上,/etc/hosts 將包含下列項目:

    127.0.0.1 localhost
    127.0.1.1 redvm3  redvm3
    10.0.1.2  redvm1
    10.0.2.2  redvm2
        

    我們也必須確保每個 VM 之間都有 SSH 等化,才能使用 Open MPI。

    注意:此處的假設這些是未包含 Ubuntu 使用者現有 SSH 金鑰的新 VM。如果您使用的是已經建立 SSH 金鑰的舊版 VM,則必須遵循這些指示,這些指示可能會覆寫現有的金鑰並將您鎖定在 VM 上。

    redvm1 上,建立新的公用或私密金鑰組 (如果您尚未建立金鑰)。使用類似 ssh-keygen -b 4096 -t rsassh-keygen 指令 (接受預設值,請勿設定新金鑰的密碼)。這會產生 ~/.ssh/id_rsa~/.ssh/id_rsa.pub

    透過執行 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 或透過文字編輯器以手動方式複製,將新的公開金鑰新增至 authorized_keys 檔案。

    id_rsaid_rsa.pub 同時複製到 redvm2redvm3ubuntu 使用者 ~/.ssh 目錄。請確定將 id_rsa.pub 新增至 authorized_keys,並在 redvm2redvm3 上執行 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    完成此作業之後,請從每個 VM 連線至所有其他 VM (包括 VM 本身),以確保連線正常運作,而 SSH 可信任其他主機。

    redvm1 上的 SSH 連線。

    ubuntu@redvm1:~$ ssh redvm1 date
    The authenticity of host 'redvm1 (127.0.1.1)' can't be established.
    ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
    This key is not known by any other names
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added 'redvm1' (ED25519) to the list of known hosts.
    Fri Apr  5 04:28:57 UTC 2024
    ubuntu@redvm1:~$
    ubuntu@redvm1:~$ ssh redvm2 date
    The authenticity of host 'redvm2 (10.0.2.2)' can't be established.
    ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
    This key is not known by any other names
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added 'redvm2' (ED25519) to the list of known hosts.
    Wed Jan 31 04:29:11 UTC 2024
    ubuntu@redvm1:~$
    ubuntu@redvm1:~$ ssh redvm3 date
    The authenticity of host 'redvm3 (10.0.3.2)' can't be established.
    ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
    This key is not known by any other names
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added 'redvm3' (ED25519) to the list of known hosts.
    Wed Jan 31 04:29:19 UTC 2024
          

    注意:在理想情況下,所有使用 Open MPI 的 VM 執行處理都會有共用儲存體位置。這可以是 NFS、GlusterFS、OCFS2 或任何數目的其他共用檔案系統解決方案。如果工作負載需要通用工作目錄或資料集,此功能特別重要。

    此範例不需要共用檔案系統,只有一個位置具有測試二進位檔的通用名稱。在每個 VM 上,建立通用名稱位置 /mpitest

    sudo mkdir /mpitest && sudo chown ubuntu:ubuntu /mpitest
        

    如果使用共用檔案系統,共用檔案系統將會掛載至所有 VM 執行處理的這個位置。

    建立 hostfile 以與 mpirun 搭配使用。如需詳細資訊,請參閱如何使用 -hostfile 選項來 mpirun?

    我們將建立兩個用於測試的 hostfiles。在 redvm1 上,使用上面建立的常用名稱位置 /mpitest,建立含有下列內容的檔案 /mpitest/mpihosts.txt

    redvm1
    redvm2
    redvm3
            

    使用下列內容建立 /mpitest/mpihosts_slots.txt 檔案:

    redvm1 slots=1
    redvm2 slots=1
    redvm3 slots=1
      

    注意:在本教學課程中,測試只會從 redvm1 執行,因此我們不需要將這些檔案複製到 redvm2redvm3。如果您也想要從其他 VM 執行工作,則必須將這些檔案複製到其他 VM 執行處理,或使用適當的共用檔案系統,例如 NFS。

    作業 5:測試 VM 執行處理

    分散式命令的簡單測試。

    簡單測試就是在所有叢集成員上呼叫如 hostname 的命令。以下是 slots=1 (mpihosts_slots.txt) 檔案在三個節點間執行的預期輸出。slots 指令會通知 mpirun 可配置給此節點的程序數目,而不是 mpirun 決定程序數目。

    注意:如果您使用 CPU 以外的有限資源 (例如 GPU),而想要將處理作業限制在其他資源的數目,則可能需要指定 slots。若未這麼做,可能會導致處理作業因無法配置其他資源而失敗。

    ubuntu@redvm1:~$ cd /mpitest
    ubuntu@redvm1:/mpitest$ cat mpihosts_slots.txt
    redvm1 slots=1
    redvm2 slots=1
    redvm3 slots=1
    ubuntu@redvm1:/mpitest$ mpirun --hostfile mpihosts_slots.txt hostname
    redvm1
    redvm2
    redvm3
            

    執行相同的測試,但不指定 slots (mpihosts.txt) 檔案,mpirun 將會決定可用的 CPU,並在每個節點上執行 CPU hostname 命令的數目。這三個 VM 有 16 個 CPU,因此我們應該得到 3 x 16 個回應 (每個主機名稱的 16 個)。

    ubuntu@redvm1:/mpitest$ cat mpihosts.txt
    redvm1
    redvm2
    redvm3
    ubuntu@redvm1:/mpitest$ mpirun --hostfile mpihosts.txt hostname | sort | uniq -c
        16 redvm1
        16 redvm2
        16 redvm3
        

    建立 Open MPI 測試二進位 。

    為了對使用 Open MPI 的程式進行適當的測試,我們使用 John Burkardt 的質數計算器範例。這需要在 redvm1 上下載和編譯。如需詳細資訊,請參閱 Prime Number Calculator by John Burkardt

    ubuntu@redvm1:~$ cd /mpitest
    ubuntu@redvm1:/mpitest$ curl https://people.sc.fsu.edu/~jburkardt/c_src/prime_mpi/prime_mpi.c -o prime_mpi.c
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                    Dload  Upload   Total   Spent    Left  Speed
    100  4699  100  4699    0     0   2990      0  0:00:01  0:00:01 --:--:--  2991
    ubuntu@redvm1:/mpitest$ mpicc prime_mpi.c -o prime_mpi
    ubuntu@redvm1:/mpitest$ ls -l prime_mpi
    -rwxrwxr-x 1 ubuntu ubuntu 16736 Apr  5 05:38 prime_mpi
        

    由於未設定要測試的共用檔案系統,因此必須將 prime_mpi 二進位檔案複製到 redvm2redvm3 (位於與 redvm1 相同的位置)。執行下列命令。

    ubuntu@redvm1:/mpitest$ scp prime_mpi redvm2:/mpitest
    prime_mpi                                                                                                                     100%   16KB  27.4MB/s   00:00
    ubuntu@redvm1:/mpitest$ scp prime_mpi redvm3:/mpitest
    prime_mpi                                                                                                                     100%   16KB  28.3MB/s   00:00
        

    若要比較基準,請獨立執行 Open MPI 二進位。針對基準或比較,在不開啟 MPI 的情況下執行 prime_mpi

    ubuntu@redvm1:/mpitest$ ./prime_mpi
    31 January 2024 06:08:17 AM
    PRIME_MPI
      C/MPI version
      An MPI example program to count the number of primes.
      The number of processes is 1
            N        Pi          Time
            1         0        0.000003
            2         1        0.000000
            4         2        0.000000
            8         4        0.000000
            16         6        0.000000
            32        11        0.000001
            64        18        0.000002
          128        31        0.000022
          256        54        0.000019
          512        97        0.000066
          1024       172        0.000231
          2048       309        0.000810
          4096       564        0.002846
          8192      1028        0.010093
        16384      1900        0.037234
        32768      3512        0.137078
        65536      6542        0.515210
        131072     12251        1.932970
        262144     23000        7.243419
    PRIME_MPI - Master process:
      Normal end of execution.
    31 January 2024 06:08:27 AM
          

    注意:處理作業數目為 1,完成時間大約需要 10 秒。

    使用 Open MPI 的分散式執行。使用 mpihosts.txt 檔案,在三個 VM 執行處理上的所有可用 CPU 執行 prime_mpi (含開啟 MPI)。

    ubuntu@redvm1:/mpitest$ mpirun --hostfile mpihosts.txt ./prime_mpi
    31 January 2024 06:09:02 AM
    PRIME_MPI
      C/MPI version
      An MPI example program to count the number of primes.
      The number of processes is 48
            N        Pi          Time
            1         0        0.020740
            2         1        0.000428
            4         2        0.000331
            8         4        0.000392
            16         6        0.000269
            32        11        0.000295
            64        18        0.000374
          128        31        0.000390
          256        54        0.000380
          512        97        0.000331
          1024       172        0.000351
          2048       309        0.000385
          4096       564        0.000740
          8192      1028        0.001931
        16384      1900        0.006316
        32768      3512        0.021577
        65536      6542        0.078834
        131072     12251        0.273368
        262144     23000        0.808825
    PRIME_MPI - Master process:
      Normal end of execution.
    31 January 2024 06:09:03 AM
        

    使用 48 個處理,執行時間大約需要 1 秒。

    執行相同的範例來探索 Open MPI,但使用 mpihosts_slots.txt 檔案。與獨立執行 prime_mpi 相較之下,您應該有所改善,但每個節點上只會使用 1 個處理器 (總計 3 個),而不是所有節點上的完整補數。藉由變更每個 VM 執行處理上的槽位數目,您可以控制工作的分配。

    Oracle Roving Edge Infrastructure

    Oracle Roving Edge Infrastructure 常見問題

    Oracle Roving Edge Infrastructure 文件

    開放式 MPI:開源高效能運算

    Netfilter 專案

    開啟 MPI

    John Burkardt 的 prime_mpi,是調查平行化的起點

  • 作者 - Melinda Centeno (資深首席產品經理) James George (首席雲端架構師)
  • 其他學習資源

    瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

    如需產品文件,請造訪 Oracle Help Center