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

对于其依赖参考了这两个文章文章1文章2

# 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的路径
重点关注你的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

但是在虚拟机内用浏览器性能损耗太大了,并不推荐

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值