0


痛苦的windows WSL2的CUDA安装过程

  1. 为什么要安装?

     在做深度学的过程中,发现大部分的情况下都是在Linux系统的环境下做的。自己又不想装双系统,又想便捷地使用Linux来调用GPU,进行模型的推理。网上搜索了一番,使用VMWare虚拟机好像调用不了CUDA的。经过多番查找,发现WSL2,这个虚拟机是可以直接调用CUDA 运算的,而且有人安装成功并跑通了。然后就开始了痛苦的环境安装过程了~~~。
    
  2. 安装前的准备:

     一台带有GPU的x86_64,windows10 或win10以上的系统的电脑。(我这台是笔记本电脑,比较久了,还可以战斗{*-*})
    
  3. 安装WSL:

    必须运行 Windows 10 版本 2004 及更高版本** 1**,本电脑是win10 22H2版本,如果之前有安装过Virtua Box 虚拟机的话会显示叫你卸载Virtualbox 才能升级,我这边明明都卸载了,还显示未卸载,纳闷了很久,找了一波,终于找到了 **2 **这个链接,可以卸载的VirtuaBOx 都卸了,删的也都删了。问题就出在C盘的一个文件夹没删   virtualbox这个文件一般在C:Program Files下(如ldplayer)  这个文件夹删完就可以升级系统了。
    

    升级完系统后就可以安装WSL了。首先以管理员的方式打开 Windows PowerShell,输入命令

wsl --install

#将默认版本设置为WSL 2
wsl --set-default-version 2

不要在微软商店安装Ubuntu20.04,会直接安装在C盘上面的,C盘安装虚拟机,真的很炸裂。具体如何在其他盘安装请参考 **3 **主要的命令如下:

cd D:\Linux-ubuntu\
# 下载
Invoke-WebRequest -Uri https://wsldownload.azureedge.net/Ubuntu_2004.2020.424.0_x64.appx -OutFile Ubuntu20.04.appx -UseBasicParsing

# 压缩
Rename-Item .\Ubuntu20.04.appx Ubuntu.zip
# 自己解压

鼠标左键双击解压出来的.exe 文件,有报错的话 安裝 WSL2 Linux Kernel 更新包

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi,安装完后再双击.exe 文件打开Ubuntu虚拟机。至此,WSL2的虚拟机安装完成。

查看 虚拟机状态,在PowerShell中输入以下命令。

# 查看wsl 版本
wsl -l -v
# 查看虚拟机的状态
wsl --status

# 关闭虚拟机
wsl --shutdown

我们是自己的电脑,可以设置默认打开方式是root用户打开。首先 双击.exe 文件, 进入Ubuntu用户。输入以下命令设置root账号密码 4

打开终端(ctrl+alt+t)
1、输入 :sudo passwd root
2、输入 : 输入user的密码
3、输入 :输入新的UNIX密码
4、输入 :重新输入新的UNIX密码
设置完成
输入: su
密码:
进入root模式下

设置进入Ubuntu的用户是root 用户,在PowerShell 中输入

ubuntu2004.exe config --default-user root

虚拟机和Windows电脑的文件传输,可以在文件导航窗口输入

\\wsl$\Ubuntu-20.04\

至此WSL2的Ubuntu虚拟机初步完成安装了。

4 固定ip,方便使用xshell或者MobaXterm连接虚拟机:

  ssh的安装,安装软件一般使用root用户,避免出现各种权限问题的错误。参考 **5**

# root目录下
更新源 apt-get update
1.安装ssh;(请确保有网络,可ping www.baidu.com确认)

apt-get install openssh-server

2.重启ssh服务;
service ssh restart

3.查看启动情况;
ps -e |grep ssh

关闭防火墙
1.查看防火墙是否关闭
ufw status

2.关闭防火墙
ufw disable

3.启动22端口
ufw allow 22

网上搜了蛮久的,说是WSL2每次重启ip都会改变的,无法固定。不过可以使用脚本开启wsl2虚拟机,每次使用脚本打开就可以了,参考 6 。要使用管理员权限打开脚本。以下保存为xxx.bat文件

@echo off
setlocal enabledelayedexpansion

:: 重新拉起虚拟机,并且用root身份,启动ssh服务和docker服务
wsl -u root service ssh start | findstr "Starting ssh" > nul
if !errorlevel! equ 0 (
    echo docker ssh success
    :: 设置wsl2虚拟机ubuntu的ip
    wsl -u root ip addr | findstr "192.168.10.101" > nul
    if !errorlevel! equ 0 (
        echo wsl ip has set
    ) else (
        :: 没有的话给安排上
        wsl -u root ip addr add 192.168.10.101/24 broadcast 192.168.10.0 dev eth0 label eth0:1
        echo set wsl ip success: 192.168.10.101
    )

    :: 设置windows宿主机网卡vEthernet (WSL)的IP,与虚拟机同一网段
    ipconfig | findstr "192.168.0.102" > nul
    if !errorlevel! equ 0 (
        echo windows ip has set
    ) else (
        netsh interface ip add address "vEthernet (WSL)" 192.168.10.102 255.255.255.0
        echo set windows ip success: 192.168.10.102
    )
)
pause

至此 固定ip完用MobaXterm,连接,脚本是root启动ssh的,连接一般也使用root用户。

  1. 安装英伟达的驱动,安装wsl对应的cuda

     英伟达的驱动要安装在Windows系统上面。一开始以为安装最新的版本驱动就可以了,看来是想多了,不行。。。nvidia-smi ,报错。后来经过一番查找 **7 **发现要下载对应的驱动版本537.58才行 **8  **下载驱动的链接 。下载安装好驱动后。使用管理员权限,打开第4个步骤的xxx.bat文件,启动虚拟使用MobaXterm 连接虚拟机。在root用户下,输入一下命令** 9** :
    
cp /usr/lib/wsl/lib/nvidia-smi /usr/bin/nvidia-smi
chmod ogu+x /usr/bin/nvidia-smi

输入 nvidia-smi ,没有啥问题,就说明英伟达驱动安装完成。

    安装cuda:**10 **cuda下载链接

# Ubuntu 下载链接

wget https://developer.download.nvidia.com/compute/cuda/12.6.0/local_installers/cuda_12.6.0_560.28.03_linux.run

sh cuda_12.6.0_560.28.03_linux.run

配置环境:在.bashrc 文件或者/etc/profile 文件添加环境变量。建议在/etc/profile 下配置。这样所有的用户都可以用到。

vi /etc/profile

# 根据自己的的路径,粘贴到 profile的最后面

export PATH=/usr/local/cuda-12.6/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-12.6/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

保存好后 输入

source /etc/profile

激活环境。输入

nvcc -V

有显示对应的版本说明cuda安装完毕。

    安装annaconda3来管理python 环境   版本下载路径 ,下载Linux x86_84 版本的。
wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.06-1-Linux-x86_64.sh

下载完后,安装

# 赋予权限chmod +x Anaconda3-2024.06-1-Linux-x86_64.sh# 安装

./Anaconda3-2024.06-1-Linux-x86_64.sh

# 一直yes下去,安装完后 输入以下命令 激活annaconda3
source ~/.bashrc

创建 pytorch 的python为3.8的python conda环境:

conda create -n pytorch python=3.8 -y

创建完后 ,使用

conda activate pytorch

激活环境。

用conda 下载 pytorch 深度学习框架

conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

安装完后,测试是否可以调用cuda:11

输入

python

import torch

torch.cuda.is_available()

输入 Ture 则说明pytorch 可以调用GPU啦!!!!!

  1. 安装docker

    docker 用来做环境的部署是非常方便的,相当于一个小型的虚拟机,每个docker容器环境都是相互隔离的。打开虚拟机,进入root用户,输入docker 命令提示安装docker。要使用apt 来安装,另一个命令的安装会出现一些未知的问题。输入命令

apt update
apt install docker.io

使用 dockerd,启动docker。

让docker可以使用cuda ,参考 **12 **输入以下命令

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-docker-keyring.gpg

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-docker-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update

sudo apt-get install -y nvidia-docker2

检验是否完成安装 13

docker run --gpus all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark

至此,docker安装完成。

开机自启,和ssh一样的脚本,如下,添加了,启动docker

@echo off
setlocal enabledelayedexpansion

:: 重新拉起虚拟机,并且用root身份,启动ssh服务和docker服务
wsl -u root service docker start | findstr "Starting Docker" > nul
wsl -u root service ssh start | findstr "Starting ssh" > nul
if !errorlevel! equ 0 (
    echo docker start success
    echo docker ssh success
    :: 设置wsl2虚拟机ubuntu的ip
    wsl -u root ip addr | findstr "192.168.10.101" > nul
    if !errorlevel! equ 0 (
        echo wsl ip has set
    ) else (
        :: 没有的话给安排上
        wsl -u root ip addr add 192.168.10.101/24 broadcast 192.168.10.0 dev eth0 label eth0:1
        echo set wsl ip success: 192.168.10.101
    )

    :: 设置windows宿主机网卡vEthernet (WSL)的IP,与虚拟机同一网段
    ipconfig | findstr "192.168.0.102" > nul
    if !errorlevel! equ 0 (
        echo windows ip has set
    ) else (
        netsh interface ip add address "vEthernet (WSL)" 192.168.10.102 255.255.255.0
        echo set windows ip success: 192.168.10.102
    )
)
pause

至此,环境都安装好了,开始AI开发之旅吧!!!!!

参考连接:

**1 **安装 WSL | Microsoft Learn

**2 **Win10升级要卸载virtualbox virtualbox怎么办_更新win10要卸载virtual-CSDN博客

**3 **https://zhuanlan.zhihu.com/p/690428564

4ubuntu无法远程root远程登录(远程调试)root直接登录(没有root用户登录)(创建root用户新建root用户)PermitRootLogin yes(prohibit-password)_ubunto18.04root 用户无法远程登陆-CSDN博客

**5 **xshell安装与配置,Xftp(不能连接虚拟机xshell无法连接,openssh-server,服务没开怎么传输数据?)(虚拟机和windows之间自由复制)_xshell不能关联xftp-CSDN博客

6 给windows宿主机和wsl2的ubuntu-20.04分配固定IP,使能相互ping通_wsl2 与宿主机用同一个局域网ip-CSDN博客

7 wsl2输入nvidia-smi后显示一部分信息后报segmentation fault的错误(已解决)_nvidia-smi segmentation fault-CSDN博客

8 英伟达官网怎么找老版本的显卡驱动_英伟达显卡驱动官网-CSDN博客

9 Windows下Linux虚拟机共享GPU显卡-CSDN博客

10 WSL2和Docker使用GPU_wsl2容器使用gpu-CSDN博客

11 查看Pytorch的GPU是否可用_pytorch:测试gpu是否可用-CSDN博客

**12 **WSL 中的 GPU 加速 ML 训练 | Microsoft Learn

13 WSL2和Docker使用GPU_wsl2容器使用gpu-CSDN博客


本文转载自: https://blog.csdn.net/qq_45505081/article/details/140935334
版权归原作者 ~尽西风~ 所有, 如有侵权,请联系我们删除。

“痛苦的windows WSL2的CUDA安装过程”的评论:

还没有评论