One simple approach would be to override the __getitem__ method from torchvision.datasets.SVHN and convert the image to grayscale using PIL.Image.convert('LA'):

class MyDataset(datasets.SVHN):
    def __init__(self,  root, split='train',
                 transform=None, target_transform=None, download=False):
        super(MyDataset, self).__init__(
            root, split, transform, target_transform, download)
    
    def __getitem__(self, index):
        """
        Args:
            index (int): Index
        Returns:
            tuple: (image, target) where target is index of the target class.
        """
        img, target = self.data[index], int(self.labels[index])

        # doing this so that it is consistent with all other datasets
        # to return a PIL Image
        img = Image.fromarray(np.transpose(img, (1, 2, 0)))
        # Convert to grayscale
        img = img.convert('LA')
        if self.transform is not None:
            img = self.transform(img)

        if self.target_transform is not None:
            target = self.target_transform(target)

        return img, target