Tools that help you get your experiments under control

As a data scientist I often feel envious of the tooling available to software engineers. Tools for build automatisation, continuous integration, code review, etc help software engineers follow established best practices. In contrast, many of us data scientists have taken to building our own tools for things like managing experiments, for tracking data, for enabling reproducibility. Of course, writing such tools is hard and takes a lot of effort.

Fortunately, the good news is: more and more software supporting data science best practices is becoming available to us. From stand-alone packages such as DVC, polyaxon to Software as a Service solutions such as floydhub, valohai. The bad news is: there really are a lot of these tools around and it is hard to know which one to go with.

In this talk I want to show you, how readily available tools can help you follow best practices in data science. I will focus on the model development phase of a data science project, I will not be talking about tooling for model deployment. I will start with an overview of available tools and will then do a deep-dive comparison of 2-3 tools and show how they support you with things like

  • Versioning data
  • Tracking which data / code / library versions / parameters are used in which experiment
  • Easily comparing / visualising experiment results
  • Enabling everybody in your team / future you to replicate experiments

I will also compare them on non-technical dimensions such as

  • Ease of use / collaboration
  • Price (especially for SaaS solutions)
  • Vendor lock-in

After this talk you should have a good idea of which tools already are available and which things you can/should look for when deciding if a tool is right for your project.

This session took place in track PyData and was classified suitable for some domain / none python by the speaker.

Transcript (auto)

Auto-generated from the recording utilizing Open-Source AI. Speaker labels (Speaker 1, Speaker 2) reflect diarization, not identity. Timestamps refer to the recording.

Speaker 1 [00:03]

Thank you very much, Alan, for the warm welcome. May I ask maybe for people to defragment a little bit because there are some people that still want to join, so move together a little bit. Unfortunately, we had some technical problems this morning. Fortunately, that means I had no time to be nervous.

Speaker 2 [00:20]

Tools that help you.

Speaker 1 [00:22]

you get your experiments under control.

Speaker 2 [00:24]

is the title of the talk.

Speaker 1 [00:26]

of the talk as you've seen it

Speaker 2 [00:27]

You've seen it in the program, but as it goes, the essence.

Speaker 1 [00:28]

in the program. the essence of what one wants to say sometimes only appears when you

Speaker 2 [00:33]

when you actually start doing the work.

Speaker 1 [00:34]

doing the work. So in retrospect, I think...

Speaker 2 [00:37]

Reproducibility in Theory and in

Speaker 1 [00:39]

theory, and in practice would have been the more fitting title.

Speaker 2 [00:42]

title for this talk because I want to talk about

Speaker 1 [00:44]

talk about how can we as data scientists work in a

Speaker 2 [00:47]

his work in a more reproducible

Speaker 1 [00:48]

a more reproducible manner, and how

Speaker 2 [00:49]

And how can tools support that?

Speaker 1 [00:50]

can As Alan said, I'm a freelance data scientist.

Speaker 2 [00:55]

scientist if that interests you.

Speaker 1 [00:56]

that interests you, read.

Speaker 2 [00:57]

reach out to me. The slides for this presentation are already on my GitHub.

Speaker 1 [01:01]

on my GitHub, and I also have this link again.

Speaker 2 [01:03]

I'll have this link again on the final slide. Consider the following situation. You just started a new data science project.

Speaker 1 [01:14]

You finally got access to the data and you're super.

Speaker 2 [01:14]

You f***er. and you're super excited to get started.

Speaker 1 [01:19]

and you start making your

Speaker 2 [01:20]

You start making your first exploration.

Speaker 1 [01:21]

We have the first explorations, a few plots, everything looks really nice, there seem to be no obvious problems.

Speaker 2 [01:24]

no obvious problem with the data.

Speaker 1 [01:25]

problem with the data, you've

Speaker 2 [01:26]

You're really itching to get that.

Speaker 1 [01:27]

to get that first simple model trained, and that looks promising too. So you go, you make more features. Maybe you go back and do some more data cleaning. And maybe you try out more.

Speaker 2 [01:40]

Maybe you'll try out a more complicated model. And it's all a bit...

Speaker 1 [01:42]

It's all a bit chaotic, but yeah, I mean, you're moving.

Speaker 2 [01:45]

mean you're moving quickly it's fun there's lots of progress but in the back of your mind you get this little nagging feeling maybe maybe there's a bit too much chaos

Speaker 1 [01:54]

Too much chaos.

Speaker 2 [01:55]

I don't really take I'm not

Speaker 1 [01:56]

really taking good notes of what I'm doing. I'm not sure that in a few weeks I'll remember what I did.

Speaker 2 [02:02]

what I did, what worked, what didn't work.

Speaker 1 [02:06]

So maybe you start doing something like this

Speaker 2 [02:08]

something like this. You have a false

Speaker 1 [02:08]

You have a folder where you have pickled files of all.

Speaker 2 [02:11]

files of all your models.

Speaker 1 [02:11]

all your models together with some JSON information, some metadata about it.

Speaker 2 [02:16]

data about your experiments.

Speaker 1 [02:19]

Or maybe you'll start filling out.

Speaker 2 [02:20]

start filling out a spreadsheet like that with information about your experiments. Or maybe you go all fancy.

Speaker 1 [02:25]

fancy and build a little

Speaker 2 [02:26]

and build a little web app for your experiment management.

Speaker 1 [02:30]

of those things kind of sound familiar to you, then this is your talk.

Speaker 2 [02:33]

then this is your talk.

Speaker 1 [02:36]

Let's look a bit closer.

Speaker 2 [02:37]

closer at this nagging feeling.

Speaker 1 [02:40]

feeling. What is behind this?

Speaker 2 [02:41]

What is behind this nagging feeling?

Speaker 1 [02:42]

nagging feeling that maybe there's a bit too much chaos.

Speaker 2 [02:45]

chaos.

Speaker 1 [02:47]

For me, a big reason

Speaker 2 [02:48]

A big reason is pride. I call myself...

Speaker 1 [02:50]

call myself a data scientist. It means I should be working in a science.

Speaker 2 [02:54]

be working in a scientific manner. I should take...

Speaker 1 [02:57]

Take good notes of my experiments.

Speaker 2 [02:59]

I should be able to reproduce my results.

Speaker 1 [02:59]

I should.

Speaker 2 [03:02]

And honestly, I worry.

Speaker 1 [03:04]

I worry that I did something stupid while moving.

Speaker 2 [03:04]

I worry. stupid while moving quickly.

Speaker 1 [03:06]

And if I can't go back and check because I've already changed it.

Speaker 2 [03:10]

changed that code, for example, that it

Speaker 1 [03:12]

If I didn't do something stupid, there'll be...

Speaker 2 [03:12]

didn't there'll be lots of worry.

Speaker 1 [03:16]

And that's sad because I want to trust my.

Speaker 2 [03:18]

my results. And I want that other

Speaker 1 [03:19]

And I want that others can try.

Speaker 2 [03:20]

Others can trust my results.

Speaker 1 [03:23]

And really, how can there be teamwork if other people in my team aren't?

Speaker 2 [03:28]

in my team aren't able

Speaker 1 [03:29]

aren't able to take my models.

Speaker 2 [03:29]

to take reproduce them.

Speaker 1 [03:32]

Reduce them and then add

Speaker 2 [03:33]

and then add their own ideas. As you can see,

Speaker 1 [03:38]

reproducibility as it is at the

Speaker 2 [03:38]

reproducing is very easy. that is at the core of all of these feelings.

Speaker 1 [03:44]

So today, I want to build some kind of framework.

Speaker 2 [03:48]

Framework of reproducibility.

Speaker 1 [03:49]

reproducibility for

Speaker 2 [03:50]

for data science in the theory part.

Speaker 1 [03:52]

theory part. And then I'll look specifically at some tools to tell you how they can help.

Speaker 2 [03:56]

they can help you achieve that.

Speaker 1 [03:58]

that. Before I do that, I'll have

Speaker 2 [03:59]

I'll have to do.

Speaker 1 [04:00]

to look a little bit at, narrow down the scope of what I want to talk to you about a little bit,

Speaker 2 [04:08]

it just so that we're all on the same page.

Speaker 1 [04:08]

just so that we all can see it. Everything I'm talking about today is kind of

Speaker 2 [04:14]

today is kind of guided by my experiences as

Speaker 1 [04:16]

experiences as a data scientist, if you can't find yourself here at all, and if you

Speaker 2 [04:20]

at all, and if you were completely different,

Speaker 1 [04:21]

work completely differently, I would love

Speaker 2 [04:22]

differently, I would love to hear from you.

Speaker 1 [04:23]

to hear from you get your perspective the situation I drew earlier is one of

Speaker 2 [04:31]

of model exploration here on the left hand side.

Speaker 1 [04:31]

model explore

Speaker 2 [04:34]

We want to try out many different models, many different features, different settings for parameters.

Speaker 1 [04:39]

But we probably will be using only one data set because we...

Speaker 2 [04:43]

because we need something to compare on.

Speaker 1 [04:45]

compare on. And errors are expected to happen. I mean, okay, it's annoying, this experiment failed, but okay, I'll fix it.

Speaker 2 [04:53]

Hey, I'll fix that bug and I'll restart.

Speaker 1 [04:58]

What I really value is

Speaker 2 [04:59]

you is flexibility I don't want

Speaker 1 [05:00]

I don't want to be held back by any tooling that makes me move less fast.

Speaker 2 [05:05]

Less fast, less freely.

Speaker 1 [05:07]

Contrast that with the other side.

Speaker 2 [05:08]

with the other side, when you've now found a nice model.

Speaker 1 [05:10]

a nice model.

Speaker 2 [05:12]

model type is fixed, your features parameters are all fixed.

Speaker 1 [05:15]

But it's likely that you'll have to retrain frequently.

Speaker 2 [05:17]

retrain frequently, for example, nightly if new data is coming in. You really don't want errors to happen

Speaker 1 [05:23]

Because that means that somebody will get a call at

Speaker 2 [05:23]

because that means... get a call at 4 a.m.

Speaker 1 [05:26]

At 4 a.m. in the morning.

Speaker 2 [05:27]

in the morning and has to go and fix something.

Speaker 1 [05:29]

So your system should be reliable and it should.

Speaker 2 [05:31]

and it should be well monitored.

Speaker 1 [05:33]

And I think the rigidity of something like a pipeline system can be really helpful.

Speaker 2 [05:37]

can be really helpful in this phase.

Speaker 1 [05:40]

Of course, no data science project has just one of each of these, but you're often moving between.

Speaker 2 [05:45]

between these different phases. And today...

Speaker 1 [05:48]

I'll be concentrating on the left.

Speaker 2 [05:50]

on the left face.

Speaker 1 [05:54]

The second scope thing is a little bit on terminology.

Speaker 2 [05:56]

A little bit on terminology.

Speaker 1 [05:57]

technology. Together with reproducibility, you'll all

Speaker 2 [05:58]

Usability, you'll also find the words repeatability or replicability.

Speaker 1 [06:02]

replicability. These range

Speaker 2 [06:03]

These range in meaning from...

Speaker 1 [06:06]

I can redo what I just did.

Speaker 2 [06:07]

to I can write up

Speaker 1 [06:08]

I can write up what I did for.

Speaker 2 [06:09]

up what I did, for example, in a scientific paper.

Speaker 1 [06:11]

paper somebody else can implement it and we'll get

Speaker 2 [06:13]

and will get the same results. Unfortunately, these terms aren't used the same in different fields.

Speaker 1 [06:20]

So what is called reproducibility in one field might be called replicability.

Speaker 2 [06:23]

called replicability.

Speaker 1 [06:24]

in another field. Today, I've chosen...

Speaker 2 [06:27]

I've chosen the word reproducibility simply because I've

Speaker 1 [06:29]

because I've heard

Speaker 2 [06:30]

heard it in use in data science a lot already.

Speaker 1 [06:33]

And today it shall mean the ability to obtain the exact

Speaker 2 [06:37]

The exact same model with reasonable efforts.

Speaker 1 [06:40]

There's two somewhat undefined words here with what is a same model and what are real.

Speaker 2 [06:44]

and what are reasonable efforts. And we'll talk about both of these things. Let's say you wanted to obtain the...

Speaker 1 [06:52]

obtain the exact

Speaker 2 [06:52]

exact same model.

Speaker 1 [06:54]

With that, I mean, if you pickle the two models.

Speaker 2 [06:57]

the files will be bitwise the same. Well, obviously, you need the exact same data, the exact same code.

Speaker 1 [07:05]

same code, the exact

Speaker 2 [07:06]

the exact same command line or environment variables.

Speaker 1 [07:10]

If your model uses randomness,

Speaker 2 [07:11]

randomness in any way.

Speaker 1 [07:12]

in any way like a

Speaker 2 [07:13]

like a random forest or a random...

Speaker 1 [07:14]

or random weight initialization in the neural network, you will have to set exact...

Speaker 2 [07:19]

exact same random seed different versions of

Speaker 1 [07:23]

of, for example, scikit-learn might differ

Speaker 2 [07:26]

might differ slightly in their implementations.

Speaker 1 [07:29]

So you need to use the exact same versions.

Speaker 2 [07:31]

the same versions of your language libraries.

Speaker 1 [07:34]

Different versions of Python, for example, differ also in

Speaker 2 [07:36]

will differ also in their behavior.

Speaker 1 [07:36]

their behavior. Look at the difference in floating point behavior between

Speaker 2 [07:39]

between Python 2 and 3.

Speaker 1 [07:41]

So you want the exact same version.

Speaker 2 [07:43]

same version of your Python interpreter. You might also want the exact

Speaker 1 [07:47]

the exact same version of any kind of

Speaker 2 [07:49]

of any kind of system libraries like CUDA.

Speaker 1 [07:49]

system. like Judah.

Speaker 2 [07:51]

or your operating system.

Speaker 1 [07:52]

rating system or the hardware the experiment

Speaker 2 [07:54]

where the experiment is run on.

Speaker 1 [07:56]

I mean, you kind of already think like the further we go down.

Speaker 2 [07:58]

we go down in this hierarchy, the less it does seem to matter, right?

Speaker 1 [08:02]

We expect Psyched Learned to be

Speaker 2 [08:03]

We learned to be

Speaker 1 [08:05]

robust

Speaker 2 [08:05]

robust against different system libraries.

Speaker 1 [08:06]

experience different system libraries against...

Speaker 2 [08:08]

against difference operating system.

Speaker 1 [08:09]

rating system. We expect our models to be

Speaker 2 [08:11]

to be robust against different random Cs.

Speaker 1 [08:14]

random seeds, because otherwise they would be kind of

Speaker 2 [08:15]

be kind of shitty models.

Speaker 1 [08:16]

shitty. So, today, let's concentrate only on this.

Speaker 2 [08:21]

on these parts of the hierarchy.

Speaker 1 [08:23]

And let's try to obtain not the exact same model, just the same.

Speaker 2 [08:24]

And let's... just the same model. In practice, however,

Speaker 1 [08:33]

I think it's rarely going to be.

Speaker 2 [08:35]

It's rarely going to be necessary that you actually need to reproduce something. What...

Speaker 1 [08:41]

And what is important is that you can if you need to. A little bit like backups. What is important in your day-to-day life?

Speaker 2 [08:50]

day-to-day life as a data scientist is more the ability

Speaker 1 [08:52]

It's more the ability to compare models.

Speaker 2 [08:54]

I've called the information.

Speaker 1 [08:54]

I've called the... needed for comparing models here on the left-hand side provenance I'm not super sure about that word again what

Speaker 2 [09:02]

Again, would appreciate some feedback.

Speaker 1 [09:02]

some feedback

Speaker 2 [09:06]

You see how the

Speaker 1 [09:07]

the information on the left-hand side.

Speaker 2 [09:09]

hand side aligns with the information on the right hand side. So, for example,

Speaker 1 [09:12]

So, for example, if you wanted to compare

Speaker 2 [09:13]

compare two models. You don't

Speaker 1 [09:15]

You don't care to look at the...

Speaker 2 [09:16]

to look at the actual data that these two models were trained.

Speaker 1 [09:18]

models were trained on. What you care about were they trained on?

Speaker 2 [09:21]

Were they trained on the same data?

Speaker 1 [09:21]

the same data or not. So you'd simply need some kind of identifier and that could be an explicit version or it could be a

Speaker 2 [09:27]

or it could be a hash calculated.

Speaker 1 [09:29]

calculated over

Speaker 2 [09:30]

the data set and how you do this comparison

Speaker 1 [09:34]

comparison. There's an obvious UI for that. It's something like this kind of experiment table.

Speaker 2 [09:40]

experiment table, often called a leaderboard, where you have

Speaker 1 [09:45]

some kind of matter, so it's one row per experiment, and you have some kind of matter information for every experiment.

Speaker 2 [09:50]

every experiment, like here I use the timestamp, as well as these provenance attributes.

Speaker 1 [09:54]

Revenants attributes we saw on the

Speaker 2 [09:55]

we saw on the previous page.

Speaker 1 [09:56]

as well as, of course, any kind of metrics that you.

Speaker 2 [09:58]

metrics that you want to compare your models on.

Speaker 1 [10:03]

I have seen a lot of tools allowing you to give a name for your experiment. I personally don't find that very...

Speaker 2 [10:10]

I don't find that very useful because

Speaker 1 [10:10]

useful because it will quickly end up filling up with useless information.

Speaker 2 [10:13]

useless information like this.

Speaker 1 [10:17]

I like to think of my experiment as being characterized

Speaker 2 [10:20]

characterized by their

Speaker 1 [10:20]

by their combinations of provenance at

Speaker 2 [10:23]

provenance attributes.

Speaker 1 [10:23]

So I want to sort, I want to filter, I want to search.

Speaker 2 [10:27]

by these kind of things and not

Speaker 1 [10:28]

things and not by

Speaker 2 [10:29]

Not by a name.

Speaker 1 [10:30]

a name I made up.

Speaker 2 [10:31]

at some point. Let's look a bit more in detail.

Speaker 1 [10:35]

a bit more in detail at these parameters.

Speaker 2 [10:36]

at these parameter columns.

Speaker 1 [10:37]

or columns like parameters,

Speaker 2 [10:38]

parameters are here

Speaker 1 [10:39]

here I mean anything that steers how

Speaker 2 [10:42]

you get from your raw

Speaker 1 [10:43]

from your raw data to your final results.

Speaker 2 [10:45]

to your final result.

Speaker 1 [10:46]

And that might mean steering the way you do your data cleaning, steering the way you do data and perturbation.

Speaker 2 [10:52]

imputation.

Speaker 1 [10:53]

Imputation, steering, how you, if you do oversampling or not.

Speaker 2 [10:57]

oversampling or undersampling steer

Speaker 1 [10:59]

how you do your feature engineering, and of course,

Speaker 2 [11:01]

and of course the hyperparameters that you give to the model.

Speaker 1 [11:03]

model. And there's different ways of getting your parameters

Speaker 2 [11:07]

parameters into the system, of course, command line parameters, environment variables, config

Speaker 1 [11:07]

into this.

Speaker 2 [11:12]

files, or simply having them in code.

Speaker 1 [11:15]

you're going to do that.

Speaker 2 [11:17]

It depends a lot on the tool you're going to use.

Speaker 1 [11:18]

on the tool you're going to use. And it's a thought I'll revisit.

Speaker 2 [11:20]

I'll revisit in the second part of the talk.

Speaker 1 [11:26]

It's also obvious that

Speaker 2 [11:27]

that all the parameter columns and all the matrix columns are extremely project dependent. So there needs to be some flexibility in this UI.

Speaker 1 [11:36]

In fact, I'd even say that at the beginning of your project, you don't.

Speaker 2 [11:40]

You don't, you won't.

Speaker 1 [11:41]

You won't know what kind of metrics you want to compare on at the end of the project, and you won't know which parameters will be important.

Speaker 2 [11:48]

will be important to you at the end of the project.

Speaker 1 [11:51]

And that means that for some...

Speaker 2 [11:52]

that for some older experiments

Speaker 1 [11:53]

All the experiments you have, you will not have.

Speaker 2 [11:55]

have stored relevant parameters. You will not have recorded

Speaker 1 [11:59]

have recorded.

Speaker 2 [12:00]

relevant metrics.

Speaker 1 [12:02]

I think this is a comment.

Speaker 2 [12:03]

a compromise, a pragmatic compromise that we need to

Speaker 1 [12:06]

that we need to make here that is unavoidable if you don't want to get into some kind of analyzes, paralyzes.

Speaker 2 [12:11]

is paralyzed at the very beginning.

Speaker 1 [12:12]

at the very beginning of the project or you want to set up everything.

Speaker 2 [12:14]

to set up everything perfectly from the beginning. The troubles now start when the left-hand side,

Speaker 1 [12:21]

side, the provenance, and the right hand.

Speaker 2 [12:22]

the provenance, on the right-hand side, reproducibility.

Speaker 1 [12:24]

Get out of sync.

Speaker 2 [12:25]

meaning what is in the table

Speaker 1 [12:26]

What is in the table doesn't.

Speaker 2 [12:27]

doesn't reflect the experiment that you've actually ran.

Speaker 1 [12:30]

And that can easily happen.

Speaker 2 [12:32]

Let's say you run an experiment

Speaker 1 [12:35]

made some changes, started it again, and oops, you forgot to do your game.

Speaker 2 [12:39]

to do your git commit of the new code.

Speaker 1 [12:42]

And if your provenance is the most recent case,

Speaker 2 [12:45]

most recent git commit hash.

Speaker 1 [12:46]

git commit hash, then of course there will be wrong information in that table. It does not reflect the actual experiment.

Speaker 2 [12:51]

experiment that was run.

Speaker 1 [12:52]

That was run, and your experiment will not be reproducible. Or let's say...

Speaker 2 [12:57]

you installed the newest version of scikit-learn

Speaker 1 [12:59]

so I could learn because it implements that fancy new algorithm.

Speaker 2 [13:01]

that fancy new algorithm you wanted to try out.

Speaker 1 [13:04]

Ah, but you forgot to...

Speaker 2 [13:06]

to update your requirements file again.

Speaker 1 [13:08]

The provenance information will be wrong and your...

Speaker 2 [13:11]

and your experiment will not be reproducible.

Speaker 1 [13:16]

Or you made some changes to your data set but forgot to calculate.

Speaker 2 [13:19]

calculate a hash over the new data set.

Speaker 1 [13:22]

data set. Again, your provenance information will be wrong.

Speaker 2 [13:24]

will be wrong, experiment will not be reproducible. So there's really a lot to remember for every experiment, right?

Speaker 1 [13:31]

every experiment, right? Need to ensure using the right data hash. You need to ensure that there's no local changes in

Speaker 2 [13:36]

changes in my Git repository.

Speaker 1 [13:37]

my Git repository. You need to ensure my requirements are up-to-date and

Speaker 2 [13:41]

I need to ensure I'm using the correct Python version.

Speaker 1 [13:45]

And it's too much responsibility. I don't want to have to remember.

Speaker 2 [13:48]

have to remember all of these things.

Speaker 1 [13:49]

Well, that's okay. I mean, we can tell a tool to do it.

Speaker 2 [13:49]

But that's okay. to do it for us.

Speaker 1 [13:54]

But I'm sure a lot of you are already thinking right now.

Speaker 2 [13:57]

Ah, that's a lot of hassle, like every-

Speaker 1 [13:59]

every time i want to run experiment that thing is going to nag me to commit my local code it's really annoying i want my tools to support me not to hold

Speaker 2 [14:08]

not to hold me back.

Speaker 1 [14:10]

Now you're going to be with me.

Speaker 2 [14:13]

One thing I've seen tools do is what I call the zip mode, where instead.

Speaker 1 [14:17]

Instead of using Git as your provenance and reproducibility source of information, you upload the actual...

Speaker 2 [14:26]

the actual source code directory and store it in the experiments database.

Speaker 1 [14:31]

I personally am not a super fan of this because number one, you're losing like the provenance, like the comparing different experiences.

Speaker 2 [14:37]

different experiments aspects.

Speaker 1 [14:39]

as well as like what are you going to do

Speaker 2 [14:41]

going to do with this isolated zip file?

Speaker 1 [14:43]

You have no history.

Speaker 2 [14:44]

You have no history.

Speaker 1 [14:45]

You don't have any of the nice tooling that gives you that.

Speaker 2 [14:47]

that kid gives you

Speaker 1 [14:48]

It gives you to compare it to a different.

Speaker 2 [14:50]

to a different version of your code. Instead, I think your tool should support a development mode, which basically is just best effort reproducibility, like as much hassle as you can stand to live with in your day-to-day life.

Speaker 1 [15:05]

And this is for any kind of just trying out type of experiments. And you might have a zip mode or you might not upload code.

Speaker 2 [15:11]

upload code at all.

Speaker 1 [15:12]

at all. The important thing is these experiments are still in your leaderboard.

Speaker 2 [15:16]

In your leaderboard view, you can still compare.

Speaker 1 [15:18]

compare them with other experiments you still have all the

Speaker 2 [15:21]

you still have all the nice tooling.

Speaker 1 [15:21]

nice tooling available to identify

Speaker 2 [15:24]

how

Speaker 1 [15:24]

and how they relate to other experiences.

Speaker 2 [15:26]

relate to other experiments, and really dig down and see different plots. As soon as you have found a nice model, you're too late.

Speaker 1 [15:34]

Your tool should allow you to switch into reproducibility

Speaker 2 [15:36]

reproducibility mode.

Speaker 1 [15:37]

where it really does

Speaker 2 [15:39]

It really then enforces

Speaker 1 [15:39]

And enforce it.

Speaker 2 [15:40]

that you are using the correct data and forces that you have no local

Speaker 1 [15:43]

you have no local changes.

Speaker 2 [15:44]

changes and forces that your requirements are up to date. And it's important that

Speaker 1 [15:50]

that in your UI, you can visually...

Speaker 2 [15:52]

distinguish between those two modes. So this is a screenshot from

Speaker 1 [15:56]

Screenshot from a software as a service.

Speaker 2 [15:58]

for as a service solution called

Speaker 1 [15:58]

solution called Valohai.

Speaker 2 [16:00]

where they use this nice little

Speaker 1 [16:01]

This nice little lab icon to identify.

Speaker 2 [16:03]

to identify what they call an ad hoc experiment.

Speaker 1 [16:12]

But let's drive this thing with the mobile.

Speaker 2 [16:14]

thing with the modes a bit further.

Speaker 1 [16:15]

Oh, it's a bit further.

Speaker 2 [16:16]

So, sorry, consider the third row here.

Speaker 1 [16:16]

Ha! row here. I'll call it reproducibility.

Speaker 2 [16:20]

Reproducibility++ mode.

Speaker 1 [16:22]

mode where you're not actually running the experiment on your local machine but you're running it on some remote

Speaker 2 [16:28]

remote machine. And this

Speaker 1 [16:28]

machine. And this gives you the added reproducibility bonus that you

Speaker 2 [16:32]

that you know your code.

Speaker 1 [16:33]

your code can run

Speaker 2 [16:34]

can run somewhere else, you know?

Speaker 1 [16:34]

somewhere You know you're not using some random file somewhere on the file system that you at some point linked to your project.

Speaker 2 [16:40]

to your project.

Speaker 1 [16:43]

It also has benefits if you need some special hardware like a GPU.

Speaker 2 [16:47]

like a GPU that you don't have on your local machine.

Speaker 1 [16:49]

So you start developing locally.

Speaker 2 [16:49]

So you start...

Speaker 1 [16:51]

As soon as you need to, you'll send this area.

Speaker 2 [16:54]

send this air experiment somewhere remote. We can drive that even further. Why not something similar to

Speaker 1 [17:00]

to CI continuously.

Speaker 2 [17:01]

continuous integration mode

Speaker 1 [17:03]

where it's not actually I who says this is an experiment I want to be recorded,

Speaker 2 [17:03]

where

Speaker 1 [17:09]

but rather I work on it.

Speaker 2 [17:10]

work on a different branch and as soon as I'm

Speaker 1 [17:11]

And as soon as I'm ready, I'll open a merge request or a pull request.

Speaker 2 [17:14]

or a poll request and the CI will

Speaker 1 [17:16]

I will pick up on it and run.

Speaker 2 [17:17]

and run my experiment on a remote machine. I've seen one software...

Speaker 1 [17:22]

Software as a Service Solution.

Speaker 2 [17:23]

so have a solution do something

Speaker 1 [17:23]

do something like that.

Speaker 2 [17:24]

like that that's called gradient and it that

Speaker 1 [17:26]

And it does similarly, like a CI system, plug into GitHub and directly...

Speaker 2 [17:31]

and directly tells you if the experiment worked or failed.

Speaker 1 [17:34]

Unfortunately, I have to tell you, this didn't really work.

Speaker 2 [17:37]

But in principle, I really like this setting.

Speaker 1 [17:41]

I'm not sure if this could be, should be called like continuous evaluation, continuous experimentation. Both terms I've actually.

Speaker 2 [17:47]

terms I've actually already seen.

Speaker 1 [17:48]

already seen other people use in data science.

Speaker 2 [17:49]

use in data science literature, meaning something completely different. So let's see.

Speaker 1 [17:52]

So let's see what will prevail.

Speaker 2 [17:54]

prevail. The question now is

Speaker 1 [17:58]

now is, how do you want to work? Which

Speaker 2 [18:01]

to work. Which of those modes

Speaker 1 [18:01]

Which of those modes works for you?

Speaker 2 [18:04]

How much hassle can you stand in exchange for the freedom from worrying?

Speaker 1 [18:17]

So, you might think, okay, let's tell me a little bit about some tools that are...

Speaker 2 [18:22]

tools that are available. There's a lot.

Speaker 1 [18:25]

This is all the software as a service solutions I found that try to do that. And there's new ones popping up all the time.

Speaker 2 [18:30]

all the time, as well as all of these open source solutions. Again, new ones popping up all of the time. I'll concentrate on the open source.

Speaker 1 [18:39]

the open source ones today. Let's remove all the ones that did not have...

Speaker 2 [18:44]

not have a git commit in the last year.

Speaker 1 [18:49]

So we left with these ones and then I picked the ones that

Speaker 2 [18:52]

that I've heard the most buzz about from other data scientists.

Speaker 1 [18:57]

And that is MLflow, Sacred, and...

Speaker 2 [19:00]

and DVC.

Speaker 1 [19:01]

Both MLflow, so there will be a tutorial on MLflow tomorrow morning.

Speaker 2 [19:04]

tomorrow morning.

Speaker 1 [19:05]

as well as another talk that does seem

Speaker 2 [19:07]

talk that does seem quite similar to my talk.

Speaker 1 [19:09]

my talk that also mentions DVC.

Speaker 2 [19:11]

DVC tomorrow morning.

Speaker 1 [19:12]

tomorrow morning, unfortunately, at the same time.

Speaker 2 [19:14]

at the same time.

Speaker 1 [19:16]

So if you want to get some more details than I'll give you today, please.

Speaker 2 [19:19]

please check out those events. Let's talk about Sacred. That's a library that you just simply pip install. You create your experience.

Speaker 1 [19:32]

You create your experiments, then you have the publicist's ability to add a research

Speaker 2 [19:35]

add a resource.

Speaker 1 [19:36]

source. In this case, I use

Speaker 2 [19:37]

In this case, I use my data set, and that means a hash is...

Speaker 1 [19:39]

a hash is calculated over that dataset and attached to it.

Speaker 2 [19:42]

to the experiment.

Speaker 1 [19:44]

You can log any kind of metrics as well as add additional artifacts. Here I have a plot of the predictions I made so that I really can dig deep.

Speaker 2 [19:52]

really can dig deeper into how my model is performing.

Speaker 1 [19:55]

performing. What I really like about Sacred is this idea of a conflict.

Speaker 2 [20:01]

of a config where

Speaker 1 [20:02]

where config is the combinations of different parameter values. And I found that there's some really nice automagic thing happening here.

Speaker 2 [20:11]

that I defined this

Speaker 1 [20:14]

config name, config call

Speaker 2 [20:16]

config called baseline.

Speaker 1 [20:17]

And then Sacred makes it so that I can just call my training.

Speaker 2 [20:20]

all my training script with the extra command line parameter.

Speaker 1 [20:22]

command line parameters with

Speaker 2 [20:23]

with baseline.

Speaker 1 [20:25]

And I can just go to my colleagues and say, if you want to run the baseline, just...

Speaker 2 [20:28]

Just run this command.

Speaker 1 [20:30]

command. And I found that really convenient to work with.

Speaker 2 [20:32]

to work with.

Speaker 1 [20:33]

However, a bit limiting when I wanted to do.

Speaker 2 [20:34]

when I wanted to do grid search.

Speaker 1 [20:38]

Sacred doesn't come with its own leaderboard UI, but there are several open source projects that build on top of the Sacred database.

Speaker 2 [20:46]

Here is a screenshot of something called

Speaker 1 [20:46]

Here's a screenshot. of something called Omniboard. I haven't looked at the other ones. It's perfectly usable. Like UI, you can click on each experiment and see some details.

Speaker 2 [20:55]

You can see some details, it's very nice.

Speaker 1 [20:56]

It's very nice. One thing I missed here.

Speaker 2 [20:58]

missed here is the ability

Speaker 1 [20:59]

is the ability to display parameters.

Speaker 2 [21:02]

parameters as columns. So you can't really filter by different settings that you ran your experiments with.

Speaker 1 [21:09]

And I like to use that to give me

Speaker 2 [21:11]

to give me some

Speaker 1 [21:11]

some ideas on how to progress, what kind of

Speaker 2 [21:14]

what kind of other experiments I should be running next sacred supports both

Speaker 1 [21:20]

both development as well as

Speaker 2 [21:22]

as well as a reproducible

Speaker 1 [21:23]

well as a reproducibility mode. However, you do have to remember to set a specific flag.

Speaker 2 [21:29]

flag to enforce reproducibility.

Speaker 1 [21:30]

reproducibility mode. Otherwise, it will not complain if you're

Speaker 2 [21:33]

if you're a local source.

Speaker 1 [21:34]

local source quote there.

Speaker 2 [21:35]

code directory is.

Speaker 1 [21:37]

is dirty.

Speaker 2 [21:42]

it to reproduce in sacred. There is a

Speaker 1 [21:45]

there is a good amount

Speaker 2 [21:46]

good amount of manual steps necessary.

Speaker 1 [21:49]

I personally don't think this is much of a problem. Like I said,

Speaker 2 [21:54]

I said important is that you can

Speaker 1 [21:56]

You can reproduce if you need to.

Speaker 2 [21:56]

reproduce I think, personally, it's okay.

Speaker 1 [21:58]

I think... it's okay if that includes some manual steps.

Speaker 2 [22:01]

manual steps.

Speaker 1 [22:02]

However, again, with the backup analogy, if it's annoying to try out your backup,

Speaker 2 [22:08]

backup, you're probably going to do it, right?

Speaker 1 [22:10]

to do it, right? So you're not really sure.

Speaker 2 [22:12]

if you can reproduce or not.

Speaker 1 [22:13]

reduce or not if you haven't actually gone through

Speaker 2 [22:15]

gone through these steps at least once.

Speaker 1 [22:16]

this. MLflow is actually somewhat similar.

Speaker 2 [22:22]

somewhat similar, again it's a

Speaker 1 [22:23]

Again, it's a Python package. In this case, you have to menu.

Speaker 2 [22:27]

You have to manually register any parameters you want to have displayed.

Speaker 1 [22:31]

which Seiko did

Speaker 2 [22:32]

sacred did for you automatically.

Speaker 1 [22:35]

What I really like about

Speaker 2 [22:37]

about MLflow is the way

Speaker 1 [22:39]

way that it unfolds.

Speaker 2 [22:39]

that... That it enforces.

Speaker 1 [22:40]

that your local environment, like virtual environment or condo environment, is clean.

Speaker 2 [22:46]

clean.

Speaker 1 [22:46]

in a super non-intrusive way.

Speaker 2 [22:48]

intrusive way, like you're

Speaker 1 [22:49]

like you don't have to do anything and it just checks that it's it's up to date and it's

Speaker 2 [22:53]

up-to-date and installs it's necessary I found that really really nice

Speaker 1 [22:56]

But really, really nice.

Speaker 2 [22:58]

Another thing I found nice is this idea.

Speaker 1 [22:59]

nice is this idea of this ML project file, which is somewhat similar to a Docker file in that it defines

Speaker 2 [23:05]

that it defines different entry points for.

Speaker 1 [23:06]

Three points for your...

Speaker 2 [23:08]

for your training process.

Speaker 1 [23:11]

As soon as you add this ML project file to your project,

Speaker 2 [23:13]

project file to your repository.

Speaker 1 [23:13]

to your repository, you can just give somebody the...

Speaker 2 [23:17]

URL of the Git project.

Speaker 1 [23:18]

of the Git project and tell them to do MLflow run URL of that project.

Speaker 2 [23:22]

and it will run and you will

Speaker 1 [23:24]

run and you will get reproduced.

Speaker 2 [23:24]

get reproducible results. So that is also pretty cool.

Speaker 1 [23:30]

MLflow comes with its own.

Speaker 2 [23:32]

its own leaderboard.

Speaker 1 [23:33]

One thing it didn't seem to do automatically is flag whether an experiment failed or did not fail.

Speaker 2 [23:39]

So all of these that are like empty in the last metrics column.

Speaker 1 [23:41]

matrix column there actually failed but it doesn't display it to me in a nice visual manner parameters however are done extremely

Speaker 2 [23:49]

done extremely well in this. So you can, you will have.

Speaker 1 [23:51]

and you will have like a dictionary-like parameters column and just can click on.

Speaker 2 [23:57]

Click on one of these and explode.

Speaker 1 [23:58]

and exploded to being its own column. And I found that really nice and convenient.

Speaker 2 [24:02]

really nice and convenient to work with.

Speaker 1 [24:06]

MLflow does have a development as

Speaker 2 [24:08]

as well as a reproducibility mode, however...

Speaker 1 [24:14]

It does, if you do not

Speaker 2 [24:15]

If you do not MLflow run some URL, but rather do MLflow run your local directory,

Speaker 1 [24:21]

It will not enforce you to commit your local changes. And there is no way to make it do it. And it will record the old commit.

Speaker 2 [24:30]

the old commit hash with a...

Speaker 1 [24:30]

which is now outdated, so you will have...

Speaker 2 [24:33]

So you will have wrong information in your experiments database.

Speaker 1 [24:36]

So be aware of that. You can already guess being able to reproduce is much easier in MLflow. You need to obtain the data in some way. MLflow does not care about data.

Speaker 2 [24:49]

about data at all, and then it's just run.

Speaker 1 [24:50]

then it's just running one simple command. The final one I want to look at is...

Speaker 2 [24:57]

want to look at is DVC data version control.

Speaker 1 [24:59]

version control. And you already heard in the name where the

Speaker 2 [25:01]

where the focus of this tool lies.

Speaker 1 [25:06]

you get

Speaker 2 [25:06]

Not a Python library, but rather a command line.

Speaker 1 [25:07]

another a command line uh

Speaker 2 [25:10]

a tool that has an interface quite similar to Git.

Speaker 1 [25:14]

And you use that to manage your data. So at the beginning of the project, you would add your data to your repository. And then DVC works in a pipeline.

Speaker 2 [25:27]

In a pipeline manner, meaning you set up a pipeline.

Speaker 1 [25:30]

So set up a pipeline from your raw data to your final results.

Speaker 2 [25:34]

And then when anything changes,

Speaker 1 [25:35]

changes, if you change any file that is included in that pipeline, you can just use one simple

Speaker 2 [25:40]

one simple command to rerun everything that is necessary.

Speaker 1 [25:44]

I urge you to read the documentation like the Getting Started.

Speaker 2 [25:48]

the Getting Started Guide for DDC. It's really, really nice.

Speaker 1 [25:50]

Really, really nicely written. Really impressive. One thing DVC does not try to solve is...

Speaker 2 [25:57]

to solve is a leaderboard what you if you

Speaker 1 [26:00]

If you want to compare your models,

Speaker 2 [26:02]

models, that is the only thing that you get.

Speaker 1 [26:03]

that you get, a very...

Speaker 2 [26:04]

A very simple text.

Speaker 1 [26:05]

Simple text view. There's no idea of like recording permit.

Speaker 2 [26:08]

parameters or something.

Speaker 1 [26:08]

or something like that, there's no certain

Speaker 2 [26:10]

There is no sorting, searching, filtering, nothing like that.

Speaker 1 [26:15]

which also means that a development mode is created.

Speaker 2 [26:17]

and mode is kind of a moot point.

Speaker 1 [26:19]

point. And as you can see, DVC really concentrates.

Speaker 2 [26:24]

really concentrates on data and code,

Speaker 1 [26:27]

doesn't really care about any of

Speaker 2 [26:28]

about any of the aspects of reproducibility.

Speaker 1 [26:33]

one thing I see a bit critical here

Speaker 2 [26:36]

critical here is that you really need to make sure that

Speaker 1 [26:38]

to make sure that your pipeline

Speaker 2 [26:39]

that your pipeline is set up correctly.

Speaker 1 [26:41]

If you add a new data.

Speaker 2 [26:42]

Add a new dataset or

Speaker 1 [26:42]

set or fire.

Speaker 2 [26:43]

file. Or if you

Speaker 1 [26:44]

if you add a new script,

Speaker 2 [26:45]

add a new script file and you'd

Speaker 1 [26:46]

script file and you do not include that in the pipeline, then DVC will not know that it needs to rerun something if you

Speaker 2 [26:53]

something if you changed that file.

Speaker 1 [26:55]

So there's definitely a need for code.

Speaker 2 [26:57]

a need for code review so that you review other people's pipelines.

Speaker 1 [27:04]

So reproducing with DVC is the most straightforward for all of the tools I've showed you because you don't even have to get the data. DVC does all of this.

Speaker 2 [27:15]

That's all of the things for you.

Speaker 1 [27:18]

And the question now, again.

Speaker 2 [27:19]

Now, Aganis, how do you want to work? I think these tools...

Speaker 1 [27:24]

kind of reflect how their developers want to work as a data scientist.

Speaker 2 [27:28]

scientist, that

Speaker 1 [27:29]

Does that match how you want to work?

Speaker 2 [27:31]

Maybe one of the other tools out there.

Speaker 1 [27:33]

other tools out there are the right ones for you. I hope that with the framework that I've given you,

Speaker 2 [27:39]

That you are able to go and evaluate.

Speaker 1 [27:41]

and evaluate how well

Speaker 2 [27:44]

the tool does on reproducibility.

Speaker 1 [27:45]

reproducibility and how

Speaker 2 [27:46]

and how well it matches the way that you...

Speaker 1 [27:48]

that you want to work.

Speaker 2 [27:54]

The reason I wanted to give this talk that I did not talk about at the beginning is envy. I do feel envious of software engineers.

Speaker 1 [28:03]

When I look at...

Speaker 2 [28:04]

at their, what seems to me, very much established

Speaker 1 [28:06]

very much established best.

Speaker 2 [28:07]

best practices like code review like

Speaker 1 [28:10]

review, like continuous integration.

Speaker 2 [28:11]

continuous integration, like unit testing, and how they have really nicely usable tools that support them.

Speaker 1 [28:17]

support them.

Speaker 2 [28:18]

in following these best practices.

Speaker 1 [28:23]

I do recognize, however, of course, data.

Speaker 2 [28:24]

Of course, data science is a much younger discipline. I hope that with talks like mine,

Speaker 1 [28:29]

like mine, and other similar

Speaker 2 [28:30]

And other similar talks at this and other conferences. We can have it.

Speaker 1 [28:33]

We can have a discussion about

Speaker 2 [28:35]

What should our best practices be?

Speaker 1 [28:36]

practices be and

Speaker 2 [28:37]

be? And how should tooling look like?

Speaker 1 [28:39]

What does schooling look like to support?

Speaker 2 [28:39]

to support these best practices.

Speaker 1 [28:43]

So the thought I want to leave you with today, the question I want to...

Speaker 2 [28:47]

The question I want to leave you with today is how do.

Speaker 1 [28:48]

is how do we...

Speaker 2 [28:49]

we, as data scientists, want to work. Thank you. Thanks, Kat, for this wonderful talk. Is there anybody who has questions for Kat still? Let's start with you up here.

Speaker 3 [29:15]

Yeah, thank you for a nice talk. You talked a lot about and focused on the reproducibility with these tools. I'm not sure, and I hopefully look it up afterwards, how the tools support data pipelines themselves and distribute the stuff that needs to be done, gathering data and everything. have you seen the talk about Kedro yesterday and can you do you know about Kedro which seems to be another new open source tool about data pipelines and that also might support this kind of reproducibility I'm not sure if that's a goal

Speaker 1 [29:52]

I don't know that, but can I ask you to maybe, I'm sorry, I kind of want to have this a bit more discussion also, learn from you.

Speaker 2 [29:59]

Where do you see the need for

Speaker 1 [29:59]

Where do you see? the need for these data pipelines in this

Speaker 2 [30:04]

in this setting.

Speaker 1 [30:04]

setting.

Speaker 3 [30:05]

Okay, for me, I'm not in this 100% data science workflow because we are training model like on a weekly basis and applying it. So there's more for us, the training data is constantly changing.

Speaker 1 [30:23]

Well, then, I guess, sorry.

Speaker 3 [30:25]

So generating the, okay, this is the training data we are using for training our models, which takes a lot of time, is like a big part of what we need to invest work in. And training the model is rather stable because we have this model that we found out is good and aren't working on it too much.

Speaker 1 [30:46]

too much then i think your use cache actually is following on the right hand side that i did not consider today and i think tooling i'm not saying that there can't be tools that

Speaker 2 [30:54]

There can't be tools that support both.

Speaker 1 [30:55]

support both. But I think tooling for the left-hand side will look, has very different requirements.

Speaker 2 [31:00]

requirements than tooling on the right-hand side.

Speaker 1 [31:03]

Yep. Thank you.

Speaker 2 [31:06]

Who has the next question? Okay.

Speaker 4 [31:13]

Hello, thank you for your talk. I'm not really a data scientist. I'm more a classical scientist using Python for some stuff. And I'm wondering if what you're saying here, which is merely, I think you apply it more to the machine learning and the data computer world thing, in how far you see overlaps or in your search have found connections with classical science experiments, where, as example, massive parts of the flow you do has nothing to do with software but has to do with, I don't know, telescopes or, in my case, electromagnetic fields you measure and your settings and so on. Can you comment? Have you seen some interaction with that world?

Speaker 1 [31:55]

with that world. Yes, definitely.

Speaker 2 [31:57]

Definitely, and you definitely need to.

Speaker 1 [31:58]

Definitely need different, maybe not tooling, different.

Speaker 2 [32:01]

tooling, different protocols to support classic science workflows.

Speaker 1 [32:04]

workflows I do see one difference though that your outcome like your your outcome of a classical science experiment is the often the

Speaker 2 [32:13]

often the essence.

Speaker 1 [32:14]

the essence of what it's

Speaker 2 [32:15]

of what it's all about, right?

Speaker 1 [32:16]

all about, right? For us, the outcome is the model. But in a classical science experiment, you want to have a paper that really describes the

Speaker 2 [32:23]

the essence of your experiments.

Speaker 1 [32:23]

effect. your experiments, what do you draw from

Speaker 2 [32:27]

you draw from this experiment?

Speaker 1 [32:28]

from this experiment and then somebody can take that and implement.

Speaker 2 [32:30]

and implement it on their own, and this is where I kind of see the difference. And we don't really have that, so classic science needs more.

Speaker 5 [32:44]

Thank you for your talk. It was great. And I wanted to ask you that you've been talking about all these tools like DVC MLflow and so on. Don't you think that they kind of cover all the important stuff, but it feels like one of the tools, one of them covers one important thing, another important thing. Can we do something like contribute to those tools or should we like develop something else? because in my practice, when I tried to use all of them, it was like, I need these, but it lacks something another tool has. So I ended up in building something more or less custom, which wasn't really convenient because when you're just one data scientist, you cannot build something really convenient, great in terms of code quality, UI, and all this kind of stuff. So what do you think about that?

Speaker 1 [33:37]

I completely agree with you.

Speaker 5 [33:38]

I,

Speaker 1 [33:39]

None of these tools really covers all.

Speaker 2 [33:41]

covers all the bases.

Speaker 1 [33:43]

So far, the best that we have, all of these are open source tools.

Speaker 2 [33:47]

source tools, so yes, you can contribute.

Speaker 1 [33:50]

I kind of want to take up again this idea of a discussion. Not just me telling you how I work and how that influences what kind of tools I would use, but rather that we have a discussion.

Speaker 2 [34:02]

have a discussion and find how we

Speaker 1 [34:03]

how we work,

Speaker 2 [34:04]

work. what our best practices and our tooling could look like.

Speaker 1 [34:04]

what, tooling could look like. And I don't think we're there yet.

Speaker 2 [34:07]

I don't think we are there yet. I completely agree with you. Maybe you are there. Hi, and thanks for your nice talk.

Speaker 3 [34:20]

Um, I

Speaker 1 [34:21]

I was a little

Speaker 2 [34:22]

I was a little bit wondering...

Speaker 1 [34:22]

bit wondering um

Speaker 2 [34:24]

is there still a place in your

Speaker 1 [34:25]

place in your kind of model

Speaker 2 [34:26]

kind of model exploration development workflow for Jupyter notebook or are you doing everything in like separate scripts because I I think most

Speaker 1 [34:34]

I think most of the tools you showed, they were all kind of working on Python.

Speaker 2 [34:38]

on Python scripts.

Speaker 1 [34:39]

Python scripts, so maybe you can elaborate a little bit on that. Absolutely, I didn't expect that question. I do love Jupyter notebooks as a tool for any kind of exploratory work, for plotting, for visualization. I do not believe that it

Speaker 2 [34:54]

that it is the right to

Speaker 1 [34:55]

Right tool for writing.

Speaker 2 [34:56]

for running reproducible experiments.

Speaker 1 [34:59]

I don't believe that because of issues that you get with out-of-order execution, of scoping issues.

Speaker 2 [35:05]

issues that are inherent

Speaker 1 [35:06]

that are inherent to Jupiter.

Speaker 2 [35:08]

to Jupyter Notebooks.

Speaker 1 [35:09]

So, yes, in my view of this, it's...

Speaker 2 [35:14]

Using notebooks for exploration.

Speaker 1 [35:15]

for exploration and then

Speaker 2 [35:16]

and then start using scripts.

Speaker 1 [35:18]

In fact, one of these libraries, I think Thackert or MLflow, actually forbids you to use them in a notebook.

Speaker 2 [35:18]

In fact, one of these book. It will throw an error if you try to do so. One last question, perhaps? So many people. I've not been in that corner yet.

Speaker 3 [35:36]

Hello, I'm a fellow data scientist, and what we heard a lot of times is that it's very important to document your stuff. I mean, you do experiment, you probably scoped your experiment before, and do you document it in your Git history, do you have a separate file, do you document your Jupyter notebook? i mean you can put your documentation at a lot of places but um i think it's very important if you establish some workflow like this that you have also done an overview what you have done and also to do it in a consistent way and i've tried a lot of ways to do it but i haven't come up with a good solution yeah i would say because always a little bit different i

Speaker 1 [36:28]

I can't offer you a good solution either,

Speaker 3 [36:28]

Thank you.

Speaker 1 [36:32]

especially for this whole writing some kind of report or final document.

Speaker 2 [36:37]

documentation about what you found

Speaker 1 [36:38]

what you found in this project. I'm sorry, I can't answer that part of the question. However, I want to point you again to the Git mode. I'm not searching for it now. Because in that mode, you need to have everything to run that experiment somewhere, right? It needs to be documented in some kind of file that sets up your continuous...

Speaker 2 [36:59]

your continuous experimentation framework.

Speaker 1 [37:02]

And thereby, you do have...

Speaker 2 [37:04]

have documentation.

Speaker 1 [37:05]

documentation by the sheer necessity of having it. So it's not text somewhere, it's in a configuration file. And anybody who wants...

Speaker 2 [37:13]

to manually reproduce on their machine

Speaker 1 [37:15]

their machine can look at that file

Speaker 2 [37:17]

and get all the information there.

Speaker 1 [37:18]

information they need on how

Speaker 2 [37:19]

They need on how to get.

Speaker 1 [37:20]

how to get set up. And I find that a really nice, like implicit documentation benefit.

Speaker 2 [37:24]

implementation benefit that you also see in a lot of software engineering tooling. Thank you very much, Kat. Thanks for the wonderful talk again.

Katharina Rasch

Katharina Rasch is a computer scientist with a PhD from KTH Stockholm. From 2014 to 2017 she was a data scientist / computer vision researcher at zalando. Now she is a freelance data scientist in Berlin. At the moment, Katharina is obsessed with professionalising AI development. Less chaos, please!

Social card for talk: Tools that help you get your experiments under control