Version

Review of previous steps

Show the code from previous steps
library(tidymodels)
library(vetiver)

car_mod <-
    workflow(mpg ~ ., linear_reg()) %>%
    fit(mtcars)
v <- vetiver_model(car_mod, "cars_mpg")
Show the code from previous steps
from vetiver.data import mtcars
from vetiver import VetiverModel
from sklearn import linear_model

car_mod = linear_model.LinearRegression().fit(mtcars, mtcars["mpg"])

v = VetiverModel(car_mod, model_name = "cars_mpg", 
                 save_ptype = True, ptype_data = mtcars)

Store and version your model

You can store and version your model by choosing a pins “board” for it. Your board for model pins can be set up to use a local folder, RStudio Connect, Amazon S3, and more. When we write the vetiver model to our board, the binary model object is stored on our board together with necessary metadata, like the packages needed to make a prediction and the model’s input data prototype for checking new data at prediction time.

Note

We’ll use a temporary board that will be automatically deleted for this demo, but for your real work, you will want to choose the best board for your particular infrastructure.

Most pins boards have versioning turned on by default, but we can turn it on explicitly for our temporary demo board.

library(pins)
model_board <- board_temp(versioned = TRUE)
model_board %>% vetiver_pin_write(v)
from pins import board_temp
from vetiver import vetiver_pin_write
model_board = board_temp(versioned = True, allow_pickle_read = True)
vetiver_pin_write(model_board, v)

Let’s train a new kind of model for mtcars, a decision tree instead of our original linear model.

car_mod <-
    workflow(mpg ~ ., decision_tree(mode = "regression")) %>%
    fit(mtcars)

v <- vetiver_model(car_mod, "cars_mpg")

model_board %>% vetiver_pin_write(v)
Creating new version '20220612T202140Z-7bd23'
Writing to pin 'cars_mpg'
from sklearn import tree
car_mod = tree.DecisionTreeRegressor().fit(mtcars, mtcars["mpg"])

v = VetiverModel(car_mod, model_name = "cars_mpg", 
                 save_ptype = True, ptype_data = mtcars)
vetiver_pin_write(model_board, v)

Both versions are stored, and we have access to both.

model_board %>% pin_versions("cars_mpg")
# A tibble: 2 × 3
  version                created             hash 
  <chr>                  <dttm>              <chr>
1 20220612T202138Z-e5ad4 2022-06-12 14:21:00 e5ad4
2 20220612T202140Z-7bd23 2022-06-12 14:21:00 7bd23
model_board.pin_versions("cars_mpg")
              created   hash                 version
0 2022-06-12 14:21:38  6ec26  20220612T142138Z-6ec26
1 2022-06-12 14:21:40  68245  20220612T142140Z-68245

The primary purpose of pins is to make it easy to share data artifacts, so depending on the board you choose, your pinned vetiver model can be shareable with your collaborators.