I would see a few problematic points with this approach, which you might have already thought about:

usually you are transforming the data in __getitem__, which would yield slightly different results in each call for the same sample. This would be a cache miss and you would most likely never hit a cached sample. Are you thus only using static transformations? If so, why wouldn’t preloading the entire dataset into a single tensor work?
“so that all getitem are cached” → this would mean that you are able to preload the entire dataset (which is not possible if the dataset is too large for your host RAM or you just don’t want to waste it to store the data). If so, how large is the data?
“cached data is shared” → I don’t know how the lru_cache works internally, but to share data between multiple processes you would need to use shared object types to be able to use it for IPC.