全部產品
Search
文件中心

Elastic High Performance Computing:自訂Ray叢集的Pytorch映像分類批量推理

更新時間:May 20, 2025

本文基於E-HPC自訂Ray叢集方案,給出了具體的Ray叢集環境部署過程,並基於搭建好的Ray叢集,介紹了基於PyTorch的映像分類批量推理基礎實踐。對於Ray分散式運算架構而言,其不僅適用於AI情境的分布式訓練、模擬評估、策略服務執行任務,也可通用於巨量資料及各類大規模批次運算情境,支援使用者結合具體業務情境進行靈活的功能定製研發。

背景資訊

Ray 是一個通用的開源分散式運算架構,特別適用於機器學習、強化學習和其他計算密集型任務。它提供了一套簡單、靈活、高效、通用的API,來協助開發人員輕鬆構建可擴充的分布式應用。

本文結合E-HPC自訂叢集及模板,提供了一套Ray叢集的高效部署使用方式,並支援雲上CPU、GPU等各類資源擴容縮容,降低AI應用研發人員的學習維護成本,提升行業研究效率。

準備工作

  1. 選擇以下任一方式建立Ray叢集。

    重要

    目前支援建立Ray叢集的地區包括杭州、上海和北京。

    1. 通過叢集模板建立。具體操作,請參見模板建立

      image

    2. 通過手動建立叢集。更多內容,請參見建立標準版叢集

  2. 本文使用的叢集配置樣本如下:

    配置項

    配置

    系列

    標準版

    部署模式

    自訂叢集

    叢集類型

    CUSTOM

    節點配置

    包含1個登入節點和1個計算節點,規格如下:

    • 登入節點:採用ecs.c8a.xlarge執行個體規格,該規格配置為4 vCPU,8 GiB記憶體。

    • 計算節點:採用ecs.c8a.xlarge執行個體規格,該規格配置為4 vCPU,8 GiB記憶體。

      重要

      建立叢集後,擴容Ray叢集計算節點。具體操作,請參見建立節點

      說明

      請根據實際業務需求,調整登入節點和計算節點的執行個體規格,以提高或降低資源配置。

    執行個體安全性群組

    允許存取5901(VNC訪問連接埠)、8265(Ray Dashboard訪問連接埠)。具體操作,請參見管理安全性群組規則

    叢集鏡像

    登入節點/計算節點:ray_ubuntu20.04_v1.0

    說明

    社區鏡像裡選擇ray_ubuntu20.04_v1.0

    image

    系統名稱

    Ubuntu 20.04 64位

步驟一:查看叢集狀態

  1. 通過Workbench遠端連線Ray叢集登入節點。更多資訊,請參見使用Workbench工具以SSH協議登入Linux執行個體

    執行命令ray status查看叢集狀態。

    ray status

    image.png

  2. Ray Dashboard查看。

    1. 通過VNC串連,在瀏覽器上輸入地址IP:8265查看Genome圖形案頭。更多資訊,請參見通過VNC串連執行個體

      image

    2. (可選)若需公網訪問可單擊執行個體ID > 綁定彈性公網配置Elastic IP Address。

      image

步驟二:Pytorch映像分類批量推理

基於建立的Ray叢集提交Pytorch推理任務主要有兩種方式。

  1. Ray job方式提交(推薦)

    說明

    基於Ray job方式,適合批處理及無需保持串連的情境;在Ray叢集Head節點,或者與Head網路及8265連接埠連通的遠程機器上執行均可。

    1. 單個任務執行。

      1. 通過Workbench遠端連線Ray叢集登入節點。更多資訊,請參見使用Workbench工具以SSH協議登入Linux執行個體

      2. 下載測試檔案images.tar並解壓至/home/test目錄下。

        tar -zxvf images.tar -C /home/test/
      3. 下載ray_image_classify.py指令碼至/home/test目錄下。

      4. 執行以下命令,查看Ray叢集基礎資訊。

        python -c "import ray; ray.init(); print(ray.cluster_resources())"
      5. 單個Ray job提交,替換IP為登入節點IP。指定/home/test/images為輸入檔案路徑,/home/test/images_prediction為輸出路徑。

        ray job submit --address http://IP:8265  --working-dir . -- /usr/local/fce/Python-3.11.9env/bin/python ray_image_classify.py /home/test/images /home/test/images_prediction
      6. 執行成功的輸出如下:

        image

        分類預測的資料及結果如下:images為輸入圖片資料,images_prediction為輸出資料,圖片預測的分類包括tench,bittern及coho等。

        image

      7. 通過VNC串連,在對應輸出目錄下查看。更多資訊,請參見通過VNC串連執行個體

        image

    2. 批量任務執行。

      基於Pytorch分類images目錄下的所有映像為例(作業數對應子目錄數量),批量提交ray作業並輸出分類預測結果。

      1. /home/test/目錄下建立ray_jobs_batch.sh指令碼。並替換指令碼中export RAY_ADDRESS參數的IP為登入節點IP

        #!/bin/bash
        
        # 輸入和輸出目錄
        input_dir=$1
        output_dir=$2
        
        export RAY_ADDRESS="http://IP:8265"
        
        # 檢查輸入目錄是否存在
        if [ ! -d "$input_dir" ]; then
          echo "Input directory does not exist: $input_dir"
          exit 1
        fi
        
        # 檢查輸出的目錄是否存在
        if [ ! -d "$output_dir" ]; then
          echo "Input directory does not exist, creating.."
          mkdir -p "$output_dir"
        fi
        
        # 遍曆 input_dir 下的所有子目錄
        for subdir in "$input_dir"/*; do
          if [ -d "$subdir" ]; then
            subdir_name=$(basename "$subdir")
            input_subdir="${input_dir}/${subdir_name}"
            output_subdir="${output_dir}/${subdir_name}_prediction"
            
            # 提交 Ray 任務
            echo "Submitting Ray job for directory: $input_subdir"
            ray job submit --no-wait --working-dir . -- /usr/local/fce/Python-3.11.9env/bin/python ray_image_classify.py $input_subdir $output_subdir
          fi
        done
        
        echo "All Ray jobs have been submitted."
      2. 執行指令碼ray_jobs_batch.sh

        source ray_jobs_batch.sh  /home/test/images  /home/test/images_prediction
      3. 執行命令ray job list查看工作清單。

        ray job list

        image

        也可通過Ray Server Dashboard查看,作業提交運行中如下:

        image

        作業運行完成如下:

        image

      4. 分類預測的資料及結果如下:

        images_input1/images_input2/images_input3為輸入圖片資料,images_input1_prediction/images_input2_prediction/images_input3_prediction為輸出資料,圖片預測的分類包括tench,barracouta及coho等。

        image

        images_input1_prediction中預測的鯉魚分類圖片樣本如下:

        image.png

  2. Ray Client方式提交

    說明

    基於Ray Client方式,主要適用於互動開發調試任務情境,需要保持用戶端串連。

    1. /home/test/目錄下建立raytask.py指令碼,內容如下。

      import ray
      
      ray.init(address='auto')
      
      # 定義任務。
      @ray.remote
      def square(x):
          return x * x
      
      # 啟動四個並行的任務。
      futures = [square.remote(i) for i in range(4)]
      
      # 擷取結果。
      print(ray.get(futures))
      # -> [0, 1, 4, 9]
    2. 執行指令碼raytask.py

      python raytask.py

      image