Search code examples
dockerdatabricksmlflow

MLflow 1.2.0 define MLproject file


Trying to run mlflow run by specifying MLproject and code which lives in a different location as MLproject file.

I have the following directory structure:

/root/mflow_test
.
├── conda
│   ├── conda.yaml
│   └── MLproject
├── docker
│   ├── Dockerfile
│   └── MLproject
├── README.md
├── requirements.txt
└── trainer
    ├── __init__.py
    ├── task.py
    └── utils.py

When I'm run from: /root/

mlflow run mlflow_test/docker

I get:

/root/miniconda3/bin/python: Error while finding module specification for 'trainer.task' (ImportError: No module named 'trainer')

Since my MLproject file can't find the Python code. I moved MLproject to mflow_test and this works fine.

This is my MLproject entry point:

name: mlflow_sample
docker_env:
  image: mlflow-docker-sample
entry_points:
  main:
    parameters:
      job_dir:
        type: string
        default: '/tmp/'
    command: |
        python -m trainer.task --job-dir {job_dir}

How can I run mlflow run and pass the MLproject and ask it to look in a different folder?

I tried:

"cd .. && python -m trainer.task --job-dir {job_dir}" 

and I get:

/entrypoint.sh: line 5: exec: cd: not found

Dockerfile

# docker build -t mlflow-gcp-example -f Dockerfile .
FROM gcr.io/deeplearning-platform-release/tf-cpu 
RUN git clone github.com/GoogleCloudPlatform/ml-on-gcp.git 
WORKDIR ml-on-gcp/tutorials/tensorflow/mlflow_gcp 
RUN pip install -r requirements.txt 

Solution

  • Not sure if this helps/correct, but I noticed that in your command python -m trainer.task --job-dir {job_dir} you have missed mentioning .py extension and forward slash for trainer.task as below

    trainer.task trainer/task.py