class_docstr: Use mlflow to implement a Recorder.
  
  Due to the fact that mlflow will only log artifact from a file or directory, we decide to
  use file manager to help maintain the objects in the project.
  
  Instead of using mlflow directly, we use another interface wrapping mlflow to log experiments.
  Though it takes extra efforts, but it brings users benefits due to following reasons.
  - It will be more convenient to change the experiment logging backend without changing any code in upper level
  - We can provide more convenience to automatically do some extra things and make interface easier. For examples:
      - Automatically logging the uncommitted code
      - Automatically logging part of environment variables
      - User can control several different runs by just creating different Recorder (in mlflow, you always have to switch artifact_uri and pass in run ids frequently)
class_docstr_tok: ["Use","mlflow","to","implement","a","Recorder",".","Due","to","the","fact","that","mlflow","will","only","log","artifact","from","a","file","or","directory",",","we","decide","to","use","file","manager","to","help","maintain","the","objects","in","the","project",".","Instead","of","using","mlflow","directly",",","we","use","another","interface","wrapping","mlflow","to","log","experiments",".","Though","it","takes","extra","efforts",",","but","it","brings","users","benefits","due","to","following","reasons",".","-","It","will","be","more","convenient","to","change","the","experiment","logging","backend","without","changing","any","code","in","upper","level","-","We","can","provide","more","convenience","to","automatically","do","some","extra","things","and","make","interface","easier",".","For","examples",":","-","Automatically","logging","the","uncommitted","code","-","Automatically","logging","part","of","environment","variables","-","User","can","control","several","different","runs","by","just","creating","different","Recorder","(","in","mlflow",",","you","always","have","to","switch","artifact_uri","and","pass","in","run","ids","frequently",")"]
docstr: Load object such as prediction file or model checkpoint in mlflow.
  
  Args:
      name (str): the object name
  
      unpickler: Supporting using custom unpickler
  
  Raises:
      LoadObjectError: if raise some exceptions when load the object
  
  Returns:
      object: the saved object in mlflow.
code: def load_object(self, name, unpickler=pickle.Unpickler):
      """
      Load object such as prediction file or model checkpoint in mlflow.
  
      Args:
          name (str): the object name
  
          unpickler: Supporting using custom unpickler
  
      Raises:
          LoadObjectError: if raise some exceptions when load the object
  
      Returns:
          object: the saved object in mlflow.
      """
      assert (
          self.uri is not None
      ), "Please start the experiment and recorder first before using recorder directly."
  
      path = None
      try:
          path = self.client.download_artifacts(self.id, name)
          with Path(path).open("rb") as f:
              data = unpickler(f).load()
          return data
      except Exception as e:
          raise LoadObjectError(str(e)) from e
      finally:
          ar = self.client._tracking_client._get_artifact_repo(self.id)
          if (
              isinstance(ar, AzureBlobArtifactRepository)
              and path is not None
          ):
              # for saving disk space
              # For safety, only remove redundant file for specific ArtifactRepository
              shutil.rmtree(Path(path).absolute().parent)
  
imports: import os
  import sys
  from typing import Optional
  import mlflow
  import shutil
  import pickle
  import tempfile
  import subprocess
  from pathlib import Path
  from datetime import datetime
  from qlib.utils.serial import Serializable
  from qlib.utils.exceptions import LoadObjectError
  from qlib.utils.paral import AsyncCaller
  from ..log import TimeInspector, get_module_logger
  from mlflow.store.artifact.azure_blob_artifact_repo import AzureBlobArtifactRepository
label_desc: Use image node_id 12 for calling the MLflowRecorder obj's underlying member method code with example usage: obj.load_object(name, unpickler) and returns: data