PGPYML

Loading the Model

The pgpyml extension will load the model you trained in the memory to be used in a Postgres session. The model will be loaded to the GD dictionary, the key will be the path to your model prefixed with model_. That means that if you load the model /home/vagrant/examples/iris/models/iris_decision_tree.joblib you will be able to access it in your plpython3u function with:

python model = GD['model_/home/vagrant/examples/iris/models/iris_decision_tree.joblib']

If you are using the predict function or the classification triggers you don't need to worry about loading the model by yourself, the pgpyml extension will load it and store in the GD dictionary.

Although you don't need to load the model manually, you can use the load_model function to load (or pre-load) a specific model to the memory. You just need to call this function with passing the model path as argument:

sql SELECT load_model('/home/vagrant/examples/iris/models/iris_decision_tree.joblib');

The load_model signature is: sql FUNCTION load_model(model_path text) RETURNS BYTEA

When you invoke the function load_model manually it will replace any model that already is in the memory to the specified path and will returs a bytea representation of the loaded model.

The model must be a joblib file. You can refer the sklearn model persistence documentation to see more about saving your model. Pay extra attention to the Security & maintainability limitations section, the information in that section can be applyed to pgpyml. Never use an untrusted pickle/joblib file.

Checking loaded models

Once you have used one of the predition functions, classification trigger or even loaded your model mannually you may want to know wich models are in your memory. You can use the get_loaded_models function to check the models that are stored in your memory. This function will return a table that cotains the model key in the GD dictionary, the model path used to load the model and a bytea representation of the loaded model.

You can call this function using:

sql SELECT * FROM get_loaded_models();

The get_loaded_models signature is:

sql FUNCTION get_loaded_models() RETURNS TABLE ( model_key TEXT, model_path TEXT, model BYTEA )

If you want to check if a specific model is loaded in your memory you can use the is_model_loaded function to check for a specific model:

sql SELECT is_model_loaded('/home/vagrant/examples/iris/models/iris_decision_tree.joblib'); -- Returns True if the model is already loaded in the memory

The function signature is: sql FUNCTION is_model_loaded(model_path text) RETURNS BOOL

Remove models from the memory

If you want to remove a model from the memory you can use the unload_model function. You just need to pass the model path and if it is found in the GD dictionay it will be deleted:

```sql -- Remove the model from the memory SELECT unload_model('/home/vagrant/examples/iris/models/iris_decision_tree.joblib');

-- Checks if the model stills in the GD dictionary SELECT is_model_loaded('/home/vagrant/examples/iris/models/iris_decision_tree.joblib'); -- Returns False ```

The function signature is:

sql FUNCTION unload_model(model_path text) RETURNS VOID