Tensorflow2/Pytorch GPU 安装过程

两个框架所需软件/硬件条件:英伟达显卡及驱动、cuda、cudnn

Tensorflow

一、前置条件

在正式安装前,需要以下条件:

  • 会使用conda创建和激活环境

  • 有一张nvidia的显卡,且CUDA compute capabilitiy 不低于3.5.(只要显卡不是很旧应该行)

  • 显卡驱动版本大于418.x(此处是2.3版本的需要,具体版本参考官网),不是的话需要去更新,提供一个官网地址。此外如何查看驱动版本两个方法:Tensorflow2/Pytorch GPU 安装过程_第1张图片

  • 1.点击nvidia设置查看左下角的系统信息可见版本。2.在dos命令行中通过nvidia-smi可见(如果报错应该是环境变量需要设置)

  • Tensorflow2/Pytorch GPU 安装过程_第2张图片

二、创建环境并安装依赖(示例是2.3.0)

示例conda create -n tensorflow23 python=3.7.3,通过activate tensorflow23激活环境。
然后需要安装tensorflow的gpu的依赖(依据tensorflow的版本下载对应的依赖版本):cudnn、cudatoolkit。通过conda下载可以不用设置一步到位:
conda install cudnn=7.6.5 (2.3的tf对应的一个版本)该命令同时会下载其依赖cudatoolkit
两个文件都是几百m,觉得慢可以使用镜像源。

三、安装tensorflow

这里安装的版本是tensorflow==2.3.0。在2.x后的gpu/cpu都包含在里面了,可以不加后缀-gpu。
关键:使用conda install tensorflow=2.3有可能会因为下载的源不是来自pypi/或者只带有cpu部分。导致不能调用GPU。
所以需要使用pip来下载,并且官网也是这样推荐的。
pip install tensorflow==2.3.0 -i https://pypi.douban.com/simple/ (使用豆瓣会明显快些)

安装后的测试

在激活此环境后运行一下python代码

import os,warnings
warnings.filterwarnings('ignore')
import tensorflow as tf
os.environ["TF_CPP_MIN_LOG_LEVEL"] = "99"
print(tf.test.is_gpu_available())
print(tf.config.list_physical_devices('GPU'))

四、总结

以上有诸多细节需要注意,在安装过程中也踩了不少坑,有些博客也过时不适用了,想必此文也有过时的时候,彼时请参考较新的博客。
这里提供示例的环境依赖mlbase-gpu.yml,复制保存后通过conda导入环境: conda env create -f mlbase.yml

name: MLbase-gpu
channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
  - defaults
dependencies:
  - _tflow_select=2.3.0=gpu
  - absl-py=0.12.0=pyhd8ed1ab_0
  - aiohttp=3.7.4=py37hcc03f2d_0
  - astor=0.8.1=pyh9f0ad1d_0
  - astunparse=1.6.3=pyhd8ed1ab_0
  - async-timeout=3.0.1=py_1000
  - attrs=20.3.0=pyhd3deb0d_0
  - blinker=1.4=py_1
  - brotlipy=0.7.0=py37hcc03f2d_1001
  - ca-certificates=2021.4.13=haa95532_1
  - cachetools=4.2.1=pyhd8ed1ab_0
  - certifi=2020.12.5=py37haa95532_0
  - cffi=1.14.5=py37hd8e9650_0
  - chardet=4.0.0=py37h03978a9_1
  - click=7.1.2=pyh9f0ad1d_0
  - cryptography=3.4.7=py37h20c650d_0
  - cudatoolkit=10.1.243=h74a9793_0
  - cudnn=7.6.5=cuda10.1_0
  - gast=0.3.3=py_0
  - google-auth=1.26.1=pyh44b312d_0
  - google-auth-oauthlib=0.4.1=py_2
  - google-pasta=0.2.0=pyh8c360ce_0
  - grpcio=1.36.1=py37h04d2302_0
  - h5py=2.10.0=nompi_py37h23cfb99_105
  - hdf5=1.10.6=nompi_h5268f04_1114
  - idna=2.10=pyh9f0ad1d_0
  - importlib-metadata=3.9.0=py37h03978a9_0
  - intel-openmp=2020.3=h57928b3_311
  - keras-applications=1.0.8=py_1
  - keras-preprocessing=1.1.2=pyhd8ed1ab_0
  - krb5=1.17.2=hbae68bd_0
  - libblas=3.9.0=8_mkl
  - libcblas=3.9.0=8_mkl
  - libcurl=7.75.0=hf1763fc_0
  - liblapack=3.9.0=8_mkl
  - libprotobuf=3.15.6=h7755175_0
  - libssh2=1.9.0=h680486a_6
  - m2w64-gcc-libgfortran=5.3.0=6
  - m2w64-gcc-libs=5.3.0=7
  - m2w64-gcc-libs-core=5.3.0=7
  - m2w64-gmp=6.1.0=2
  - m2w64-libwinpthread-git=5.0.0.4634.697f757=2
  - markdown=3.3.4=pyhd8ed1ab_0
  - mkl=2020.4=hb70f87d_311
  - msys2-conda-epoch=20160418=1
  - multidict=5.1.0=py37hcc03f2d_1
  - oauthlib=3.0.1=py_0
  - openssl=1.1.1k=h2bbff1b_0
  - pandas=1.2.3=py37h08fd248_0
  - pip=21.0.1=pyhd8ed1ab_0
  - protobuf=3.15.6=py37hf2a7229_0
  - pyasn1=0.4.8=py_0
  - pyasn1-modules=0.2.7=py_0
  - pycparser=2.20=pyh9f0ad1d_2
  - pyjwt=2.0.1=pyhd8ed1ab_0
  - pyopenssl=20.0.1=pyhd8ed1ab_0
  - pyreadline=2.1=py37h03978a9_1003
  - pysocks=1.7.1=py37h03978a9_3
  - python=3.7.10=h7840368_100_cpython
  - python-dateutil=2.8.1=py_0
  - python_abi=3.7=1_cp37m
  - pytz=2021.1=pyhd8ed1ab_0
  - requests=2.25.1=pyhd3deb0d_0
  - requests-oauthlib=1.3.0=pyh9f0ad1d_0
  - rsa=4.7.2=pyh44b312d_0
  - setuptools=49.6.0=py37h03978a9_3
  - six=1.15.0=pyh9f0ad1d_0
  - sqlite=3.35.3=h8ffe710_0
  - tensorboard=2.4.1=pyhd8ed1ab_0
  - tensorboard-plugin-wit=1.8.0=pyh44b312d_0
  - termcolor=1.1.0=py_2
  - tk=8.6.10=h8ffe710_1
  - typing-extensions=3.7.4.3=0
  - typing_extensions=3.7.4.3=py_0
  - urllib3=1.26.4=pyhd8ed1ab_0
  - vc=14.2=hb210afc_4
  - vs2015_runtime=14.28.29325=h5e1d092_4
  - werkzeug=1.0.1=pyh9f0ad1d_0
  - wheel=0.36.2=pyhd3deb0d_0
  - win_inet_pton=1.1.0=py37h03978a9_2
  - wincertstore=0.2=py37h03978a9_1006
  - wrapt=1.12.1=py37hcc03f2d_3
  - yarl=1.6.3=py37hcc03f2d_1
  - zipp=3.4.1=pyhd8ed1ab_0
  - zlib=1.2.11=h62dcd97_1010
  - pip:
    - joblib==1.0.1
    - numpy==1.18.5
    - opt-einsum==3.3.0
    - scikit-learn==0.24.1
    - scipy==1.4.1
    - sklearn==0.0
    - tensorflow==2.3.0
    - tensorflow-estimator==2.3.0
    - threadpoolctl==2.1.0
prefix: D:\Miniconda3\envs\MLbase-gpu

6/24补充

另一台电脑编译安装tensorflow2.4时出现的问题:

  • conda用文件创建环境时出现gbk解码错误,可能是miniconda和anaconda问题

  • conda默认源下载cudnn更快但没有最新版如cudnn=8.0及以上。

  • conda用了清华源能下载最新的但速度稳定都不佳多次失败。解决办法是根据http报错的链接去浏览器下载文件,或者看下面的文件信息拼出链接
    Tensorflow2/Pytorch GPU 安装过程_第3张图片
    如图可以看到cudatoolkit链接是https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/win-64/cudatoolkit-11.2.2-h933977f_8.tar.bz2(这里加上了文件后缀)
    再用conda本地安装
    conda install --use-local your-pkg-name
    –use-local后面最好写绝对路径,或者进入到Anaconda的pkgs目录下再执行上述语句。

  • 但我要下载cudnn=8.0.5清华源里没找到只好去英伟达官网下载cudnn(麻烦是还有注册)参考link。cudatoolkit的安装是按照上面的离线方法

Pytorch

经理了前面的踩坑后做类似的事情就很顺手。

流程

  1. 先在cmd里查看nvidia-smi确认是显卡驱动是较新版本(这样能保证用新的cuda),如果没有输出或者版本老,去nvidia官网下新驱动并安装(如同安装其他软件一样next)。

  2. 安装conda并创建虚拟环境(可以用默认环境),用conda安装cudnn(会自动安装cuda),有许多其他博客是去下载安装程序但明显这个conda安装更好还方便管理(除了国内下载慢)。安装命令 conda install cudnn(也可以指定版本参考这里 ) 会安装最新的cudnn、cuda请确保你的驱动版本够兼容(nvidai-smi会显示支持的最新cuda版本) --PS:cudatoolkit包是完整CUDA的子集含所需文件

  3. 去官网获取conda下载命令,如conda install pytorch torchvision torchaudio -c pytorch

更新

现在pytorch已经有自带cudnn的build版本了,所以仅一个官网上的下载命令

conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch (可以事先换源或用代理可能快点)

换了USTC源发现没有最新的pytorch,只能加-c pytorch下,太慢使用代理即可:如果是widows开全局模式用curl ip.sb测试,如果是Linux需要本地跑个v2ray等代理并找到其配置中运行的socks端口,设个环境变量export all_proxy="socks5://127.0.0.1:1080"即可,如果是wsl的话你的v2ray代理在windows中,wsl通过/etc/resovle.conf确定windows的ip如172.17.192.1只需要设环境变量export all_proxy="socks5://172.17.192.1:10808"

你可能感兴趣的:(python,机器学习,tensorflow,深度学习,anaconda,cuda,pip)