https://zhuanlan.zhihu.com/p/166161217
https://www.jianshu.com/p/ac70300b598b告诉我低版本的pytorch,cuda版本为9.0,无法使用最新的显卡。
https://blog.csdn.net/weixin_42069606/article/details/105198845和https://blog.csdn.net/kellyroslyn/article/details/109668001讲了pytorch\cuda\显卡驱动等的关系
see official instructions:here。貌似1.0.0之前的版本都不能直接从conda install pytorch==x.x.x -c pytorch安装了,不过可以下载whl后本地安装也可以直接在线安装。
pytorch版本离线下载地址:https://download.pytorch.org/whl/torch_stable.html
查看whl文件列表之后发现有两个合适的:
cu90/torch-0.3.0.post4-cp27-cp27m-linux_x86_64.whl
cu90/torch-0.3.0.post4-cp27-cp27mu-linux_x86_64.whl
运行命令pip install http://download.pytorch.org/whl/cu90/torch-0.3.0.post4-cp27-cp27m-linux_x86_64.whl后报错ERROR: torch-0.3.0.post4-cp27-cp27m-linux_x86_64.whl is not a supported wheel on this platform.说明该版本不适合自己的系统安装,于是换cp27mu那版安装(cp27代表python2.7),成功!
这一步的原理、具体步骤和遇到的问题见文章后面
运行CUDA应用需要系统有跟CUDA Toolkit适配的GPU(硬件)和GPU驱动(软件),所以需要这一步。
首先在‘电脑-属性-设备管理器-显示适配器’查看自己的显卡型号,我的是NVIDIA GeForce 940MX。之后下载对应的NVIDIA驱动程序,地址是:https://www.nvidia.cn/Download/index.aspx?lang=cn,安装完成后用nvidia-smi显示显卡的基本信息,有就是安装成功。
CUDA是英伟达的基于并行编程和指令集架构的计算框架,能利用并行计算引擎。
NVIDIA cuDNN是用于深度神经网络的GPU加速库。获取地址为https://developer.nvidia.com/rdp/cudnn-archive,下载需要先注册。
注意CUDA版本、cuDNN版本以及之后你要选的pytorch的CUDA版本必须一致,且驱动版本必须能大于等于该版本。
这两步可以参考这篇文章的前一部分。
在pytorch官网选择对应的版本就行。我用的是conda命令,并去掉了最后的-c pytorch,这样才能使用比较快的清华源。
torch.__version__ # 1.6.0
torch.cuda.is_available() # False
torch.version.cuda # 最开始是None, gpu配置好后是10.2.89
torch.__file__ # 查看使用的torch是哪个目录下的, e.g.服务器上虚拟环境中的是'/home/fanyuxuan/workspace/anaconda3/envs/LatticeLSTM/lib/python2.7/site-packages/torch/__init__.pyc'
时常看到有人说conda虚拟环境,这个说法其实不对,那叫python的虚拟环境。
python虚拟环境可以通过virtualenv模块或者pipenv模块来创建和管理,也可以通过conda来管理。每个虚拟环境下都有一套python和其他需要用到的包,这些python和包版本可以不同,达到了“隔离”的效果。使用不同虚拟环境的本质就是在python运行的时候使用不同sys.path,从而访问不同的文件夹,用到不同版本的python和包。
我用的是conda来创建和管理,常见命令如下。
conda env list # 查看所有虚拟环境(及其文件夹路径)
conda list # 查看当前环境下安装的所有包
conda install numpy # 安装包
conda uninstall numpy # 卸载包
conda update numpy # 更新包
conda create --user --name pytorch --display-name "Python (pytorch)" # 创建虚拟环境
conda activate pytorch # 激活虚拟环境,关闭用conda deactivate
conda remove -n pytorch # 删除虚拟环境
conda install ipykernelconda install -n pytorch ipykernel,我好像没有用也成功了)python -m ipykernel install --user --name pytorch(虚拟环境名称) --display-name "Python (pytorch)" (display-name是希望在jupyter notebook中显示的名称)其他博客的解决办法:
conda install tornado=4.5
It worked。tornado是python的web框架,jupyter notebook需要它且只能依赖4.5.3(或者更低?)版本的tornado。anaconda navigator GUI界面安装的jupyter默认是最新版本的tornado,导致jupyter notebook和tornado的版本不对应。
上一个问题解决后,我在tensorflow虚拟环境下打开jupyter notebook,发现没有该虚拟环境的选项,因此觉得先得搞清楚这个问题。
至于为什么,就像每个虚拟环境下都要安一遍python和numpy\pandas…\pytorch一样。这个可以从anaconda navigator里直接搜索install,也可以命令行conda install。
有的人说只在主环境内安装一个jupyter notebook、然后配置kernel就行,两种方法应该是都能work,不太清楚这样的区别,具体可以参考* “对anaconda虚拟环境运行jupyter notebook的若干方法的详细调研”*,写的非常详细,囊括了安装多遍jupyte notebook、只安装一遍但是修改kernel、不同的修改kernel方式等多种方法:https://blog.csdn.net/w55100/article/details/88925697
conda install nb_conda和conda install ipykernel有人说(只)要安nb_conda这个插件就能让notebook支持虚拟环境,安了之后jupyter页面回出现conda的tab,并且new下面直接也出现了虚拟环境。目前不知道nb_conda和ipykernel是否为独立的两种分别可行的方法。反正我都安了。
A kernel provides programming language support in Jupyter. IPython is the default kernel. 明白了,kernel是jupyter支持的编程语言环境,除了python还有R, Julia等等。不同的虚拟环境使用的不同版本python编译环境,自然需要不同的kernel啦。
jupyter维护一个kernel列表。kernel信息存在kernel.json文件里(比如具体映射到哪个虚拟环境),不同虚拟环境下有不同的kernel.json。jupyter切换kernel就是给jupyter notebook切换一个语言解释器(也就是python执行环境)。
jupyter kernelspec list # 查看当前jupyter有哪些kernel
jupyter kernelspec remove xxx_kernel_name # 删除指定kernel
ipykernel包的作用就是将当前python环境添加为kernel,配置文件路径大概为~/anaconda3/envs/pytorch/share/jupyter/kernels/python3/kernel.json
前面安装的nb_conda包就是用于kernel管理的 。
# 手动配置kernel:
python -m ipykernel install --user --name pytorch(虚拟环境名称) --display-name "Python (pytorch)"
# 自动配置kernel:创建虚拟环境的同时,安装上ipykernel,即可自动关联kernel与虚拟环境
conda create -n my_env python=3 ipykernel
jupyter notebook运行需要的kernel和conda创建的虚拟环境并不能完全相通,可能会已经创建环境但是启动notebook后找不到。这是因为虚拟环境下可能缺少kernel.json文件。此时conda install -n xxx ipykernel这步创建kernel文件就是必须的啦.
①jupyter notebook以前叫ipython notebook,所以很多地方ipython就是指jupyter
②jupyter中添加conda虚拟环境通过上述步骤可以完成,也能直接在创建虚拟环境的时候完成:conda create -n pytorch python=3.8 ipykernel,这里ipykernel如果换成anaconda就是顺便安装numpy pandas这样常用的包。
找到Anaconda安装路径下nb_conda库的envmanager.py文件,win系统在目录:Anaconda3\Lib\site-packages\nb_conda\envmanager.py, 83-86行的代码
return {
"environments": [root_env] + [get_info(env)
for env in info['envs']]
}
改为
return {
"environments": [root_env] + [get_info(env)
for env in info['envs'] if env != root_env['dir']]
}
是因为环境变量内忘记添加D:\anaconda3\Library\bin。注意还需要D:\anaconda3\Scripts和D:\anaconda3,如果出现‘环境变量太长超过xxx字节’的报错,是因为PATH那一行总的条目数太多了,可以参考其他的博客把PATH中的内容放到外面的环境变量中
备注:我base环境的python是3.8的,tensorflow虚拟环境的python是3.6的, pytorch虚拟环境的python是3.7的(捂脸)
核查:①查看pytorch对应的cuda版本②查看cuda版本③查看cudnn版本④查看英伟达驱动版本⑤查看驱动和cuda的版本对应要求
torch.__version__:'1.6.0', torch.cuda.is_available(): False, cudatoolkit:'10.2.89'
安装的时候使用的是conda install pytorch torchvision cudatoolkit=10.2命令
命令行运行nvidia-smi:得到NVIDIA-SMI:451.67, Driver Version:451.67, CUDA Version:11.0
下载的cuda安装包是10.2,cudnn对应的安装包也是10.2.
运行nvcc --version:得到的是CUDA release 10.2。
有人是因为驱动版本太低导致gpu无法使用,但我是版本过高。
每个CUDA Toolkit都有最低版本的CUDA驱动,见图1的表格。注意这句话The CUDA Driver API is always backwards compatible.说明驱动是向后兼容的,所以版本过高绝对可以用。
用conda list偶然发现pytorch的第三列版本号前面竟然带了个cpu_!
自己当时安装的时候添加了清华源,并且用的去掉-c版本的conda命令conda install pytorch torchvision cudatoolkit=10.2。查了一下发现也有网友反应清华源下载pytorch-gpu结果是cpu版问题,于是我换用conda install pytorch torchvision cudatoolkit=10.2 -c pytorch从官方源下载。也可以用pip或者在清华源上直接找到gpu版本的压缩包下载到本地。
可算码完了!终于解决了困扰几乎一个月的环境配置问题(也怪自己不上心)。还有很多细节没有弄明白原理,希望以后可以继续更新本篇。祝配环境的各位一切顺利~