Abstract: I recently switched from Google Colab to Paperspace Gradient. I had some trouble getting into the workflow, but here are some useful things I found.

Updated: Commanding Paperspace Gradient

UPDATE: Don’t do this. My Paperspace account got terminated. Whoops.

I recently switched from Google Colab to Paperspace Gradient. I had some trouble getting used to the environment. With a homebrewed Jupyter implementation that isn’t great, JupyterLab - while being an improvement on Jupyter Notebook - lacks proper support for code completion, and VS Code remote Jupyter session. While they have support for launching a remote VS Code Jupyter kernel, this doesn’t allow me to interact with the remote filesystem the way JupyterLab does.

When I was using Google Colab, I played around with the package colab_ssh which is a useful library/applet for setting up a Remote SSH session through VS Code, which allows you to run your Jupyter Notebooks on the remote host. I learned after experimenting with it that it has been successfully tested with Gradient and it works!

Now I don’t want to have to pip install colab_ssh every time and hell(!), I don’t want to pip install jax and upgrade all the packages. Now as I discovered (and I believe is documented), you can spin up custom Docker images for your machine! So now I’ve created a Docker image with all those things!. Of course you can spin off your own (I used NVIDIA’s PyTorch image as my base), and for your convenience, I posted my source code here.

This is the first full Docker image I’ve created, so constructive criticism is welcome – I’m always looking to up my game.

The Nitty Gritty

My Dockerfile is pretty simple:

Dockerfile

FROM nvcr.io/nvidia/pytorch:21.04-py3
LABEL Name=paperspace Version=0.0.1
RUN mkdir -p /setup /notebooks
COPY . /setup
RUN /setup/install_deps.sh
COPY ssh_colab.ipynb /notebooks
CMD ["bash", "-c", "/setup/startup.sh"]

First we build off of the PyTorch image from NVIDIA. Then it will install our updated Python, etc. dependencies. When the image starts up, a JupyerLab session opens with the parameters provided by Gradient.

install_deps.sh

#!/bin/sh
pip install -U pip
pip install -r /setup/requirements.txt

startup.sh

#!/bin/sh
jupyter lab --allow-root --ip=0.0.0.0 --no-browser --LabApp.trust_xheaders=True --LabApp.disable_check_xsrf=False --LabApp.allow_remote_access=True --LabApp.allow_origin='*'

The Future

One thing that this could be expanded into is automatically mounting cloud storage using rclone. That is, if they don’t follow Google Colab’s new restrictions on using rclone (or so I’ve heard… I can’t find the source).

See you space cowfolk…