PERASPERA.IO

Machine Learning, for Humans

Peraspera.io does the dirty work of machine learning,
so you can focus on your data

Train


Train, test and improve your models declaratively. Scale up to hundreds of GPUs with a single command.

Track


Dataset management, model traceability and reproducibility are handled for you. Models are tested, scored and trended automatically.

Deploy


Deployment to production with a single command. Quality gates ensure you only deploy improved models.

Ready to save your team's time and sanity?

Get in touch and we'll contact you to talk about how Peraspera.io can make your machine learning development faster and easier.



Less code, more learning

Our declarative, low-code framework handles most machine learning tasks with simple definitions

  • Common machine learning patters are handled by decorators
  • Effortlessly share contrally-stored datasets, hyperparameters, and estimator configurations
  • Drop down to lower level APIs when you need to

# Train a model without a line of imperative code

@Requires(
    train=Dataset('iris.train'),
    parameters=Parameters('my-hyperparameters')
    estimator=Estimator(xgb.XGBClassifier)
)
@Produces(Model{'iris-model'})
def train_model(train, parameters):
    pass



# Train your model with a single command

$ ml train
Trained model iris in 0.1 seconds

Datasets that manage themselves

Never email another CSV file again

  • Datasets are stored centrally for reproducibility
  • Declare a dataset and it becomes available to you and all of your collaborators
  • We handle version control of even the largest datasets

# Define a dataset and it becomes available to everyone

def create_dataset():
    Dataset('iris')
        .of('https://example.com/iris.csv')
        .split(test=0.2)

# Reference a dataset by name and it appears like magic

@Requires(
    train=Dataset('iris.train')
)
def train_model(train):
    df: pd.DataFrame = train.get()
    ...



# We handle version control for you

$ ml datasets
Name        Parent  Type       Shape    Revisions
--------    ------  ---------  -------  ---------
iris                DataFrame  (150,5)  1
iris.train  iris    DataFrame  (120,5)  1
iris.test   iris    DataFrame  (30,5)   1

Integrated model performance tracking

We track model performance over time for you.

  • Common metrics are automatically computed at the end of every test run
  • Metrics are centrally stored for historical trending

# Run tests like you would any program with any dataset you want

$ ml test iris-model --dataset=new-iris
Accuracy  Recall  Precision  F1
--------  ------  ---------  ----
0.9       0.99    0.99       0.99

# Easily track metrics over time

$ ml metrics iris-model
Revision  Test       Accuracy  Recall  Precision  F1
--------  --------   ------    ------  ---------  ----
1         iris.test  0.93      0.99    0.99       0.99
2         new-iris   0.9       0.99    0.90       0.99

Unlimited Power for Model Training

We handle the complexity of training models at any scale.

  • Run locally or on hundreds of GPUs with a single command
  • We present one unified API that handles the details for you everything

# Train on your local machine

$ ml train
Training locally on 16 CPU cores

# or train on a dozen GPUs

$ ml train --on my-gpu-cluster
Training on 12 GPU cluster

Built-in Traceability and Reproducability

For every model you train, we automatically track the estimators, datasets, hyperparameters and code that created it.

  • Recall the exact inputs that created every model
  • Rebuild old models with new inputs with a single command

$ ml models
Name          Type           Revisions
------------  -------------  ---------
iris-model    XGBClassifier  1

$ ml model iris-model
Dataset
    train = iris.train@1
    test = iris.test@1
Estimator = xgboost.XGBClassifier
Hyperparamters = my-hyperparamters@124

# To check in your code, model, dataset, and hyperparameters, just do
$ ml save
Saved iris-model revision=12345

Push-button production deployment

Deploy models to production with a single command

  • Classification and regression problems are automatically predicted
  • Model quality gates prevent poorly performing models from being deployed

# Declare a request handler for your model

@Server(model=Model('iris-model'))
def request_handler(model, request):
    pass



# Deploy to the cloud

$ ml deploy iris-model
Endpoint: https://peraspera.io/api/iris-guesser/iris-model

$ curl -s -X POST \
  -d '{"sepal_length":5.9,"sepal_width":3.0,"petal_length":5.1,"petal_width":1.8}' \
  https://peraspera.io/api/iris-guesser/iris-model
{ "species": "virginica" }

Ready to make your team more productive?

We'd love to talk to you about how we can help your team perform better. Grab a time slot on our calendar and we'll be in touch.