Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ML keras #4172

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

ML keras #4172

wants to merge 1 commit into from

Conversation

bikagit
Copy link

@bikagit bikagit commented Aug 22, 2024

Integrating Keras capabilities to OPM.
Draft pull request to test/discuss implications of the changes in OPM.

This enables the straightforward and adaptable integration of neural networks into OPM scripts. These models are initially trained using the Keras library in Python, stored in a format readable for the OPM framework and subsequently deployed within OPM.
When the user initializes and loads a stored Keras model inside an OPM script, an automated deployment process handles all the translation. This process works by operating a series of steps handling model interpretation, layer conversion, optimization, and code generation steps to adapt the Keras model to a native OPM function.

@totto82
Copy link
Member

totto82 commented Aug 22, 2024

jenkins build this please

@daavid00
Copy link
Contributor

jenkins build this please

@atgeirr
Copy link
Member

atgeirr commented Aug 22, 2024

This does not add a dependency on a third party library, so then I assume it instead embeds Keras in some way? Or have I misunderstood the purpose of this PR?

@bska
Copy link
Member

bska commented Aug 22, 2024

Is there a reason this is added to opm-common instead of being a separate repository? Do we, somehow, need to make (selected) objects in this repository, or any of its downstream repositories for that matter, "aware" of Keras?

@bikagit
Copy link
Author

bikagit commented Aug 22, 2024

This does not add a dependency on a third party library, so then I assume it instead embeds Keras in some way? Or have I misunderstood the purpose of this PR?

We use Keras for the training process (it doesnt need to be done in OPM). The generated models are subsequently embedded and run in OPM. I have updated the description to provide some context.

@totto82
Copy link
Member

totto82 commented Aug 26, 2024

jenkins build this please

@daavid00
Copy link
Contributor

jenkins build this please

@bska
Copy link
Member

bska commented Aug 28, 2024

Maybe I'm missing something, but as far as I can tell no-one have answered my question from last week

Is there a reason this is added to opm-common instead of being a separate repository? Do we, somehow, need to make (selected) objects in this repository, or any of its downstream repositories for that matter, "aware" of Keras?

I would really like an answer to this before I consider the details of the PR.

@totto82
Copy link
Member

totto82 commented Aug 28, 2024

I would really like an answer to this before I consider the details of the PR.

Sorry for not answering earlier. The idea is to apply the ML-Keras inside OPM for different tasks. This is only the first PR to add the Keras ML model. The applications will follow. For an example of a ML near well model using ML-Keras check out https://github.com/cssr-tools/ML_near_well. Since the ML-Keras model framework is general. We hope it would be useful for the OPM community and therefore suggest to add it to opm-common

@bska
Copy link
Member

bska commented Aug 28, 2024

The idea is to apply the ML-Keras inside OPM for different tasks [...] Since the ML-Keras model framework is general, we hope it would be useful for the OPM community and therefore suggest to add it to opm-common

Okay, utility/convenience is clearly one reason for adding it here. Would it be impossible to make [your/certain use cases] work if it were located elsewhere? Do you, for instance, need access to the internals/private data members or member functions of Well or Connection objects or similar in your use cases?

@totto82
Copy link
Member

totto82 commented Aug 28, 2024

jenkins build this please

@bikagit bikagit marked this pull request as ready for review August 28, 2024 16:43
@bikagit bikagit marked this pull request as draft August 29, 2024 10:38
@bikagit
Copy link
Author

bikagit commented Sep 1, 2024

The idea is to apply the ML-Keras inside OPM for different tasks [...] Since the ML-Keras model framework is general, we hope it would be useful for the OPM community and therefore suggest to add it to opm-common

Okay, utility/convenience is clearly one reason for adding it here. Would it be impossible to make [your/certain use cases] work if it were located elsewhere? Do you, for instance, need access to the internals/private data members or member functions of Well or Connection objects or similar in your use cases?

Exact! For instance, we need access to the automatic differentiation tools within OPM.

@totto82
Copy link
Member

totto82 commented Sep 6, 2024

jenkins build this please

@bikagit bikagit marked this pull request as ready for review September 6, 2024 13:41
Copy link
Member

@atgeirr atgeirr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a lot of changes needed here. I have only looked at the C++ code, and I probably missed some. I have not really checked that the activation functions or the layers do what a user of Keras would expect. I have not looked at any of the Python code, someone else must do that.

I have requested many changes, but I hope it provides a useful learning experience. Feel free to ask about anything that is unclear!

opm/ml/ml_tools/__init__.py Outdated Show resolved Hide resolved
opm/ml/keras_model.hpp Outdated Show resolved Hide resolved
opm/ml/keras_model.hpp Outdated Show resolved Hide resolved
opm/ml/keras_model.hpp Outdated Show resolved Hide resolved
opm/ml/keras_model.hpp Outdated Show resolved Hide resolved
opm/ml/keras_model.cpp Outdated Show resolved Hide resolved
opm/ml/keras_model.cpp Outdated Show resolved Hide resolved
opm/ml/keras_model.cpp Outdated Show resolved Hide resolved
opm/ml/keras_model.cpp Outdated Show resolved Hide resolved
opm/ml/keras_model.cpp Outdated Show resolved Hide resolved
Copy link
Contributor

@kjetilly kjetilly left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some comments on the python bits. I think a major point is that the folder opm/ml_tools, which contains only python code, should probably be moved to say the python folder or similar. And since these scripts use external libraries (tf, numpy, keras) I would really like to see a requirements.txt file specifying the versions used. Especially tensorflow is known to be problematic her.

opm/ml/ml_tools/kerasify.py Outdated Show resolved Hide resolved
opm/ml/ml_tools/kerasify.py Outdated Show resolved Hide resolved
opm/ml/ml_tools/kerasify.py Outdated Show resolved Hide resolved
opm/ml/ml_tools/kerasify.py Outdated Show resolved Hide resolved
opm/ml/ml_tools/kerasify.py Outdated Show resolved Hide resolved
opm/ml/ml_tools/kerasify.py Outdated Show resolved Hide resolved
opm/ml/ml_tools/__init__.py Outdated Show resolved Hide resolved
opm/ml/ml_tools/scaler_layers.py Outdated Show resolved Hide resolved
@bikagit
Copy link
Author

bikagit commented Sep 27, 2024

Thanks all for the valuables comments and suggestions.
We have started adding most of the modifications.

@bikagit bikagit requested a review from atgeirr October 11, 2024 14:55
@daavid00
Copy link
Contributor

jenkins build this please

1 similar comment
@daavid00
Copy link
Contributor

jenkins build this please

Copy link
Member

@atgeirr atgeirr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have looked at the c++ parts, which have been improved a lot. Still quite a few things to address, but I think this will converge eventually!

opm/ml/ml_model.hpp Outdated Show resolved Hide resolved
data_.resize(i * j * k * l);
}

inline void Flatten() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is still a problem.

opm/ml/ml_model.hpp Outdated Show resolved Hide resolved
opm/ml/ml_model.hpp Outdated Show resolved Hide resolved
opm/ml/ml_model.hpp Outdated Show resolved Hide resolved
opm/ml/ml_model.hpp Show resolved Hide resolved
opm/ml/ml_model.cpp Outdated Show resolved Hide resolved
opm/ml/ml_model.cpp Outdated Show resolved Hide resolved
opm/ml/ml_model.cpp Outdated Show resolved Hide resolved
opm/ml/ml_model.cpp Outdated Show resolved Hide resolved
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants