class_docstr: ``RemoteSearchRunner`` performs a search for optimal hyperparameter values,
  applying the provided ``SearchMethod`` (you will subclass ``SearchMethod`` and provide
  an instance of the derived class).
  ``RemoteSearchRunner`` executes on-cluster: it runs a meta-experiment
  using ``Core API``.
class_docstr_tok: ["``","RemoteSearchRunner","``","performs","a","search","for","optimal","hyperparameter","values",",","applying","the","provided","``","SearchMethod","``","(","you","will","subclass","``","SearchMethod","``","and","provide","an","instance","of","the","derived","class",")",".","``","RemoteSearchRunner","``","executes","on-cluster",":","it","runs","a","meta-experiment","using","``","Core","API","``","."]
code: def save_state(
      self, experiment_id: int, operations: List[searcher.Operation]
  ) -> None:
      steps_completed = self.state.last_event_id
      metadata = {"steps_completed": steps_completed}
      with self.context.checkpoint.store_path(metadata) as (
          path,
          storage_id,
      ):
          self.search_method.save(
              self.state, path, experiment_id=experiment_id
          )
          with path.joinpath("ops").open("wb") as ops_file:
              pickle.dump(operations, ops_file)
  
file_path: determined/harness/determined/searcher/_remote_search_runner.py
imports: import logging
  import os
  import pickle
  from pathlib import Path
  from typing import Any, Dict, Iterable, List, Optional, Tuple, Union
  import determined
  from determined import searcher
  from determined.experimental import client
label_desc: Use image node_id 4 for calling the RemoteSearchRunner obj's underlying member method code with example usage: obj.save_state(experiment_id, operations) without return types