Thanks for the code.
I’ve removed the training part, as the DataLoader's workers should increase the memory usage as described in your initial post.
Using this code snippet:
import os
os.environ['CUDA_LAUNCH_BLOCKING'] = "1"
import sys

import torch
import torch.nn as nn
import torch.nn.parallel
import torch.backends.cudnn as cudnn
import torch.optim as optim
from torch.utils.data import DataLoader

import numpy as np

import torch
import torch.nn as nn
from torch.utils.data import Dataset

from matplotlib import pyplot as plt
import albumentations.pytorch as AT
from albumentations import (
    RandomRotate90, Flip, Transpose, GaussNoise, Blur, VerticalFlip, HorizontalFlip,  \
    HueSaturationValue, RGBShift, RandomBrightness, Resize, Normalize, Compose, CenterCrop)
from PIL import Image

def transforms(size_image):
    return Compose([
        Resize(height = size_image[0], width = size_image[1]),
        # Red - Green - Blue right now
        Normalize(mean=(0.406, 0.515, 0.323), std=(0.195, 0.181, 0.178)),
        AT.ToTensor()
    ])

def augmentation(size_image,p=0.5):
    return Compose([
        RandomRotate90(),
        Flip(),
        Transpose(),
        GaussNoise(),
        Blur(),
        VerticalFlip(),
        HorizontalFlip(),
        HueSaturationValue(hue_shift_limit=5, sat_shift_limit=15, val_shift_limit=10),
        RGBShift(r_shift_limit=10, g_shift_limit=10, b_shift_limit=10),
        RandomBrightness(limit = 0.05),
        CenterCrop(height = 150, width = 150, p = 0.5)
    ], p=p)

class PyTorchImageDataset(Dataset):
    def __init__(self, data, labels, size_image, **kwags):
        self.transforms = transforms(size_image)
        self.data = data
        self.labels = labels
        self.augment = augmentation(size_image)

    def __len__(self):
        return len(data)

    def __getitem__(self, i):
        image = self.data[i]
        label = self.labels[i]

        image = self.augment(image=image.permute(1, 2, 0).numpy())['image']
        image = self.transforms(image = image)['image']
        return image, label


data = torch.randn(10, 3, 255, 255)
labels = torch.randint(0, 1000, (10,))
train_dataset = PyTorchImageDataset(data=data,
                                    labels=labels,
                                    size_image=(224, 224))

num_workers=20
train_dataloader = DataLoader(dataset=train_dataset,
                              batch_size=5,
                              shuffle=True,
                              num_workers=num_workers)

print('num_workers={}'.format(num_workers))
device = 'cuda:0'
for epoch in range(10):
    for i, data in enumerate(train_dataloader):
       data_batch = data[0].to(device)
       label = data[1].to(device)
       print('{}MB allocated'.format(torch.cuda.memory_allocated()/1024**2))

yields the same memory usage for different number of workers:
num_workers=0
2.87158203125MB allocated
2.87158203125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated

num_workers=2
2.87158203125MB allocated
2.87158203125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated

num_workers=20
2.87158203125MB allocated
2.87158203125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated
1.14892578125MB allocated

Could you check, if this code snippet reproduces the issue on your system?