Hello guys.
What is WSL you wonder ? It’s Windows Subsystem for Linux. Basically, you run a Linux OS inside windows.
WSL 1 was good, but it had slow read write speeds. Because WSL 2 is basically a VM, it’s much better, other than it’s dynamic IP address that changes every time you close the terminal making some problems with the SSH.
If you are planning to use GPU for Deep learning, please note that:
Its experimental, but here is another thread where they are trying to get CUDA drivers to work on WSL 2: Platform: Windows 10 using WSL2 w/GPU
This is going to be split in 4 parts.
- Install/Enable WSL
- Install Miniconda
- Setup the environment
- Setup SSH
1. Install/Enable WSL
To download WSL 2, you need Windows 10 version 2004(Build 19041) or higher. Windows 10 2004 was launched around June 2020. If you have yet to update, get the windows 10 update assistant here Download Windows 10 if you have not updated already.
Here is the Microsoft guide to install WSL 2: Install WSL | Microsoft Learn
After you install your linux distribution of choice, set your username password. My choice would be the Ubuntu 18.04 LTS
or the Ubuntu 20.04 LTS
2. Install Miniconda
Now download and install Miniconda.
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
Full Miniconda Linux Installation guide here: Installing on Linux — conda 24.7.2.dev72 documentation
3. Setup the environment
Grab the conda cheat sheet here to check stuff when you get stuck.
Open the WSL terminal. Clone the fastai repo.
git clone https://github.com/fastai/fastai
cd fastai
Depending on whether you want to use the GPU environment or the CPU environment, do either:
conda env create -f environment.yml # GPU
conda env create -f environment-cpu.yml # CPU
Now you will have all the dependencies installed except the fastai 0.7.0 library.
So first, activate the conda environment:
conda activate fastai # If you installed GPU environment
conda activate fastai-cpu # If you installed CPU environment
Now, you change directory to the old folder which has fastai 0.7.0. Install fastai and jupyter lab:
cd old
pip install .
pip install jupyterlab
You need to install jupyter lab to view the notebooks and stuff. You can use jupyter too. Just my preference.
After this, I normally add a line in the .bashrc
file in the home directory to activate the environment on launch. This is because I use WSL exclusively for the fastai learning stuff. If you use WSL for multiple things, I do not recommend this. Like this:
echo 'conda activate fastai' >> ~/.bashrc
# use fastai for GPU env, fastai-cpu for cpu env
If you are going to be using the computer, I think you are pretty much ready at this point. Otherwise, you might want to setup remote access using SSH if you access your home computer from your laptop on local network like me.
4. Setup SSH
This part is a bit unorganized. I don’t have time to fix it, but I’d appreciate if anybody can sort this out. This is a wiki post.
Okay, the problem comes here. WSL 1 has a static IP address, so you can just login anytime if you remember the IP address.
But WSL 2 has a dynamic IP. So if you close the terminal anytime, the session ends. And you open the terminal again and try to SSH but it does not work because it has a different IP.
What ? Yes, that is the problem
So I either, first open a terminal on the WSL machine and SSH into the Windows machine, get the WSL IP, set up IP forwarding
So I set this up some time back and had to refer some websites. I had them bookmarked then. I paste them here, for others to refer to. I don’t remember the particular order.
-
Key-based Authentication for OpenSSH on Windows - Concurrency
-
SSH on Windows Subsystem for Linux (WSL) | Illuminia Studios
After this, you’ll need to use SSH tunnelling to acccess your jupyter notebook running on WSL from another computer. This guide looks fine:How to run Jupyter Notebooks on remote server — SSH | by Pranav Gajjewar | Medium
For people wanting to know the status of the WSL 2 Dynamic IP issue on GitHub, you can check it here: [WSL 2] NIC Bridge mode 🖧 (Has TCP Workaround🔨) · Issue #4150 · microsoft/WSL · GitHub
Also, please check the ML lesson 1 Wiki for some stuff you might need : Wiki thread: lesson 1