def METHOD_NAME(self, ids: torch.Tensor = None):
    """Read the feature by index.
    The returned tensor is always in GPU memory, no matter whether the
    fallback feature is in memory or on disk.
    Parameters
    ----------
    ids : torch.Tensor, optional
        The index of the feature. If specified, only the specified indices
        of the feature are read. If None, the entire feature is returned.
    Returns
    -------
    torch.Tensor
        The read feature.
    """
    if ids is None:
        return self._fallback_feature.METHOD_NAME().to("cuda")
    keys = ids.to("cuda")
    values, missing_index, missing_keys = self._feature.query(keys)
    missing_values = self._fallback_feature.METHOD_NAME(missing_keys).to("cuda")
    missing_values = missing_values.reshape(self.flat_shape)
    values = values.to(missing_values.dtype)
    values[missing_index] = missing_values
    self._feature.replace(missing_keys, missing_values)
    return torch.reshape(values, self.item_shape)