Skip to content

Commit 6d094dc

Browse files
committed
Implemented logparam
1 parent 0ac57fc commit 6d094dc

File tree

3 files changed

+131
-2
lines changed

3 files changed

+131
-2
lines changed

src/MLFlowClient.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ include("services/loggers.jl")
7676
export
7777
logbatch,
7878
loginputs,
79-
logmetric
79+
logmetric,
80+
logparam
8081

8182
end

src/services/loggers.jl

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ logmetric(instance::MLFlow, run::Run, key::String, value::Float64;
3333
step::Union{Int64, Missing}=missing)::Bool =
3434
logmetric(instance, run.info.run_id, key, value; timestamp=timestamp,
3535
step=step)
36+
logmetric(instance::MLFlow, run_id::String, metric::Metric)::Bool =
37+
logmetric(instance, run_id, metric.key, metric.value, timestamp=metric.timestamp,
38+
step=metric.step)
39+
logmetric(instance::MLFlow, run::Run, metric::Metric)::Bool =
40+
logmetric(instance, run.info.run_id, metric.key, metric.value,
41+
timestamp=metric.timestamp, step=metric.step)
3642

3743
"""
3844
logbatch(instance::MLFlow, run_id::String;
@@ -94,3 +100,32 @@ function loginputs(instance::MLFlow, run_id::String,
94100
end
95101
loginputs(instance::MLFlow, run::Run, datasets::Array{DatasetInput})::Bool =
96102
loginputs(instance, run.info.run_id, datasets)
103+
104+
"""
105+
logparam(instance::MLFlow, run_id::String, key::String, value::String)
106+
logparam(instance::MLFlow, run::Run, key::String, value::String)
107+
logparam(instance::MLFlow, run_id::String, param::Param)
108+
logparam(instance::MLFlow, run::Run, param::Param)
109+
110+
Log a param used for a run. A param is a key-value pair (string key, string
111+
value). Examples include hyperparameters used for ML model training and
112+
constant dates and values used in an ETL pipeline. A param can be logged only
113+
once for a run.
114+
115+
# Arguments
116+
- `instance`: [`MLFlow`](@ref) configuration.
117+
- `run_id`: ID of the run under which to log the param.
118+
- `key`: Name of the param.
119+
- `value`: String value of the param being logged.
120+
"""
121+
function logparam(instance::MLFlow, run_id::String, key::String,
122+
value::String)::Bool
123+
mlfpost(instance, "runs/log-parameter"; run_id=run_id, key=key, value=value)
124+
return true
125+
end
126+
logparam(instance::MLFlow, run::Run, key::String, value::String)::Bool =
127+
logparam(instance, run.info.run_id, key, value)
128+
logparam(instance::MLFlow, run_id::String, param::Param)::Bool =
129+
logparam(instance, run_id, param.key, param.value)
130+
logparam(instance::MLFlow, run::Run, param::Param)::Bool =
131+
logparam(instance, run.info.run_id, param.key, param.value)

test/services/loggers.jl

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
@ensuremlf
33

44
experiment_id = createexperiment(mlf, UUIDs.uuid4() |> string)
5-
run = createrun(mlf, experiment_id)
65

76
@testset "with run id as string" begin
7+
run = createrun(mlf, experiment_id)
88
logmetric(mlf, run.info.run_id, "missy", 0.9)
99

1010
run = refresh(mlf, run)
@@ -13,9 +13,11 @@
1313
@test last_metric isa Metric
1414
@test last_metric.key == "missy"
1515
@test last_metric.value == 0.9
16+
deleterun(mlf, run)
1617
end
1718

1819
@testset "with run" begin
20+
run = createrun(mlf, experiment_id)
1921
logmetric(mlf, run, "gala", 0.1)
2022

2123
run = refresh(mlf, run)
@@ -24,6 +26,37 @@
2426
@test last_metric isa Metric
2527
@test last_metric.key == "gala"
2628
@test last_metric.value == 0.1
29+
deleterun(mlf, run)
30+
end
31+
32+
@testset "with run id as string and metric" begin
33+
run = createrun(mlf, experiment_id)
34+
logmetric(mlf, run.info.run_id, Metric("missy", 0.9, 123, 1))
35+
36+
run = refresh(mlf, run)
37+
last_metric = run.data.metrics |> last
38+
39+
@test last_metric isa Metric
40+
@test last_metric.key == "missy"
41+
@test last_metric.value == 0.9
42+
@test last_metric.timestamp == 123
43+
@test last_metric.step == 1
44+
deleterun(mlf, run)
45+
end
46+
47+
@testset "with run and metric" begin
48+
run = createrun(mlf, experiment_id)
49+
logmetric(mlf, run, Metric("gala", 0.1, 123, 1))
50+
51+
run = refresh(mlf, run)
52+
last_metric = run.data.metrics |> last
53+
54+
@test last_metric isa Metric
55+
@test last_metric.key == "gala"
56+
@test last_metric.value == 0.1
57+
@test last_metric.timestamp == 123
58+
@test last_metric.step == 1
59+
deleterun(mlf, run)
2760
end
2861

2962
deleteexperiment(mlf, experiment_id)
@@ -201,3 +234,63 @@ end
201234

202235
deleteexperiment(mlf, experiment_id)
203236
end
237+
238+
@testset verbose = true "log param" begin
239+
@ensuremlf
240+
241+
experiment_id = createexperiment(mlf, UUIDs.uuid4() |> string)
242+
243+
@testset "with run id as string" begin
244+
run = createrun(mlf, experiment_id)
245+
logparam(mlf, run.info.run_id, "missy", "0.9")
246+
247+
run = refresh(mlf, run)
248+
last_param = run.data.params |> last
249+
250+
@test last_param isa Param
251+
@test last_param.key == "missy"
252+
@test last_param.value == "0.9"
253+
deleterun(mlf, run)
254+
end
255+
256+
@testset "with run" begin
257+
run = createrun(mlf, experiment_id)
258+
logparam(mlf, run, "gala", "0.1")
259+
260+
run = refresh(mlf, run)
261+
last_param = run.data.params |> last
262+
263+
@test last_param isa Param
264+
@test last_param.key == "gala"
265+
@test last_param.value == "0.1"
266+
deleterun(mlf, run)
267+
end
268+
269+
@testset "with run id as string and param" begin
270+
run = createrun(mlf, experiment_id)
271+
logparam(mlf, run.info.run_id, Param("missy", "0.9"))
272+
273+
run = refresh(mlf, run)
274+
last_param = run.data.params |> last
275+
276+
@test last_param isa Param
277+
@test last_param.key == "missy"
278+
@test last_param.value == "0.9"
279+
deleterun(mlf, run)
280+
end
281+
282+
@testset "with run and param" begin
283+
run = createrun(mlf, experiment_id)
284+
logparam(mlf, run, Param("gala", "0.1"))
285+
286+
run = refresh(mlf, run)
287+
last_param = run.data.params |> last
288+
289+
@test last_param isa Param
290+
@test last_param.key == "gala"
291+
@test last_param.value == "0.1"
292+
deleterun(mlf, run)
293+
end
294+
295+
deleteexperiment(mlf, experiment_id)
296+
end

0 commit comments

Comments
 (0)