found a solution: dataset itself has a method called split, it can split the dataset by ratio, which can solve the problem of split dataset to train and validation.
The split method of dataset class will return dataset, NOT subset, which is different from torch.utils.data.random_split.
However, this will create a puzzle: when to use torch.utils.data.random_split? what is subset for?
Hope the solution helps people with similar problems. thanks.