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 2wsl --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 root2、输入 : 输入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 update1.安装ssh;(请确保有网络,可ping www.baidu.com确认)apt-get install openssh-server2.重启ssh服务;service ssh restart3.查看启动情况;ps -e |grep ssh关闭防火墙1.查看防火墙是否关闭ufw status2.关闭防火墙ufw disable3.启动22端口ufw allow 22
网上搜了蛮久的,说是WSL2每次重启ip都会改变的,无法固定。不过可以使用脚本开启wsl2虚拟机,每次使用脚本打开就可以了,参考 6 。要使用管理员权限打开脚本。以下保存为xxx.bat文件
@echo offsetlocal enabledelayedexpansion:: 重新拉起虚拟机,并且用root身份,启动ssh服务和docker服务wsl -u root service ssh start | findstr "Starting ssh" > nulif !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用户。
5. 安装英伟达的驱动,安装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-smichmod 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.runsh 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下去,安装完后 输入以下命令 激活annaconda3source ~/.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啦!!!!!
6. 安装docker
docker 用来做环境的部署是非常方便的,相当于一个小型的虚拟机,每个docker容器环境都是相互隔离的。打开虚拟机,进入root用户,输入docker 命令提示安装docker。要使用apt 来安装,另一个命令的安装会出现一些未知的问题。输入命令
apt updateapt 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.gpgcurl -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.listsudo apt-get updatesudo 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 offsetlocal enabledelayedexpansion:: 重新拉起虚拟机,并且用root身份,启动ssh服务和docker服务wsl -u root service docker start | findstr "Starting Docker" > nulwsl -u root service ssh start | findstr "Starting ssh" > nulif !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博客