WSL2+python环境配置
1 WSL2
wsl2 的安装不再多说,宿主机win11,方便GUI界面,离线安装Ubuntu22.04,第一个坑来了Ubuntu22.04安装时经常卡死在设置UNIX 用户名,但此时Ubuntu其实已经安装完成了,在win terminal 里面输入
wsl -l -v
可以看到已经安装结束但是Ubuntu没有启动,重新打开界面发现默认登录了root,为了避免麻烦,尤其是时不小心删除环境的问题,建立普通用户并默认登录。首先给root用户设置密码
passwd
再建立普通用户
adduser xxx
之后退出wsl在win terminal 内输入
wsl config --default-user xxx
安装多个wsl会指定默认wsl的用户为xxx,你也可以的到特定的wsl(Ubuntu.exe)路径下执行
./Ubuntu.exe config --default-user xxx
这样就回到传统wsl默认登录界面了,为了后续下载速度换成华为的源
sudo cp -a /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i "s@http://.*archive.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@http://repo.huaweicloud.com@g" /etc/apt/sources.list
Ubuntu22.04坑有点多,不想折腾用Ubuntu20.04最好
2 python
这里选择miniconda,下载miniconda3.sh后执行即可,但可能没有初始化,系统里没有显示
(base)xxx@xxxx~#
这时需要执行
~/miniconda3/bin/activate
conda init
2.1 python gui 环境
个人只了解wxpython、pyQt5
为了显示GUI界面,采用了取巧的方法安装了gedit
sudo apt install gedit
所有包均用pip下载安装,为了加速先给pip换源,这里用华为源
mkdir ~/.pip
vim ~/.pip/pip.conf
将下面内容 ctrl + V 粘贴进去
:wq 退出vim即可
[global]
index-url = https://repo.huaweicloud.com/repository/pypi/simple
trusted-host = repo.huaweicloud.com
timeout = 120
2.1.1 wxpython
这玩意的坑特别多,先要安装
pkg-config、libgtk-3-dev、x11-apps、build-essential(gcc,g++,make,等工具包)
wxpython>=4.2.0 还需要额外的
sudo apt install pkg-config libgtk-3-dev x11-apps build-essential
pip install attrdict wxpython
由于最后是编译安装,所以这玩意安装耗时非常久,大概在20分钟左右,耐心等待
2.1.2 pyQt5
pyQt5需要安装的东西会少一些
pip install pyQt5 pyQt5-tools
# pyQt5检查文件
from PyQt5.QtWidgets import *
class MainWidget(QWidget):
def __init__(self):
super(QWidget, self).__init__()
layout = QVBoxLayout()
self.setLayout(layout)
btn = QPushButton("GG")
layout.addWidget(btn)
btn.clicked.connect(lambda b: btn.setText("Why Click me"))
class MainWin(QMainWindow):
def __init__(self):
super(QMainWindow,self).__init__(None)
main = MainWidget()
self.setCentralWidget(main)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
win = MainWin()
win.resize(700, 800)
win.show()
sys.exit(app.exec_())
运行该文件,如果能正常弹出GUI界面即表示安装成功,如果不行需要安装额外依赖、详细原理在文章2,将要步骤为在wsl里
export QT_DEBUG_PLUGINS=1 # 打开调试接口
python Qt5_test.py
这时会弹出报错,重点在于你的libqxcb.so的路径
ldd ~/miniconda3/envs/guienv/lib/python3.8/site-packages/PyQt5/Qt5/plugins/platforms/libqxcb.so | grep "not found"
# return
libxcb-xinerama.so.0 => not found
libxcb-xinerama.so.0 => not found
# 根据提示安装依赖即可
sudo apt install libxcb-xinerama
2.2 python 深度学习环境
现在的wsl已经支持GPU的深度学习了,比Linux物理机慢18%左右,我大概是可以接受的,也避免win系统太慢
配置CUDA时需要liburcu6,但是Ubuntu22.04已经没有这个源了,需要自己下载安装,所以为了避免麻烦最好还是用Ubuntu20.04
命令行下载安装
wget http://archive.ubuntu.com/ubuntu/pool/main/libu/liburcu/liburcu6_0.11.1-2_amd64.deb
sudo dpkg -i sudo dpkg -i liburcu6_0.11.1-2_amd64.deb
2.2.1 CUDA + cudnn
2.2.1.1 CUDA
如果只是安装 pytorch-gpu,那么只需要安装CUDA,如果tensorflow-gpu则还需要安装cudnn
安装CUDA tooltik 时需要注意 pytorch当前支持的版本
先查看当前的驱动是否已经安装了
nvidia-smi
如果不显示,需要更新win上的nvidia驱动
安装依赖库
sudo apt-get install freeglut3-dev build-essential libx11-dev libxmu-dev libxi-dev libgl1-mesa-glx libglu1-mesa libglu1-mesa-dev liburcu6
pytorch 只支持cuda11.3 cuda11.6,我这里安装的是cuda11.6
按照官网提示下载安装即可
cudatooltik-11.6
里面有三种安装方式,选择第一种deb本地安装直接慢慢等就好,但是这里有个坑,解决方案看2.2.1.3,如果内存比较大,简单第三种runfile本地安装,该过程需要你中途手动确认几个命令即可
2.2.1.2 cudnn
cudnn需要账号才能下载,注意对应版本,对于wsl同样提供了deb包,还有额外的tar包,如果想要简单,使用deb包安装即可,
sudo dpkg -i cudnn.deb
如果会弹出没有key的问题,所以下载tar包并安装
由于cudnn只是一些包所以只需要解压并移动到对于的文件夹内即可,我下载的是tar.xz文件格式,为了方便我这里在win上用bandzip解压了两次得到了全部文件,你也可以用
tar -vxf cudnn.tar.xz
之后只需要将文件复制到wsl里对应的路径下即可假设解压后的文件在
e:\wsl\cudnn
那么就在wsl里执行
sudo cp -P /mnt/e/wsl/cudnn/lib64/libcudnn* /usr/local/cuda-11.6/lib64/
sudo cp /mnt/e/wsl/cudnn/include/cudnn.h /usr/local/cuda-11.6/include/
sudo chmod a+r /usr/local/cuda-11.1/include/cudnn.h
sudo chmod a+r /usr/local/cuda-11.1/lib64/libcudnn*
2.2.1.3 删除缓存和挂载问题
用deb包安装后wsl会变得很重,而且wsl玩坏之后一般都是直接重装,没必要保留cuda和cudnn的缓存
cd \etc\apt\source.list.d\
# 如果用本地deb安装了 cuda & cudnn
# 里面会有 cuda 和cudnn文件夹
sudo rm -rf \cuda
sudo rm -rf \cudnn
sudo rm -rf \var\cuda
sudo rm -rf \var\cudnn
# 或者是 \var\local\cuda \var\local\cudnn 我有点忘记了
runfile 安装cuda只需要重启wsl 系统会自动清理缓存
2.2.2 pytorch
pytorch 的安装非常简单
按照官网的指导用pip安装即可
检查一下是否可用
import torch
torch.cuda.is_available()
2.2.3 tensorflow
pip install tensorflow-gpu
检查可用
import tensorflow as tf
print("GPU Status:", tf.test.is_gpu_available()
2.2.4 jax+jaxlib
jax 是google推出的 tf简化库,内部函数和numpy大致一样,而且还支持gpu加速
pip install --upgrade pip
# 注意这可能需要科学上网
pip install --upgrade "jax[cuda]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
检查可用
import jax
jax.local_device_count()
print(jax.devices()[0])
3 收尾
清理缓存,减少wsl空间,还有一些影响不大的小问题
3.1 ubuntu 清理
清理ubuntu缓存,以及用完的上的小文件
3.1.1 apt缓存清理
sudo apt-get clean
3.1.2 删除gpg.key
用deb包安装cuda后其实他的共钥没要删除
apt-key list
根据弹出来的内容,你可用删除共钥,我这里已经清理了cuda的共钥,为了方便理解,以ubuntu-keyring-2012-archive为例子,注意实操时,不能删除Ubuntu的共钥
sudo apt-key del C0B21F32
# 这8位数字即ubuntu-keyring-2012-archive的后8位
# 删除cuda 的key-ring后即可删除 cuda-keyring-gpg了
# 例如ubuntu-keyring-2012-archive 在所提示的
# /etc/apt/trusted.gpg.d/ubuntu-keyring-2012-archive.gpg
# cuda-keyring 一般就在 /etc/apt/trusted.gpg 删除就行
sudo rm -f /etc/apt/trusted.gpg
3.2 关于python的小坑
几个小坑与建议
3.2.1 清理pip 与conda
pip cache purge
conda clean --all
3.2.2 matplotlib小坑
检查程序如下
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.sin(1.5*x)
plt.figure()
plt.plot(x, y1, label="sin(x)")
plt.plot(x, y2, label="sin(1.5x)")
plt.legend()
plt.tight_layout()
plt.show()
(base)
第一次运行时会卡很长时间,原因在于字体,但是并没有错误,可用等一等,也可以重启虚拟机,后续就会正常启动
3.2.3 IDE的问题
使用wsl体验最好的肯定是VScode
code
即可直接安装VScode远程服务,在win本地使用完整vscode和linux环境
当然pycharm 也可用
如果偏爱jupyter notebook
pip install jupyter
即可在vscode或者pycharm 里使用jupyter notebook
如果只想用jupyter lab
就需要在wsl 里面安装浏览器,可用使用edge浏览器,在edge官网提供了deb包,下载后,用以下命令安装
dpkg -i microsoft-edge.deb
但是在虚拟机内用浏览器性能损耗太大了,并不推荐