All Products
Search
Document Center

Intelligent Computing LINGJUN:Pelatihan ResNet50 Berbasis KSpeed

Last Updated:Aug 21, 2026

KSpeed mempercepat pemuatan data gambar untuk pelatihan visi komputer. Topik ini menjelaskan langkah-langkah mengintegrasikan KSpeed dengan model ResNet50 berdasarkan DeepLearningExamples sumber terbuka dari NVIDIA, menggunakan patch git untuk modifikasi kode yang diperlukan. Untuk detailnya, lihat Integrasi Modul Utama KSpeed.

Persiapan Kode

Konfigurasi lingkungan

Jalankan perintah berikut untuk memulai kontainer pelatihan:

docker run -it --gpus all --name=resnet50_kspeed_test --net=host --ipc host --device=/dev/infiniband/ --ulimit memlock=-1:-1 -v /{path-to-imagenet}:/{path-to-imagenet-in-docker} -v /{path-to-DeepLearningExamples}:/{path-to-DeepLearningExamples-in-docker} eflo-registry.cn-beijing.cr.aliyuncs.com/eflo/ngc-pytorch-kspeed-22.05-py38:v2.2.0
Catatan

Dalam perintah di atas:

  • {path-to-imagenet} merepresentasikan path ke dataset ImageNet pada mesin fisik;

  • {path-to-imagenet-in-docker} merepresentasikan path tempat pengguna memetakan dataset ke dalam kontainer;

  • {path-to-DeepLearningExamples} menunjukkan path ke kode pelatihan model pada mesin fisik;

  • {path-to-DeepLearningExamples-in-docker} menunjukkan path tempat kode pelatihan model dipetakan ke dalam kontainer.

Atur path-path tersebut sesuai dengan lingkungan Anda.

Struktur direktori dataset ImageNet:

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

Referensi metode perolehan dataset: https://github.com/NVIDIA/DeepLearningExamples/tree/master/PyTorch/Classification/ConvNets/resnet50v1.5

Jalankan pelatihan model

# Tetap berada di direktori DeepLearningExamples
cd ./PyTorch/Classification/ConvNets

# Baseline delapan GPU satu mesin
bash ./resnet50v1.5/training/AMP/DGXA100_resnet50_AMP_multi.sh pytorch {path-to-imagenet-in-docker}

# KSpeed delapan GPU satu mesin
bash ./resnet50v1.5/training/AMP/DGXA100_resnet50_AMP_multi.sh kspeed {path-to-imagenet-in-docker}

# DALI+KSpeed delapan GPU satu mesin
bash ./resnet50v1.5/training/AMP/DGXA100_resnet50_AMP_multi.sh dali-kspeed {path-to-imagenet-in-docker}
Catatan
  • Dalam perintah di atas:

{path-to-imagenet-in-docker} merepresentasikan path dataset ImageNet di dalam kontainer, yang harus konsisten dengan path yang ditetapkan saat memulai kontainer.

  • Sebelum menjalankan pengujian KSpeed, pastikan layanan kspeed telah dideploy.

Deskripsi Modul Utama untuk Integrasi KSpeed

Tambahkan file modul kspeeddataloader

Tambahkan file DeepLearningExamples/PyTorch/Classification/ConvNets/image_classification/kspeeddataloader.py, yang mengimplementasikan Dataloader PyTorch berbasis KSpeed dan Dataloader DALI berbasis KSpeed.

Dataloader PyTorch Berbasis KSpeed

Untuk mengimplementasikan Dataloader PyTorch berbasis KSpeed, modifikasi Dataset dan integrasikan dengan Sampler serta Dataloader native PyTorch:

  • Impor modul kspeeddataset

    import kspeed.utils.data.kspeeddataset as KSpeedDataset
  • Ganti torchvison.datasets.ImageFolder dengan KSpeedDataset.KSpeedImageFolder untuk mengaktifkan akselerasi pemuatan data KSpeed.

    train_dataset = KSpeedDataset.KSpeedImageFolder(
            traindir, None, workers, kspeed_iplist,
            "admin", "admin", transforms.Compose(transforms_list),
        )
    
    val_dataset = KSpeedDataset.KSpeedImageFolder(
            valdir, None, workers, kspeed_iplist,
            "admin", "admin",
            transforms.Compose(
                [
                    transforms.Resize(
                        image_size + crop_padding, interpolation=interpolation
                    ),
                    transforms.CenterCrop(image_size),
                ]
            ),
        )
  • Implementasikan metode get_kspeed_train_loader dan get_kspeed_val_loader. Untuk detailnya, lihat baris 16–72 dan 74–128 pada file kspeeddataloader.py.

Dataloader DALI Berbasis KSpeed

Untuk mengimplementasikan Dataloader DALI berbasis KSpeed, atur sumber data input pipeline DALI ke KSpeedCallable:

  • KSpeedCallable

    KSpeedCallable mewarisi KSpeedDataset.KSpeedFolder dan membaca sampel dataset ImageNet melalui self.dataset.getBIN(path) (lihat baris 164–179 pada file kspeeddataloader.py).

    def __call__(self, sample_info):
            
        if self.dataset is None:
            self.load()
        if sample_info.iteration >= self.full_iters:
            raise StopIteration()
        if self.last_seen_epoch != sample_info.epoch_idx:
            self.last_seen_epoch = sample_info.epoch_idx
            self.perm = np.random.default_rng(seed=42 + sample_info.epoch_idx).permutation(len(self.files))
        idx = self.perm[sample_info.idx_in_epoch + self.shard_offset]
            
        path = os.path.join(self.root, self.files[idx])
        dout = self.dataset.getBIN(path)
        sample = np.frombuffer(dout, dtype=np.uint8)
        label = np.int32([self.labels[idx]])
        return sample, label
  • Pipeline DALI Berbasis KSpeedCallable

    Baris 223–229 pada file kspeeddataloader.py menggunakan KSpeedCallable sebagai sumber data eksternal untuk Pipeline DALI:

    if kspeed:
        images, labels = fn.external_source(source=kscallable,
                            num_outputs=2,
                            batch=False, 
                            parallel=True, 
                            dtype=[types.UINT8, types.INT32], 
                            device='cpu')

Tambahkan opsi DATA_BACKEND_CHOICES

Pada baris 40 file DeepLearningExamples/PyTorch/Classification/ConvNets/image_classification/dataloaders.py, ubah DATA_BACKEND_CHOICES = ["pytorch", "synthetic"] menjadi seperti berikut:

DATA_BACKEND_CHOICES = ["pytorch", "syntetic", "kspeed", "dali-kspeed",  "dali"]

Tambahkan opsi args.data_backend

Pada file DeepLearningExamples/PyTorch/Classification/ConvNets/main.py, tambahkan kode berikut ke cabang args.data_backend pada baris 512–520:

elif args.data_backend == "kspeed":
    get_train_loader = get_kspeed_train_loader
    get_val_loader = get_kspeed_val_loader
elif args.data_backend == "dali":
    get_train_loader = get_dali_kspeed_train_loader(dali_cpu=True, kspeed=False)
    get_val_loader = get_dali_kspeed_val_loader(dali_cpu=True, kspeed=False)
elif args.data_backend == "dali-kspeed":
    get_train_loader = get_dali_kspeed_train_loader(dali_cpu=True)
    get_val_loader = get_dali_kspeed_val_loader(dali_cpu=True)