Metadata-Version: 2.1
Name: spotty
Version: 1.2.3
Summary: Training deep learning models on AWS Spot Instances and GCP Preemtible VMs
Home-page: http://github.com/apls777/spotty
Author: Oleg Polosin
Author-email: apls777@gmail.com
License: MIT
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Science/Research
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: Natural Language :: English
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Description-Content-Type: text/markdown
Requires-Dist: boto3 (>=1.9.0)
Requires-Dist: google-api-python-client (>=1.7.8)
Requires-Dist: google-cloud-storage (>=1.15.0)
Requires-Dist: cfn-flip
Requires-Dist: schema
Requires-Dist: chevron

<img src="logo.png" width="370" height="120" />

[![Documentation](https://img.shields.io/badge/documentation-reference-brightgreen.svg)](https://apls777.github.io/spotty)
[![PyPI](https://img.shields.io/pypi/v/spotty.svg)](https://pypi.org/project/spotty/)
![PyPI - Python Version](https://img.shields.io/pypi/pyversions/spotty.svg)
![PyPI - License](https://img.shields.io/pypi/l/spotty.svg)

Spotty drastically simplifies training of deep learning models on [AWS](https://aws.amazon.com/) 
and [GCP](https://cloud.google.com/):

- it makes training on GPU instances as simple as training on your local machine
- it automatically manages all necessary cloud resources including images, volumes, snapshots and SSH keys
- it makes your model trainable in the cloud by everyone with a couple of commands
- it uses [tmux](https://en.wikipedia.org/wiki/Tmux) to easily detach remote processes from their terminals
- it saves you up to 70% of the costs by using [AWS Spot Instances](https://aws.amazon.com/ec2/spot/) 
and [GCP Preemtible VMs](https://cloud.google.com/preemptible-vms/)

## Documentation

- See the [documentation page](https://apls777.github.io/spotty).
- Read [this](https://medium.com/@apls/how-to-train-deep-learning-models-on-aws-spot-instances-using-spotty-8d9e0543d365) 
article on Medium for a real-world example.

## Installation

Requirements:
  * Python >=3.5
  * AWS CLI (see [Installing the AWS Command Line Interface](http://docs.aws.amazon.com/cli/latest/userguide/installing.html)) 
  if you're using AWS
  * Google Cloud SDK (see [Installing Google Cloud SDK](https://cloud.google.com/sdk/install)) 
  if you're using GCP

Use [pip](http://www.pip-installer.org/en/latest/) to install or upgrade Spotty:

    $ pip install -U spotty

## Get Started

1. Prepare a `spotty.yaml` file and put it to the root directory of your project:

   - See the file specification [here](https://apls777.github.io/spotty/docs/configuration/).
   - Read [this](https://medium.com/@apls/how-to-train-deep-learning-models-on-aws-spot-instances-using-spotty-8d9e0543d365) 
   article for a real-world example.

2. Start an instance:

    ```bash
    $ spotty start
    ```

    It will run a Spot Instance, restore snapshots if any, synchronize the project with the running instance 
    and start the Docker container with the environment.

3. Train a model or run notebooks.

    To connect to the running container via SSH, use the following command:

    ```bash
    $ spotty ssh
    ```

    It runs a [tmux](https://github.com/tmux/tmux/wiki) session, so you can always detach this session using
    __`Ctrl + b`__, then __`d`__ combination of keys. To be attached to that session later, just use the
    `spotty ssh` command again.

    Also, you can run your custom scripts inside the Docker container using the `spotty run <SCRIPT_NAME>` command. Read more
    about custom scripts in the documentation: 
    [Configuration: "scripts" section](https://apls777.github.io/spotty/docs/configuration/#scripts-section-optional).

## Contributions

Any feedback or contributions are welcome! Please check out the [guidelines](CONTRIBUTING.md).

## License

[MIT License](LICENSE)


