How to Turn Your Local Machine into a “Personal Colab” with ngrok
If you’re an ML dev, you’ve probably faced this situation: you have a powerful desktop (maybe with a beefy GPU) at home or in the lab, and you want to run your machine learning experiments on it. But you also want the convenience of accessing it from, say, your laptop or another device while you’re on the go—without fiddling with complicated routers or paying for cloud services.
The good news is that you can replicate a cloud-like environment (think Google Colab) on your own hardware by tunneling your local Jupyter Notebook server to the internet with ngrok. It’s an easy solution to transform your ML workstation into a “personal cloud” that you can reach from anywhere. Let’s see how!
Why Bother with a Personal “Colab”?
- Full Control Over Environment
No weird constraints on libraries or hardware. You can install exactly what you need—PyTorch, TensorFlow, scikit-learn, you name it—without worrying about cloud limits. - Local GPU Access
If you’ve invested in an NVIDIA 4090 or any other powerful GPU, you get the raw performance on your own hardware, which can be faster than typical free cloud tiers. - No Timeouts
Google Colab can disconnect after a certain period. On your own machine, you decide how long your training runs. - Cost-Effective
You don’t have to pay for additional cloud compute time.
Prerequisites
- A Windows or Linux PC where you can install and run Jupyter Notebook.
- Python installed (or Anaconda).
- A ngrok account (sign up for the free tier).
- A reliable internet connection from your ML PC.
Step-by-Step Setup
1. Install Jupyter Notebook
If you already have Jupyter, skip this step. Otherwise:
pip install jupyter
Or, if you’re using Anaconda:
conda install jupyter
2. Run Your Jupyter Notebook Server
- Open a terminal or Command Prompt on your local machine.
- Launch Jupyter so it listens on a specific port. For instance:
jupyter notebook --no-browser --ip=0.0.0.0 --port=8888
--no-browser
prevents Jupyter from opening a browser locally.--ip=0.0.0.0
allows connections from any interface.--port=8888
is a common default, but feel free to use another port.
(Optional) Set a Password
jupyter notebook password
This ensures that not just anyone with the URL can access your notebook. Highly recommended if you’re opening this to the internet!
3. Install and Configure ngrok
- Install ngrok
- You can download ngrok from ngrok.com/download for your operating system.
- Unzip it or run the installer as needed.
- Add Your Auth Token
- Log in to your ngrok dashboard to find your personal token.
- In a terminal:
ngrok config add-authtoken YOUR_AUTHTOKEN
This step is important to use ngrok without time limits or connection caps.
4. Expose Your Jupyter Notebook with ngrok
- Open another Terminal/Command Prompt (leaving Jupyter running in its own window).
- Run:
ngrok http 8888
Replace 8888
with your chosen port if you changed it above.
- View the Public URL
ngrok will generate a forwarding address likehttps://xyz123.ngrok-free.app -> http://localhost:8888
. That first part (https://xyz123.ngrok-free.app
) is the URL you’ll use to access your machine from anywhere.
5. Connect from Another Device
- On your laptop, phone, or any other device with a web browser:
- Open the
https
URL ngrok provided. - Enter your Jupyter token or password if prompted.
- Bam! You should see your local Jupyter Notebook interface.
- Open the
This effectively simulates what Google Colab does—but running on your own hardware!
Security Considerations
- Use a Password: If you skip password protection, anyone with the ngrok URL could potentially access your notebooks. This can be dangerous if you have sensitive code or data.
- Shut Down ngrok: When you’re done, press
Ctrl+C
in the ngrok terminal to stop the tunnel. - Monitor: Keep an eye on your terminal for any suspicious activity.
Common Questions
- What if my IP changes all the time?
Not a problem: ngrok uses its own cloud servers to provide the URL, so your local IP is irrelevant. - Can I do this from a corporate or campus network?
If your organization blocks outbound connections on custom ports, you might run into issues. Often, though, it works without router changes because ngrok uses standard HTTPS tunnels. - What about GPU passthrough or advanced config?
For most ML devs who just want remote access, you don’t need GPU passthrough—your local PC is already controlling the GPU. Just run Jupyter on your PC normally. If you use a VM, ensure that the VM can access your GPU (sometimes limited in VirtualBox or VMware without special configuration).
Final Thoughts
Thanks to tools like ngrok, your local machine can become a personal cloud-like platform for machine learning. You get the best of both worlds—your own custom environment and the flexibility to code or check training progress from another device.
So next time you’re frustrated with timeouts on free cloud notebooks or slow CPU performance, give this setup a try. Your beefy ML rig at home (or in the lab) can become your very own Colab—ready for you to code from anywhere!
That’s all, folks—happy tunneling and happy ML hacking!