Skip to content

Add support for mlflow run run_name

Eduardo Bonet requested to merge ebonet/add-name-to-candidate into master

What does this MR do and why?

Adds support for the run_name parameter during creation of MLFlow runs (https://www.mlflow.org/docs/latest/rest-api.html#create-run).

Database Migration

Up

❯ bundle exec rails db:migrate RAILS_ENV=development
main: == 20221219103007 AddNameToMlCandidates: migrating ============================
main: -- add_column(:ml_candidates, :name, :text)
main:    -> 0.0031s
main: == 20221219103007 AddNameToMlCandidates: migrated (0.0113s) ===================

main: == 20221219112528 AddTextLimitToNameOnMlCandidates: migrating =================
main: -- transaction_open?()
main:    -> 0.0000s
main: -- current_schema()
main:    -> 0.0005s
main: -- transaction_open?()
main:    -> 0.0000s
main: -- execute("ALTER TABLE ml_candidates\nADD CONSTRAINT check_25e6c65051\nCHECK ( char_length(name) <= 255 )\nNOT VALID;\n")
main:    -> 0.0019s
main: -- current_schema()
main:    -> 0.0003s
main: -- execute("SET statement_timeout TO 0")
main:    -> 0.0004s
main: -- execute("ALTER TABLE ml_candidates VALIDATE CONSTRAINT check_25e6c65051;")
main:    -> 0.0009s
main: -- execute("RESET statement_timeout")
main:    -> 0.0008s
main: == 20221219112528 AddTextLimitToNameOnMlCandidates: migrated (0.2573s) ========

ci: == 20221219103007 AddNameToMlCandidates: migrating ============================
ci: -- add_column(:ml_candidates, :name, :text)
ci:    -> 0.0019s
ci: == 20221219103007 AddNameToMlCandidates: migrated (0.0189s) ===================

ci: == 20221219112528 AddTextLimitToNameOnMlCandidates: migrating =================
ci: -- transaction_open?()
ci:    -> 0.0000s
ci: -- current_schema()
ci:    -> 0.0004s
ci: -- transaction_open?()
ci:    -> 0.0000s
ci: -- execute("ALTER TABLE ml_candidates\nADD CONSTRAINT check_25e6c65051\nCHECK ( char_length(name) <= 255 )\nNOT VALID;\n")
ci:    -> 0.0015s
ci: -- current_schema()
ci:    -> 0.0004s
ci: -- execute("SET statement_timeout TO 0")
ci:    -> 0.0004s
ci: -- execute("ALTER TABLE ml_candidates VALIDATE CONSTRAINT check_25e6c65051;")
ci:    -> 0.0007s
ci: -- execute("RESET statement_timeout")
ci:    -> 0.0004s
ci: == 20221219112528 AddTextLimitToNameOnMlCandidates: migrated (0.0214s) ========

Down

❯ bundle exec rails db:migrate:down:main RAILS_ENV=development VERSION=20221219112528 && bundle exec rails db:migrate:down:ci RAILS_ENV=development VERSION=20221219112528
main: == 20221219112528 AddTextLimitToNameOnMlCandidates: reverting =================
main: -- transaction_open?()
main:    -> 0.0000s
main: -- transaction_open?()
main:    -> 0.0000s
main: -- execute("            ALTER TABLE ml_candidates\n            DROP CONSTRAINT IF EXISTS check_25e6c65051\n")
main:    -> 0.0016s
main: == 20221219112528 AddTextLimitToNameOnMlCandidates: reverted (0.0260s) ========

ci: == 20221219112528 AddTextLimitToNameOnMlCandidates: reverting =================
ci: -- transaction_open?()
ci:    -> 0.0001s
ci: -- transaction_open?()
ci:    -> 0.0000s
ci: -- execute("            ALTER TABLE ml_candidates\n            DROP CONSTRAINT IF EXISTS check_25e6c65051\n")
ci:    -> 0.0033s
ci: == 20221219112528 AddTextLimitToNameOnMlCandidates: reverted (0.0481s) ========

❯ bundle exec rails db:migrate:down:main RAILS_ENV=development VERSION=20221219103007 && bundle exec rails db:migrate:down:ci RAILS_ENV=development VERSION=20221219103007
main: == 20221219103007 AddNameToMlCandidates: reverting ============================
main: -- remove_column(:ml_candidates, :name, :text)
main:    -> 0.0040s
main: == 20221219103007 AddNameToMlCandidates: reverted (0.0108s) ===================

ci: == 20221219103007 AddNameToMlCandidates: reverting ============================
ci: -- remove_column(:ml_candidates, :name, :text)
ci:    -> 0.0058s
ci: == 20221219103007 AddNameToMlCandidates: reverted (0.0289s) ===================

Reproducing

  1. Create a Project and a project access token, with api level:

    export PROJECT_ID=<Your Project Id>
    export GITLAB_PAT=<your api token>
  2. Create an Experiment:

    curl -X POST -H "Authorization: Bearer $GITLAB_PAT" -d name=my_cool_experiment http://gdk.test:3000/api/v4/projects/$PROJECT_ID/ml/mflow/api/2.0/mlflow/experiments/create
  3. This should 404 as the FF is off

  4. Enable the Feature flag

    echo "Feature.enable(:ml_experiment_tracking)" | bundle exec rails c
  5. Create Again, now it should output {"experiment_id"="1"}

    curl -X POST -H "Authorization: Bearer $GITLAB_PAT" -d name=my_cool_experiment http://gdk.test:3000/api/v4/projects/$PROJECT_ID/ml/mlflow/api/2.0/mlflow/experiments/create
    {"experiment_id":"1"} 
  6. Create a Run

    curl -X POST -H "Authorization: Bearer $GITLAB_PAT" -d experiment_id=1 -d run_name="My Cool Run" "http://gdk.test:3000/api/v4/projects/$PROJECT_ID/ml/mlflow/api/2.0/mlflow/runs/create"
  7. Note that the run return now has a run_name property returned

image

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Eduardo Bonet

Merge request reports