class_docstr: Base class for MF models running on the GPU.
  
  This adds support for inference to run on the GPU as well as training.
  
  Attributes
  ----------
  item_factors : implicit.gpu.Matrix
      Array of latent factors for each item in the training set
  user_factors : implicit.gpu.Matrix
      Array of latent factors for each user in the training set
code: def similar_users(self, userid, N=10, filter_users=None, users=None):
      norms = self.user_norms
      user_factors = self.user_factors
      if users is not None:
          if filter_users:
              raise ValueError(
                  "Can't set both users and filter_users in similar_users call"
              )
  
          users = np.array(users)
          user_factors = user_factors[users]
  
          # TODO: we should be able to do this all on the GPU
          norms = implicit.gpu.Matrix(
              self._user_norms_host[users].reshape(1, len(users))
          )
  
          # check selected items are in the model
          if (
              users.max() >= self.user_factors.shape[0]
              or users.min() < 0
          ):
              raise IndexError(
                  "Some userids in the users parameter are not in the model"
              )
  
      if filter_users is not None:
          filter_users = implicit.gpu.IntVector(
              np.array(filter_users, dtype="int32")
          )
  
      ids, scores = self.knn.topk(
          user_factors,
          self.user_factors[userid],
          N,
          norms,
          item_filter=filter_users,
      )
  
      if users is not None:
          ids = users[ids]
  
      user_norms = self._user_norms_host[userid]
      if np.isscalar(userid):
          ids, scores = ids[0], scores[0]
          scores /= user_norms
      else:
          scores /= user_norms[:, None]
      return ids, scores
  
imports: import time
  import numpy
  from scipy.sparse import csr_matrix
  import implicit.gpu
  from ..cpu.matrix_factorization_base import _filter_items_from_sparse_matrix
  from ..recommender_base import RecommenderBase
label_desc: Use image node_id 6 for calling the MatrixFactorizationBase obj's underlying member method code with example usage: obj.similar_users(userid, N, filter_users, users) and returns: ids,  scores