62 lines
1.9 KiB
Python
62 lines
1.9 KiB
Python
"""
|
|
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()
|