Vetiver, the oil of tranquility, is used as a stabilizing ingredient in perfumery to preserve more volatile fragrances.
The goal of vetiver is to provide fluent tooling to version, share, deploy, and monitor a trained model. Functions handle both recording and checking the model’s input data prototype, and predicting from a remote API endpoint. The vetiver package is extensible, with generics that can support many kinds of models, and available for both R and Python. To learn more about vetiver, see:
You can use vetiver with:
You can install the released version of vetiver from CRAN with:
install.packages("vetiver")
And the development version from GitHub with:
# install.packages("devtools")
::install_github("rstudio/vetiver-r") devtools
A vetiver_model()
object collects the information needed
to store, version, and deploy a trained model.
library(parsnip)
library(workflows)
data(Sacramento, package = "modeldata")
<- rand_forest(mode = "regression")
rf_spec <- price ~ type + sqft + beds + baths
rf_form
<-
rf_fit workflow(rf_form, rf_spec) %>%
fit(Sacramento)
library(vetiver)
<- vetiver_model(rf_fit, "sacramento_rf")
v
v#>
#> ── sacramento_rf ─ <butchered_workflow> model for deployment
#> A ranger regression modeling workflow using 4 features
You can version and share your
vetiver_model()
by choosing a pins “board” for it, including a
local folder, RStudio Connect, Amazon S3, and more.
library(pins)
<- board_temp()
model_board %>% vetiver_pin_write(v) model_board
You can deploy your pinned
vetiver_model()
via a Plumber API, which can be hosted in a variety
of ways.
library(plumber)
pr() %>%
vetiver_api(v) %>%
pr_run(port = 8088)
If the deployed model endpoint is running via one R process (either remotely on a server or locally, perhaps via a background job in the RStudio IDE), you can make predictions with that deployed model and new data in another, separate R process. First, create a model endpoint:
library(vetiver)
<- vetiver_endpoint("http://127.0.0.1:8088/predict")
endpoint
endpoint#>
#> ── A model API endpoint for prediction:
#> http://127.0.0.1:8088/predict
Such a model API endpoint deployed with vetiver will return predictions for appropriate new data.
library(tidyverse)
<- Sacramento %>%
new_sac slice_sample(n = 20) %>%
select(type, sqft, beds, baths)
predict(endpoint, new_sac)
#> # A tibble: 20 x 1
#> .pred
#> <dbl>
#> 1 165042.
#> 2 212461.
#> 3 119008.
#> 4 201752.
#> 5 223096.
#> 6 115696.
#> 7 191262.
#> 8 211706.
#> 9 259336.
#> 10 206826.
#> 11 234952.
#> 12 221993.
#> 13 204983.
#> 14 548052.
#> 15 151186.
#> 16 299365.
#> 17 213439.
#> 18 287993.
#> 19 272017.
#> 20 226629.
This project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.
For questions and discussions about modeling packages, modeling, and machine learning, please post on RStudio Community.
If you think you have encountered a bug, please submit an issue.
Either way, learn how to create and share a reprex (a minimal, reproducible example), to clearly communicate about your code.