WSL 使用经验积累

本文主要包含了安装配置 WSL,安装 Oh-my-posh 终端美化,安装配置 Neovim,基于 Miniconda 构建 Python 开发环境、利用 Conda 配置 TensorFlow 虚拟环境、配置 PyTorch 虚拟环境、配置 Flax 虚拟环境,WSL GPU 支持,基于 Pyenv 和 Pipenv 配置 Python 开发环境、使用 Git 和 Github 等内容。

安装配置 WSL

Windows Subsystem for Linux Documentation | Microsoft Learn

安装 WSL 2 并配置用户信息

默认安装的 Linux 版本为 Ubuntu。Install WSL | Microsoft Learn

1
2
3
wsl --install # 安装 WSL2
wsl -l -v # 检查版本
wsl --version # 查看版本信息

How to display $PATH as one directory per line?

1
2
apt list --installed # list all installed packages
echo -e ${PATH//:/\\n}
  • Error code: Wsl/Service/CreateInstance/GetDefaultDistro/WSL_E_DEFAULT_DISTRO_NOT_FOUND

    1
    2
    # 管理员权限运行 PowerShell
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

WSL 配置代理服务

1
2
3
4
5
6
7
8
9
10
11
# 创建 C:\users\username\.wslconfig 文件,添加如下内容
[experimental]
autoMemoryReclaim=gradual
networkingMode=mirrored
dnsTunneling=true
firewall=true
autoProxy=true
# 在 .bashrc 文件中添加如下内容
export ALL_PROXY="http://host_ip:port" # 其中,host_ip 为 Windows的 IP 地址,port 为代理服务器的端口号
# host_ip 可以通过在 Windows 的 CMD 中输入 ipconfig 查看
# 需要注意的是,需要在代理软件中开启允许局域网访问的选项

安装 Oh-my-posh 终端美化

首先需要安装 Oh-my-posh, 因为安装完了之后会生成新的 .bashrc 文件。

1
2
3
curl -s https://ohmyposh.dev/install.sh | sudo bash -s # 安装 OMP
# 将如下内容添加到 .bashrc 文件中
eval "$(oh-my-posh init bash --config /root/.cache/oh-my-posh/themes/paradox.omp.json)" # 配置自定义路径的 主题

升级 Node.js

1
2
3
4
5
6
sudo apt update
# install nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
source ~/.bashrc
nvm install node
node -v

安装配置 Neovim

  • 安装 Neovim

    1
    2
    3
    sudo add-apt-repository ppa:neovim-ppa/unstable  # add the repo
    sudo add-apt-repository --remove ppa:neovim-ppa/stable # remove ppa
    sudo apt update && sudo apt install neovim # update & install
  • 安装 C++ 编译器

    1
    2
    3
    4
    5
    sudo apt update
    sudo apt install npm # 安装 Node.js 和 npm
    sudo apt install build-essential
    sudo apt-get install manpages-dev
    gcc --version
  • 配置 Neovim

    1
    2
    3
    4
    5
    6
    7
    8
    mkdir ~/.config/ # 创建配置文件夹
    mkdir ~/.config/nvim # 创建 nvim 配置文件夹
    export nvim_path=/home/latex/.config/nvim/
    cd $nvim_path
    git init
    git branch -M main
    git remote add origin https://github.com/Latexalpha/nvim
    git pull origin main
  • 安装 tree-sitter

    1
    npm install -g tree-sitter-cli
  • 安装 Python 插件

    1
    pip install pynvim debuypy
  • 安装 ripgrep, fd-find, fswatch

    1
    2
    3
    sudo apt install ripgrep
    sudo apt install fd-find
    sudo apt install fswatch

基于 Miniconda 配置 Python 开发环境

Set up a WSL development environment | Microsoft Learn

安装 Miniconda

1
2
3
4
sudo apt update
sudo apt install wget
wget https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.2-0-Linux-x86_64.sh
sh ./Miniconda3-py311_23.5.2-0-Linux-x86_64.sh # 这里的同意需要按很久 <CR>
  • 需要将 Neovim 的全局 Python 设为 conda base

  • 需要为每一个虚拟环境安装 pynvim 和 debugpy

    1
    pip install pynvim debugpy # 安装 pynvim 和 debugpy

配置 TensorFlow 开发环境

1
2
conda create -n tf2.15 python=3.11 # 注意这里使用的 Python 版本最好和 Conda base 的版本不一样
conda activate tf2.15

配置 PyTorch 开发环境

1
2
conda create -n torch2.1 python=3.11.4 # 注意这里使用的 Python 版本最好和 Conda base 的版本不一样
conda activate torch2.1

配置 Flax 开发环境

WSL GPU 支持

WSL 的 GPU 支持由 WIndows 的驱动提供,安装了 WSL 之后无需重新安装驱动。

需要注意的是,所有的操作都需要在激活了 TensorFlow 虚拟环境的条件下进行,否则会报错。

  • 需要在 Windows 安装支持 WSL 的 Nvidia 驱动,只要在 linux 终端输入 nvidia-smi 有输出完整的信息,就代表驱动安装好了。

  • CUDA Version N/A GitHub issue

    1
    2
    3
    4
    mkdir -p $CONDA_PREFIX/etc/conda/activate.d
    echo 'CUDNN_PATH=$(dirname $(python -c "import nvidia.cudnn;print(nvidia.cudnn.__file__)"))' >> $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
    echo 'export LD_LIBRARY_PATH=$CONDA_PREFIX/lib/:$CUDNN_PATH/lib:$LD_LIBRARY_PATH' >> $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
    source $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
  • libcuda.so Stack Overflow

    1
    2
    3
    4
    5
    cd \Windows\System32\lxss\lib
    del libcuda.so
    del libcuda.so.1
    mklink libcuda.so libcuda.so.1.1
    mklink libcuda.so.1 libcuda.so.1.1
  • libdevice.10.bc GitHub issue

    1
    2
    3
    4
    mkdir -p $CONDA_PREFIX/lib/nvvm/libdevice/
    cp -p $CONDA_PREFIX/lib/libdevice.10.bc $CONDA_PREFIX/lib/nvvm/libdevice/
    echo 'export XLA_FLAGS=--xla_gpu_cuda_data_dir=$CONDA_PREFIX/lib' >> $CONDA_PREFIX/etc/conda/activate.d/env_vars.sh
    conda install -c nvidia cuda-nvcc --yes
  • could not open file to read NUMA node Stack Overflow

    1
    2
    3
    4
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # or any {'0', '1', '2'}
    # 在代码 import tensorflow 之前加入上面两行
    import tensorflow as tf
  • Without NUMA support NVIDIA Developer Forums

    1
    2
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' # or any 0 1 2

基于 Pyenv 和 Pipenv 配置 Python 开发环境

使用 Pyenv 进行 Python 版本管理

  • Install pyenv

    1
    2
    3
    4
    5
    6
    7
    8
    git clone https://github.com/pyenv/pyenv.git ~/.pyenv
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
    echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bashrc
    exec "$SHELL"

    which python3 # show where is python3
    ls -ls /usr/bin/python*
  • Install Python by pyenv

    1
    2
    3
    4
    5
    # Installing libraries that need for installing Python
    sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
    # Installing Python
    pyenv install 3.9.13
    pyenv global 3.9.13

    Installing pyenv, and Python by pyenv on WSL (Ubuntu 18.04 LTS)

    How to uninstall python3 from Ubuntu

    How to Install and Manage Multiple Python Versions in WSL2

使用 Pipenv 管理 Python 虚拟环境

  • Pipenv 安装与配置

    1
    2
    3
    4
    5
    6
    sudo apt install python3-pip # 安装 pip
    sudo apt install pip
    pip3 install pipenv # 使用 pip3 安装 pipenv
    export PATH="/home/user/.local/bin:$PATH" # 添加路径到 PATH
    echo $PATH # show path
    echo "${PATH//:/$'\n'}" # show path one directory per line
  • PyTorch

    1
    2
    3
    cd the_venv_folder
    pipenv install --python 3.9
    pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
  • TensorFlow: 太 TMD 复杂了,别整了

使用 Git 和 Github

  • 设置配置文件:用户名与邮箱

    1
    2
    git config --global user.name "example-name"
    git config --global user.email "example@outlook.com"
  • 设置 Credential Manager (GCM)

    1
    2
    git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/bin/git-credential-manager.exe"
    # 注意仅支持 https 协议
作者

Shangyu ZHAO

发布于

2024-01-07

更新于

2024-10-13

许可协议