Deepnote is a collaborative data notebook for Python, SQL, and no-code analysis. It runs in the cloud and connects securely to any data source.
In this post, I am gonna show you some interesting usage for Deepnote’s free plan VPS.
Free Plan
For individual data scientists who want to experience the power of Deepnote.
- Up to 3 editors
- Up to 5 projects
- Unlimited Basic machines with 5GB RAM, 2vCPU
- 7 day revision history
Register an account
By default it already has some demo project installed in your account. You can click Run notebook button to start it. Here is a example project “Plato’s Pizza Sales”
Performance Test
- apt update -y && apt install -y curl wget sudo
- curl -sL yabs.sh | bash
Here is what we got:
(venv) root@deepnote:~/work # curl -sL yabs.sh | bash
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
# Yet-Another-Bench-Script #
# v2023-04-23 #
# https://github.com/masonr/yet-another-bench-script #
# ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## #
Sat 01 Jul 2023 01:19:41 AM UTC
Basic System Information:
---------------------------------
Uptime : 0 days, 10 hours, 21 minutes
Processor : Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
CPU cores : 4 @ 3099.993 MHz
AES-NI : ✔ Enabled
VM-x/AMD-V : ❌ Disabled
RAM : 30.9 GiB
Swap : 0.0 KiB
Disk : 100.0 GiB
Distro : Debian GNU/Linux 10 (buster)
Kernel : 5.4.231-137.341.amzn2.x86_64
VM Type :
IPv4/IPv6 : ✔ Online / ❌ Offline
IPv4 Network Information:
---------------------------------
ISP : Amazon Technologies Inc.
ASN : AS14618 Amazon.com, Inc.
Host : AWS EC2 (us-east-1)
Location : Ashburn, Virginia (VA)
Country : United States
fio Disk Speed Tests (Mixed R/W 50/50):
---------------------------------
Block Size | 4k (IOPS) | 64k (IOPS)
------ | --- ---- | ---- ----
Read | () | ()
Write | () | ()
Total | 0.00 KB/s (0) | 0.00 KB/s (0)
| |
Block Size | 512k (IOPS) | 1m (IOPS)
------ | --- ---- | ---- ----
Read | () | ()
Write | () | ()
Total | 0.00 KB/s (0) | 0.00 KB/s (0)
iperf3 Network Speed Tests (IPv4):
---------------------------------
Provider | Location (Link) | Send Speed | Recv Speed | Ping
----- | ----- | ---- | ---- | ----
Clouvider | London, UK (10G) | 101 Mbits/sec | 2.10 Gbits/sec | --
Scaleway | Paris, FR (10G) | busy | busy | --
NovoServe | North Holland, NL (40G) | 101 Mbits/sec | 1.88 Gbits/sec | --
Uztelecom | Tashkent, UZ (10G) | 98.4 Mbits/sec | 891 Mbits/sec | --
Clouvider | NYC, NY, US (10G) | 104 Mbits/sec | 5.85 Gbits/sec | --
Clouvider | Dallas, TX, US (10G) | 103 Mbits/sec | 4.04 Gbits/sec | --
Clouvider | Los Angeles, CA, US (10G) | 103 Mbits/sec | 2.74 Gbits/sec | --
Running GB6 benchmark test... *cue elevator music*
Geekbench 6 Benchmark Test:
---------------------------------
Test | Value
|
Single Core | 707
Multi Core | 615
Full Test | https://browser.geekbench.com/v6/cpu/1776637
YABS completed in 19 min 20 sec
Environment Settings
Expose Port to Internet
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>Hello, World!</p>"
app.run(host='0.0.0.0', port=8080)
Install flask
(venv) root@deepnote:~/work # pip install flask
Collecting flask
Downloading Flask-2.3.2-py3-none-any.whl (96 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 96.9/96.9 KB 5.0 MB/s eta 0:00:00
Collecting blinker>=1.6.2
Downloading blinker-1.6.2-py3-none-any.whl (13 kB)
Collecting itsdangerous>=2.1.2
Downloading itsdangerous-2.1.2-py3-none-any.whl (15 kB)
Requirement already satisfied: importlib-metadata>=3.6.0 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from flask) (5.0.0)
Requirement already satisfied: click>=8.1.3 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from flask) (8.1.3)
Collecting Jinja2>=3.1.2
Downloading Jinja2-3.1.2-py3-none-any.whl (133 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.1/133.1 KB 21.1 MB/s eta 0:00:00
Collecting Werkzeug>=2.3.3
Downloading Werkzeug-2.3.6-py3-none-any.whl (242 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 242.5/242.5 KB 40.2 MB/s eta 0:00:00
Requirement already satisfied: zipp>=0.5 in /shared-libs/python3.9/py/lib/python3.9/site-packages (from importlib-metadata>=3.6.0->flask) (3.9.0)
Requirement already satisfied: MarkupSafe>=2.0 in /shared-libs/python3.9/py-core/lib/python3.9/site-packages (from Jinja2>=3.1.2->flask) (2.0.0)
Collecting MarkupSafe>=2.0
Downloading MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)
Installing collected packages: MarkupSafe, itsdangerous, blinker, Werkzeug, Jinja2, flask
Attempting uninstall: MarkupSafe
Found existing installation: MarkupSafe 2.0.0
Not uninstalling markupsafe at /shared-libs/python3.9/py-core/lib/python3.9/site-packages, outside environment /root/venv
Can't uninstall 'MarkupSafe'. No files were found to uninstall.
Attempting uninstall: Werkzeug
Found existing installation: Werkzeug 2.2.2
Not uninstalling werkzeug at /shared-libs/python3.9/py/lib/python3.9/site-packages, outside environment /root/venv
Can't uninstall 'Werkzeug'. No files were found to uninstall.
Attempting uninstall: Jinja2
Found existing installation: Jinja2 2.11.3
Not uninstalling jinja2 at /shared-libs/python3.9/py-core/lib/python3.9/site-packages, outside environment /root/venv
Can't uninstall 'Jinja2'. No files were found to uninstall.
Successfully installed Jinja2-3.1.2 MarkupSafe-2.1.3 Werkzeug-2.3.6 blinker-1.6.2 flask-2.3.2 itsdangerous-2.1.2
WARNING: You are using pip version 22.0.4; however, version 23.1.2 is available.
You should consider upgrading via the '/root/venv/bin/python -m pip install --upgrade pip' command.
(venv) root@deepnote:~/work # python hello.py
* Serving Flask app 'hello'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:8080
* Running on http://172.3.82.202:8080
Press CTRL+C to quit
Right now we only support exposing port 8080. To expose other ports, you can either reconfigure your tool, or use utilities like socat
which can forward traffic from port 8080
to the port of your choosing. You can use the example below to set up port forwarding with socat
in the terminal:
apt update && apt install socat
socat tcp-l:8080,fork,reuseaddr tcp:127.0.0.1:YOUR_PORT
Install nginx
(venv) root@deepnote:~/work # apt update
(venv) root@deepnote:~/work # apt install nginx
(venv) root@deepnote:~/work # service nginx start
Install ngrok
(venv) root@deepnote:~/work # wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
--2023-06-30 15:43:34-- https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz
Resolving bin.equinox.io (bin.equinox.io)... 52.202.168.65, 54.161.241.46, 18.205.222.128, ...
Connecting to bin.equinox.io (bin.equinox.io)|52.202.168.65|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8850130 (8.4M) [application/octet-stream]
Saving to: ‘ngrok-v3-stable-linux-amd64.tgz’
ngrok-v3-stable-linux-am 100%[===============================>] 8.44M --.-KB/s in 0.09s
2023-06-30 15:43:34 (98.9 MB/s) - ‘ngrok-v3-stable-linux-amd64.tgz’ saved [8850130/8850130]
(venv) root@deepnote:~/work # tar -xvzf ngrok-v3-stable-linux-amd64.tgz
ngrok
- ngrok config add-authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
(venv) root@deepnote:~/work # ./ngrok http 80
(venv) root@deepnote:~/work # apt install screen
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
libutempter0
Suggested packages:
byobu | screenie | iselect ncurses-term
The following NEW packages will be installed:
libutempter0 screen
0 upgraded, 2 newly installed, 0 to remove and 21 not upgraded.
Need to get 606 kB of archives.
After this operation, 1,066 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://deb.debian.org/debian buster/main amd64 libutempter0 amd64 1.1.6-3 [7,812 B]
Get:2 http://deb.debian.org/debian buster/main amd64 screen amd64 4.6.2-3+deb10u1 [598 kB]
Fetched 606 kB in 0s (28.3 MB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package libutempter0:amd64.
(Reading database ... 31318 files and directories currently installed.)
Preparing to unpack .../libutempter0_1.1.6-3_amd64.deb ...
Unpacking libutempter0:amd64 (1.1.6-3) ...
Selecting previously unselected package screen.
Preparing to unpack .../screen_4.6.2-3+deb10u1_amd64.deb ...
Unpacking screen (4.6.2-3+deb10u1) ...
Setting up libutempter0:amd64 (1.1.6-3) ...
Setting up screen (4.6.2-3+deb10u1) ...
Processing triggers for libc-bin (2.28-10+deb10u2) ...
(venv) root@deepnote:~/work #
- screen -S nginx
- ./ngrok http 80
Ngrok – One Session, Multiple Tunnel
(venv) root@deepnote:~/work # ./ngrok config check
Valid configuration file at /root/.config/ngrok/ngrok.yml
- Linux:
"~/.config/ngrok/ngrok.yml"
version: "2"
authtoken: 2R4VMDo0BU4ETqRZkeiufuuKFnQ_7BbZiCAknkZt7W8mHpNr7
tunnels:
http1:
proto: http
addr: 80
http2:
proto: http
addr: 81
ngrok (Ctrl+C to quit)
🤯e Announcing ngrok's Kubernetes Ingress Controller: https://ngrok.com/s/k8s-ingress
Session Status online
Account [email protected] (Plan: Free)
Version 3.3.1
Region United States (us)
Latency 12ms
Web Interface http://127.0.0.1:4040
Forwarding https://c6cd-3-220-159-34.ngrok-free.app -> http://localhost:80
Forwarding https://c9df-3-220-159-34.ngrok-free.app -> http://localhost:81
Connections ttl opn rt1 rt5 p50 p90
3 0 0.00 0.00 0.01 65.37
HTTP Requests
-------------
GET /favicon.ico 404 NOT FOUND
GET / 200 OK
GET /favicon.ico 404 Not Found
GET / 200 OK
Screen Usage
- Install screen (Depends on the Linux Distribution if it came pre installed or not) : yum install screen
- Initiate a Screen : screen or screen -S <screen name> <command to execute>
- Detach from the screen : “CTRL+A,D” not “CTRL+A+D”
- List all the screen currently working : screen -ls
- Reattach to a screen : screen -r <session number> or screen -r <screen name>
- Kill specific screen: screen -X -S <screen name> quit
- Kill all screens : pkill screen
Videos