赞
踩
因为我想运行GPU程序,我的笔记本是带一个nvidia独显的。但是windows下折腾了很久,安装Visual Studio并且安装CUDA环境还需要配置很多东西,最后运行cuda程序还是有很多包找不到,最后放弃了,windows果然不适合开发者。
就想起了可以试试WSL用Linux系统来做GPU开发,折腾一下,最终成功了。
下面记录一下步骤:
这个需要windows商店, Microsoft appstore下,直接找到Ubuntu 18.04直接获取就可以了。
有的电脑没有Microsoft appstrore,应该是盗版系统没破解好。
非常方便,安装完后直接开启会出现一个Linux控制台,以前没用过,体验很好速度很快。
这个我百度的教程每一个好用的,直接看官网,最权威的而且最好用
https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=18.04&target_type=deb_local
选择好你的系统对应版本,下面就会展示给你安装步骤
主要是下面几步:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda-repo-ubuntu1804-11-6-local_11.6.2-510.47.03-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-6-local_11.6.2-510.47.03-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-6-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda
注意这几步中下载和安装很慢,网速不太好的话,大概要一个小时,因为那个包确实有点大。
nvcc类似于GCC,没有nvcc就无法编译cuda以.cu结尾的文件。
所以检查有没有nvcc
安装完了,这时就有cuda运行环境里,但是需要一些配置。
我在运行nvcc --version
报错找不到,查找资料发现是因为没配置路径。
参考:
https://blog.csdn.net/weixin_31325725/article/details/116587093
主要步骤
nvidia-smi 不显示GPU就是ubuntu找不到GPU
运行CUDA程序可以运行,但是获取不到GPU信息。
原因,查找到网上原因说是WSL无法获取到GPU,需要WSL2才可以。并且windows版本也有要求,需要windows10 1903以上
版本低的自己更新
所以需要升级WSL
以管理员身份进入cmd 或者 powershell
先使用 wsl -l -v 查看当前wsl 版本。
发现我的WSL版本确实是WSL1,那么需要升级。
参考
https://www.jianshu.com/p/9b2f9f269f58
首先打开
红框中第一个,在上面应该已经开了,不然安装不了WSL。
然后打开第二个,重启电脑。
去官网下载WSL2程序并安装
https://docs.microsoft.com/en-us/windows/wsl/install-manual#step-4---download-the-linux-kernel-update-package
然后设定ubuntu为wsl2,用管理员身份运行power shell
执行
wsl --set-default-version 2
wsl --set-version Ubuntu-18.04 2
大概需要十多分钟。再打开ubuntu就可以了。
这时我们检查能否找到GPU
成功找到了。
然后我们运行CUDA程序试一下
#include <iostream>
#include <math.h>
#include <cuda_runtime.h>
using namespace std;
int main() {
int count = 0;
cudaGetDeviceCount(&count);
cout <<"当前计算机包含GPU数为"<< count << endl;
cudaError_t err = cudaGetDeviceCount(&count);
if (err != cudaSuccess)
printf("%s\n", cudaGetErrorString(err));
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, 0);
printf("Device Number: %d\n", 0);
cout << "当前设备名字为" << prop.name << endl;
cout << "GPU全局内存总量为" << prop.totalGlobalMem << endl;
cout << "单个线程块中包含的线程数最多为" << prop.maxThreadsPerBlock << endl;
}
成功显示我笔记本GPU的名称。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。