日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基于eGPU優(yōu)化套件的ResNet50模型訓(xùn)練和推理

本文以卷積神經(jīng)網(wǎng)絡(luò)模型ResNet50的訓(xùn)練和推理為例,為您介紹如何通過DockerKubernetes使用eGPU優(yōu)化套件,進(jìn)行GPU容器虛擬化和資源共享。本實踐中的ResNet50模型基于NVIDIA官方開源代碼DeepLearningExamples實現(xiàn)。

步驟一:準(zhǔn)備模型和數(shù)據(jù)集

  1. 準(zhǔn)備代碼庫。執(zhí)行以下命令,獲取模型:

    git clone https://github.com/NVIDIA/DeepLearningExamples.git
  2. 下載ImageNet數(shù)據(jù)集。數(shù)據(jù)集的獲取方式,請參見ResNet50 v1.5 For PyTorch。ImageNet數(shù)據(jù)集目錄結(jié)構(gòu)如下所示。

    imagenet
    ├── train
    │   ├── n01440764
    │   │  ├── n01440764_10026.JPEG
    │   │  ├── n01440764_10027.JPEG
    │   │  └── ......
    │   ├── n01443537
    │   └── ......         
    └── val                
        ├── n01440764
        │  ├── ILSVRC2012_val_00000293.JPEG
        │  ├── ILSVRC2012_val_00002138.JPEG
        │  └── ......
        ├── n01443537
        └── ......

步驟二:配置環(huán)境

  1. 選擇鏡像。

    使用NVIDIA PyTorch鏡像,本文以nvcr.io/nvidia/pytorch:22.11-py3為例。

  2. 您可以通過兩種方式啟動eGPU容器。

    • 通過Docker啟動eGPU容器。

      1. 使能eGPU容器,配置資源和其他參數(shù)。更多信息,請參見eGPU接口使用示例

      2. 啟動eGPU容器,具體示例如下:

        sudo docker run \
            --runtime=nvidia \
            -e NVIDIA_DRIVER_CAPABILITIES=all \
            --network=host \
            -e AMP_VGPU_ENABLE=1 \
            -e NVIDIA_VISIBLE_DEVICES=0 \
            -e GPU_MEM_PER_DEVICE=16000000000 \
            -e GPU_UTIL_PER_DEVICE=50 \
            -e AMP_USE_HOST_DAEMON=1 \
            -v <local-path-to-DeepLearningExamples>:<docker-path-to-DeepLearningExamples> \
            -v <local-path-to-imagenet>:<docker-path-to-imagenet> \
            -P -ti \
            nvcr.io/nvidia/pytorch:22.11-py3
    • 通過Kubernetes啟動eGPU容器。在Kubernetes集群中使用eGPU共享GPU資源需要:

      1. 安裝eGPU device plugin使能夠使用GPU虛擬化的調(diào)度能力,更多信息,請參見使用eGPU Kubernetes組件

      2. 使用YAML文件啟動eGPU容器,具體示例如下:

        apiVersion: apps/v1
        kind: StatefulSet
        metadata:
          name: amp-egpu-test
          labels:
            app: amp-egpu-test
        spec:
          replicas: 1
          serviceName: "test-egpu-001"
          selector: # define how the deployment finds the pods it manages
            matchLabels:
              app: test-egpu-001
          template: # define the pods specifications
            metadata:
              labels:
                app: test-egpu-001
            spec:
              volumes:
              - name: deepLearningExamples
                hostPath:
                # directory location on host
                  path: <local-path-to-DeepLearningExamples>
              - name: imagenet
                hostPath:
                # directory location on host
                  path: <local-path-to-imagenet>
              containers:
              - name: test-egpu-001
                image: nvcr.io/nvidia/pytorch:22.11-py3
                imagePullPolicy: IfNotPresent
                command: [ "/bin/bash", "-c", "--" ]
                args: [ "while true; do sleep 30; done;" ]
                volumeMounts:
                - mountPath: <docker-path-to-DeepLearningExamples>
                  name: deepLearningExamples
                - mountPath: <docker-path-to-imagenet>
                  name: imagenet
                resources:
                  limits:
                    aliyun.com/gpu-compute: 50
                    aliyun.com/gpu-mem: 16
                env:
                  - name: AMP_VGPU_ENABLE
                    value: "1"
                  - name: AMP_USE_HOST_DAEMON
                    value: "1"
                  - name: NVIDIA_DRIVER_CAPABILITIES
                    value: all
    • 上述示例中:

      • <local-path-to-imagenet>表示靈駿節(jié)點中ImageNet數(shù)據(jù)集所在路徑。

      • <docker-path-to-imagenet> 表示數(shù)據(jù)集掛載到容器中的路徑。

      • <local-path-to-DeepLearningExamples>表示靈駿節(jié)點中模型訓(xùn)練代碼所在路徑。

      • <docker-path-to-DeepLearningExamples> 表示模型訓(xùn)練代碼掛載到容器中的路徑。

        重要

        使用nvcr.io/nvidia/pytorch:22.11-py3鏡像可能出現(xiàn)dllogger缺失的問題,可在容器內(nèi)手動安裝dllogger。更多信息,請參見DLLogger for Python

        pip install git+https://github.com/NVIDIA/dllogger#egg=dllogger

步驟三:進(jìn)行模型訓(xùn)練

在容器中執(zhí)行以下命令啟動訓(xùn)練任務(wù):

# 進(jìn)入DeepLearningExamples/PyTorch/Classification/ConvNets目錄進(jìn)行訓(xùn)練
python3 ./main.py --arch resnet50 -b 128 --epochs 90  <docker-path-to-imagenet>

如果要驗證eGPU的顯存和算力切分功能,可以在host上運行nvidia-smi查看GPU資源使用情況。更多信息,請參見ResNet50 v1.5 For PyTorch

步驟四:進(jìn)行模型推理

  1. 下載預(yù)訓(xùn)練模型。

    # 使用從NGC下載的NVIDIA的預(yù)訓(xùn)練模型
    wget --content-disposition https://api.ngc.nvidia.com/v2/models/nvidia/resnet50_pyt_amp/versions/20.06.0/zip -O resnet50_pyt_amp_20.06.0.zip
    
    # 將模型下載后解壓后放置在 DeepLearningExamples/PyTorch/Classification/ConvNets目錄,解壓后得到的文件為nvidia_resnet50_200821.pth.tar
    unzip resnet50_pyt_amp_20.06.0.zip
    mv nvidia_resnet50_200821.pth.tar <docker-path-to-DeepLearningExamples>/PyTorch/Classification/ConvNets/
    重要

    直接加載預(yù)訓(xùn)練模型可能會出現(xiàn)缺失部分keys的相關(guān)報錯,需要在DeepLearningExamples/PyTorch/Classification/ConvNets/image_classification/models/model.py文件第150行,修改函數(shù)load_state_dict()為:

    model.load_state_dict(state_dict, strict=False)

    這處修改是為了避免在加載NVIDIA的預(yù)訓(xùn)練模型進(jìn)行推理時出現(xiàn)報錯的現(xiàn)象,與是否使用eGPU無關(guān)。更多信息,請參見load_state_dict()

  2. 啟動推理任務(wù)。

    # 進(jìn)入DeepLearningExamples/PyTorch/Classification/ConvNets目錄進(jìn)行推理
    cd <docker-path-to-DeepLearningExamples>/PyTorch/Classification/ConvNets
    python ./main.py --arch resnet50 --evaluate --epochs 90 -b 128 --pretrained-from-file=nvidia_resnet50_200821.pth.tar <docker-path-to-imagenet>