""" This script should be executed in a fresh python interpreter process using `subprocess`. """ import argparse from mlflow.pyfunc.scoring_server import _predict def parse_args(): parser = argparse.ArgumentParser() parser.add_argument("--model-uri", required=True) parser.add_argument("--input-path", required=False) parser.add_argument("--output-path", required=False) parser.add_argument("--content-type", required=True) return parser.parse_args() # Guidance for fixing missing module error _MISSING_MODULE_HELP_MSG = ( "Exception occurred while running inference: {e}" "\n\n" "\033[93m[Hint] It appears that your MLflow Model doesn't contain the required " "dependency '{missing_module}' to run model inference. When logging a model, MLflow " "detects dependencies based on the model flavor, but it is possible that some " "dependencies are not captured. In this case, you can manually add dependencies " "using the `extra_pip_requirements` parameter of `mlflow.pyfunc.log_model`.\033[0m" """ \033[1mSample code:\033[0m ---- mlflow.pyfunc.log_model( artifact_path="model", python_model=your_model, extra_pip_requirements=["{missing_module}==x.y.z"] ) ---- For mode guidance on fixing missing dependencies, please refer to the MLflow docs: https://www.mlflow.org/docs/latest/deployment/index.html#how-to-fix-dependency-errors-when-serving-my-model """ ) def main(): args = parse_args() try: _predict( model_uri=args.model_uri, input_path=args.input_path or None, output_path=args.output_path or None, content_type=args.content_type, ) except ModuleNotFoundError as e: message = _MISSING_MODULE_HELP_MSG.format(e=str(e), missing_module=e.name) raise RuntimeError(message) from e if __name__ == "__main__": main()