• 搭建Pytorch 和 Tensorflow v1 兼容的环境


    Github 上很多大牛的代码都是Tensorflow v1 写的,比较新的文章则喜欢用Pytorch,这导致我们复现实验或者对比实验的时候需要花费大量的时间在搭建不同的环境上。这篇文章是我经过反复实践总结出来的环境配置教程,亲测有效!

    首先最基本的Python 环境配置如下:

    conda create -n py37 python=3.7

    python版本不要设置得太高也不要太低,3.6~3.7最佳,适用绝大部分代码库。(Tensorflow v1 最高支持的python 版本也只有3.7)

    然后是Pytorch 环境 (因为最简单省力,哈哈哈)

    1. # ROCM 5.1.1 (Linux only)
    2. pip install torch==1.12.1+rocm5.1.1 torchvision==0.13.1+rocm5.1.1 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/rocm5.1.1
    3. # CUDA 11.6
    4. pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu116
    5. # CUDA 11.3
    6. pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
    7. # CUDA 10.2
    8. pip install torch==1.12.1+cu102 torchvision==0.13.1+cu102 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu102
    9. # CPU only
    10. pip install torch==1.12.1+cpu torchvision==0.13.1+cpu torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cpu

    推荐使用pip 安装,用conda 安装的有时候会出现torch 识别不到GPU 的问题....

    官网教程链接

    Previous PyTorch Versions | PyTorch

    然后是显卡相关的配置, cudatoolkitcudnn. 前面这个是pytorch 环境必须具备的包,后面这个则是tensorflow 要使用GPU所必需的。前面安装完pytorch 其实已经装好了一个cudatoolkit,我的电脑是Cuda 10.2 ,所以现在环境中已经有了一个cudatookit=10.2的包了,但是Tensorflow v1 最高只支持到 Cuda 10,所以得降低cudatoolkit的版本到10.0 (Cuda 环境是向下兼容的,我的Cuda 环境是10.2 但是cudatoolkit=10.0 也一样能用,这是Tensorflow v1 最高支持的版本,只能妥协......)

    conda install cudatoolkit=10.0

    然后装cudnn 

    conda install cudnn=7.6.5=cuda10.0_0

    亦可使用如下命令搜索你所要的cudnn版本

    conda search cudnn

     如果conda 下载太慢请切换国内源

    https://www.jianshu.com/p/ca756da23619

    最后把Tensorflow v1装上

    pip install tensorflow-gpu==1.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
    

    推荐的Tensorflow v1 的版本是1.15.0 和1.14.0,其他版本尚未测试。

    最后分别测试Pytorch 和Tensorflow 能否使用GPU如下:

    1. import torch
    2. print(torch.cuda.is_available())

    Pytorch 检测GPU的方法相信大家都知道,不再赘述。Tensorflow v1 检测GPU的方法如下: 

    1. from tensorflow.python.client import device_lib
    2. print(device_lib.list_local_devices())

    如果输出结果为:

    1. TypeError: Descriptors cannot not be created directly.
    2. If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
    3. If you cannot immediately regenerate your protos, some other possible workarounds are:
    4. 1. Downgrade the protobuf package to 3.20.x or lower.
    5. 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).

    则降低protobuf 的版本

    pip install protobuf==3.19.6 -i  https://pypi.tuna.tsinghua.edu.cn/simple
    

    正确的输出为:

    1. 2022-10-30 21:46:59.982971: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
    2. 2022-10-30 21:47:00.006072: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 3699850000 Hz
    3. 2022-10-30 21:47:00.006792: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55d1633f2750 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
    4. 2022-10-30 21:47:00.006808: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): Host, Default Version
    5. 2022-10-30 21:47:00.008473: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
    6. 2022-10-30 21:47:00.105474: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:983] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    7. 2022-10-30 21:47:00.105762: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55d1635c3f60 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
    8. 2022-10-30 21:47:00.105784: I tensorflow/compiler/xla/service/service.cc:176] StreamExecutor device (0): NVIDIA GeForce GTX 1080 Ti, Compute Capability 6.1
    9. 2022-10-30 21:47:00.105990: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:983] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    10. 2022-10-30 21:47:00.106166: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1618] Found device 0 with properties:
    11. name: NVIDIA GeForce GTX 1080 Ti major: 6 minor: 1 memoryClockRate(GHz): 1.582
    12. pciBusID: 0000:01:00.0
    13. 2022-10-30 21:47:00.106369: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.0
    14. 2022-10-30 21:47:00.107666: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10.0
    15. 2022-10-30 21:47:00.108687: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10.0
    16. 2022-10-30 21:47:00.108929: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10.0
    17. 2022-10-30 21:47:00.111721: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10.0
    18. 2022-10-30 21:47:00.112861: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10.0
    19. 2022-10-30 21:47:00.116688: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
    20. 2022-10-30 21:47:00.116826: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:983] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    21. 2022-10-30 21:47:00.117018: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:983] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    22. 2022-10-30 21:47:00.117127: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1746] Adding visible gpu devices: 0
    23. 2022-10-30 21:47:00.117170: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.0
    24. 2022-10-30 21:47:00.117421: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1159] Device interconnect StreamExecutor with strength 1 edge matrix:
    25. 2022-10-30 21:47:00.117435: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1165] 0
    26. 2022-10-30 21:47:00.117446: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1178] 0: N
    27. 2022-10-30 21:47:00.117529: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:983] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    28. 2022-10-30 21:47:00.117678: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:983] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
    29. 2022-10-30 21:47:00.117813: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1304] Created TensorFlow device (/device:GPU:0 with 10361 MB memory) -> physical GPU (device: 0, name: NVIDIA GeForce GTX 1080 Ti, pci bus id: 0000:01:00.0, compute capability: 6.1)
    30. [name: "/device:CPU:0"
    31. device_type: "CPU"
    32. memory_limit: 268435456
    33. locality {
    34. }
    35. incarnation: 10409023728072267246
    36. , name: "/device:XLA_CPU:0"
    37. device_type: "XLA_CPU"
    38. memory_limit: 17179869184
    39. locality {
    40. }
    41. incarnation: 7385902535139826165
    42. physical_device_desc: "device: XLA_CPU device"
    43. , name: "/device:XLA_GPU:0"
    44. device_type: "XLA_GPU"
    45. memory_limit: 17179869184
    46. locality {
    47. }
    48. incarnation: 7109357658802926795
    49. physical_device_desc: "device: XLA_GPU device"
    50. , name: "/device:GPU:0"
    51. device_type: "GPU"
    52. memory_limit: 10864479437
    53. locality {
    54. bus_id: 1
    55. links {
    56. }
    57. }
    58. incarnation: 6537278509263123219
    59. physical_device_desc: "device: 0, name: NVIDIA GeForce GTX 1080 Ti, pci bus id: 0000:01:00.0, compute capability: 6.1"
    60. ]

     最关键的地方是你得看到你的GPU 型号,我的是 GTX 1080Ti,检测成功!

    以上环境适用绝大多数深度学习模型,希望能帮到你!喜欢请点赞!

    完结!撒花!

    参考

    Could not load dynamic library 'libcudart.so.10.0' - 知乎

    https://medium.com/analytics-vidhya/solution-to-tensorflow-2-not-using-gpu-119fb3e04daa

    How to tell if tensorflow is using gpu acceleration from inside python shell? - Stack Overflow

  • 相关阅读:
    Ubantu GoLand安装
    java毕业设计“小世界”私人空间mybatis+源码+调试部署+系统+数据库+lw
    Openresty通过Lua+Redis 实现动态封禁IP
    [ vulhub漏洞复现篇 ] ActiveMQ反序列化漏洞复现(CVE-2015-5254)
    怎么把amr格式转换为mp3格式?
    [go学习笔记.第十六章.TCP编程] 3.项目-海量用户即时通讯系统-redis介入,用户登录,注册
    MViTv2:Facebook出品,进一步优化的多尺度ViT | CVPR 2022
    iptables、firewalld防火墙详解
    spring LaTeX模板参考文献显示不了,怎么解决呀
    GStreamer appsrc 等插件实现视频音频混流,录制和推流
  • 原文地址:https://blog.csdn.net/daimashiren/article/details/127605221