tensorflow/keras使用GPU进行训练

人工智能45

原文

1 需要的环境配置

2 CUDA安装与配置

进入CUDA下载页面选择对应的CUDA版本:
tensorflow/keras使用GPU进行训练

选择一个需要下载的版本,然后选择系统以及安装方式进行安装。
tensorflow/keras使用GPU进行训练

; 2.1 这里以本地安装(local)为例:

你可以选择精简安装和自定义安装:

  • 精简安装:默认需要安装套餐,这里不推荐,因为有些套餐之前可能已经安装过,这里可能会覆盖之前安装的套餐。
    [En]

    streamlined installation: install packages required by default, which is not recommended here, because some packages may have been installed before, and previously installed packages may be overwritten here.*

  • 自定义安装:自己选择一些需要安装的包,可以只安装自己需要的

tensorflow/keras使用GPU进行训练

如图选择CUDA列表中的Development,Runtime,Documentation,Samples的四个组件,其他组件可按需安装:

tensorflow/keras使用GPU进行训练

记住安装位置,用来配置环境变量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F0E0dQ8Q-1641563770659)(https://jums.club/images/article/v2-fffda3abaeaba46ebd8e9b9f4d7f1c69_r.jpg)]

2.2 CUDA环境变量配置

点击【我的电脑】-》【属性】-》【高级系统设置】-》【环境变量】进行环境变量的配置,如果CUDA安装完成,默认会多出以下几个系统变量:CUDA_PATH、CUDA_PATH_V10_1、NVCUDASAMPLES_ROOT、NVCUDASAMPLES10_1_ROOT,下面式需要配置的:

  • 需要额外添加的环境变量(添加到系统变量那一栏)
CUDA_SDK_PATH:C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.1
CUDA_LIB_PATH:%CUDA_PATH%\lib\x64
CUDA_BIN_PATH:%CUDA_PATH%\bin
CUDA_SDK_BIN_PATH:%CUDA_SDK_PATH%\bin\win64
CUDA_SDK_LIB_PATH:%CUDA_SDK_PATH%\common\lib\x64
  • 需要在系统PATH中添加的变量
%CUDA_LIB_PATH%
%CUDA_BIN_PATH%
%CUDA_SDK_LIB_PATH%
%CUDA_SDK_BIN_PATH%;
C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib\x64
C:\ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
C:\ProgramData\NVIDIACorporation\CUDA Samples\v10.1\common\lib\x64
C:\ProgramData\NVIDIACorporation\CUDA Samples\v10.1\bin\win64

3 安装和配置cuDNN

进入cuDNN官网下载相应版本的cuDNN。cuDNN的全程为NVIDIA CUDA® Deep Neural Network library,是NVIDIA专门针对深度神经网络中的基础操作而设计基于GPU的加速库。

cuDNN是一个压缩包,解压之后如下:

tensorflow/keras使用GPU进行训练

将对应的文件复制到CUDA的安装目录下,默认是C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0(这里版本号是你下载的版本号)

; 4 验证是否安装成功

安装之后,通过以下的方式进行验证,进入如下地址:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\demo_suite,分别执行bandwidthTest.exe和deviceQuery.exe,若如图均返回PASS则说明配置生效。

tensorflow/keras使用GPU进行训练

5 创建tensorflow虚拟环境

anaconda安装这里略过,如果安装完anaconda之后,便可以继续操作。

使用如下命令创建虚拟环境:

conda create -name your_env_name python=version_no anaconda ##(如果末尾不添加anaconda命令,则该虚拟环境只有python,没有其他包)

其中your_env_name是你要创建的虚拟环境的名称,后面的version_no为你指定的python版本,如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ybIrTEnW-1641563770660)(https://jums.club/images/article/20210126163053.png)]

创建完之后可以使用如下命令查看已经创建的虚拟环境:

conda info -e
conda env list ## 两个命令都可以

创建完虚拟环境之后,然后激活该虚拟环境:

conda activate gpu  ## gpu为我创建的虚拟环境

安装腾搜人flow-gpu:

conda install tensorflow-gpu

安装完之后:

使用如下命令查看是否安装成功:

import tensorflow as tf
hello=tf.constant('hello!')
sess=tf.Session()
print(sess.run(hello))

6.1 测试tensorflow是否使用GPU计算

当运行上述代码时,如果输出如下信息,表示tensorflow在使用GPU进行计算。

2021-01-26 16:52:39.588750: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties:
pciBusID: 0000:01:00.0 name: GeForce GTX 1660 Ti computeCapability: 7.5
coreClock: 1.59GHz coreCount: 24 deviceMemorySize: 6.00GiB deviceMemoryBandwidth: 268.26GiB/s
2021-01-26 16:52:39.589095: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudart64_101.dll
2021-01-26 16:52:39.592145: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cublas64_10.dll
2021-01-26 16:52:39.595130: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cufft64_10.dll
2021-01-26 16:52:39.596242: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library curand64_10.dll
2021-01-26 16:52:39.599306: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusolver64_10.dll
2021-01-26 16:52:39.601463: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cusparse64_10.dll
2021-01-26 16:52:39.609400: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library cudnn64_7.dll
2021-01-26 16:52:39.609656: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0

6 测试GPU和CPU的速度

测试代码:


'''
@author: crazy jums
@time: 2021-01-24 20:55
@desc: 添加描述
'''

import os
os.environ["CUDA_VISIBLE_DEVICES"]="0"

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Conv2D, MaxPool2D, Flatten
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.callbacks import TensorBoard
import time

def create_model():
    model = Sequential()
    model.add(Conv2D(32, (5, 5), activation='relu', input_shape=[28, 28, 1]))
    model.add(Conv2D(64, (5, 5), activation='relu'))
    model.add(MaxPool2D(pool_size=(2, 2)))
    model.add(Flatten())
    model.add(Dropout(0.5))
    model.add(Dense(128, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(10, activation='softmax'))
    return model

def compile_model(model):
    model.compile(loss='categorical_crossentropy', optimizer="adam", metrics=['acc'])
    return model

def train_model(model, x_train, y_train, batch_size=128, epochs=10):

    tbCallBack = TensorBoard(log_dir="model", histogram_freq=1, write_grads=True)
    history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, shuffle=True, verbose=2,
                        validation_split=0.2, callbacks=[tbCallBack])
    return history, model

if __name__ == "__main__":
    import tensorflow as tf
    print(tf.__version__)
    from tensorflow.python.client import device_lib
    print(device_lib.list_local_devices())

    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    print(np.shape(x_train), np.shape(y_train), np.shape(x_test), np.shape(y_test))

    x_train = np.expand_dims(x_train, axis=3)
    x_test = np.expand_dims(x_test, axis=3)
    y_train = to_categorical(y_train, num_classes=10)
    y_test = to_categorical(y_test, num_classes=10)
    print(np.shape(x_train), np.shape(y_train), np.shape(x_test), np.shape(y_test))

    model = create_model()
    model = compile_model(model)
    print("start training")
    ts = time.time()
    history, model = train_model(model, x_train, y_train, epochs=2)
    print("start training", time.time() - ts)

计算结果如下:

GPU计算10个epoch的时间:31.588526725769043秒 平均每个epoch15秒
CPU计算2个epoch的时间:104.25619554519653秒 平均每个epoch52秒

参考文章

https://zhuanlan.zhihu.com/p/83596098

写在最后

欢迎大家关注鄙人的公众号【麦田里的守望者zhg】,让我们一起成长,谢谢。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2oT9KXnK-1641563770660)(https://jums.club/images/wechataccount.jpg)]

Original: https://blog.csdn.net/qq_33521184/article/details/122373239
Author: 麦田里的守望者_zhg
Title: tensorflow/keras使用GPU进行训练



相关阅读

Title: ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:Anacondaenvstensorflowlibtyping.py)

报错背景:

因为安装tensorflow-gpu版本需要,我把原来的新建的anaconda环境(我的名为tensorflow)中的python3.8降为了3.7。

在导入seaborn包时,出现了以下错误:

ImportError: cannot import name 'Literal' from 'typing' (D:\Anaconda\envs\tensorflow\lib\typing.py)

原因分析:

这是由于 'Literal' 只支持python3.8版本以上的,对于python3.7并不支持。如果不想升级python版(升级真的很麻烦,可能会导致我的tensorflow-gpu版的不能用了),请看以下解决方法:

情况一:

若你只是单纯的想导入 Literal 的话:

先在你的环境中安装typing_extensions(这是针对python3.8版本以下的使用方法),安装代码如下:

pip install typing_extensions

然后使用以下代码句就可以导入了

from typing_extensions import Literal

情况二:

如果你是像我一样,想导入别的包(如seaborn),却遇到这种错误,以下是报错及解决方法:

报错如下:
tensorflow/keras使用GPU进行训练
解决方法:
找到你的对应路径,打开用红框提示的.py文件(打开方式随你,我是用pycharm打开的),找到对应位置,改成如下:

from typing import (
    IO,
    TYPE_CHECKING,
    Any,
    AnyStr,
    Callable,
    Collection,
    Dict,
    Hashable,
    List,
    Mapping,
    Optional,
    Sequence,
    Tuple,
    Type as type_t,
    TypeVar,
    Union,
)
from typing_extensions import (
        Literal,
        TypedDict,
        final,
    )

如果还报 ImportError: cannot import name 'xxx' from 'typing'
即再回到此.py文件下进行修改,比如 TypedDict, 不能放到上面from typing import去,否则,则会报类似错误。

我修改完_typing.py文件后,再次运行,又报了以下错误(但是好歹不是之前那个错误了)

No module named 'pandas._libs.interval'

这个错误好改,在你的环境中,安装以下:

pip install --force-reinstall pandas

至此,终于解决问题,可以导入 seaborn 啦。

Original: https://blog.csdn.net/yuhaix/article/details/124528628
Author: 小小_喻
Title: ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:Anacondaenvstensorflowlibtyping.py)

Original: https://blog.csdn.net/qq_33521184/article/details/122373239
Author: 麦田里的守望者_zhg
Title: tensorflow/keras使用GPU进行训练



相关阅读

Title: 在jupyter notebook中配置GPU

1. 打开Anaconda Prompt,查看虚拟环境中安装了那些kernel

jupyter kernelspec list

tensorflow/keras使用GPU进行训练
目前环境中有两个环境,一个是我们的base环境,另一个是我们新安装的tensorflowGPU版本。如果要删除新安装的GPU版本,直接按照上面的路径删除文件夹即可。接下来正式在jupyter notebook中配置GPU。

2.打开Anaconda Prompt,安装ipykernel

conda install ipykernel

tensorflow/keras使用GPU进行训练

3.接下来创建ipykernel文件

conda install -n 环境名称 ipykernel

我的GPU版本为tensorflow,所以执行以下命令即可:

conda install -n tensorflow ipykernel

tensorflow/keras使用GPU进行训练

4.进入我们的GPU环境(首先你要有这个环境)

activate 环境名称

我的GPU版本为tensorflow,所以执行以下命令即可:

conda activate tensorflow

tensorflow/keras使用GPU进行训练
出现tensoflow,则说明切换环境成功。

5.在tensorflow环境中导入kernel

python -m ipykernel install --user --name 环境名称

我的GPU版本为tensorflow,所以执行以下命令即可:

python -m ipykernel install --user --name tensorflow

tensorflow/keras使用GPU进行训练
此时,你可以按照上面的路径查看jupyter中是否存在tensorflow这个文件夹
tensorflow/keras使用GPU进行训练

接下来在桌面打开jupyter notebook,查看是否存在新安装的版本

在Anaconda Prompt中输入jupyter notebook
tensorflow/keras使用GPU进行训练
点击Desktop,再点击New,你就看见两个kernel
tensorflow/keras使用GPU进行训练
点击tensorflow,进入到这个GPU版本,输入以下代码检验是否可以运行

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
a = tf.constant(1.)
b = tf.constant(2.)
print(a+b)
print('GPU:', tf.test.is_gpu_available())

tensorflow/keras使用GPU进行训练
出现红色标记说明安装成功!!!!!

Original: https://blog.csdn.net/TYJ00/article/details/124453197
Author: 菜鸟要爱学习
Title: 在jupyter notebook中配置GPU

相关文章
智能语音唤醒词,自学习意义与步骤 人工智能

智能语音唤醒词,自学习意义与步骤

语音自学习的意义 为了提高唤醒词的识别准确率,让移动终端更准确地认出主人的唤醒, 需要训练并让移动终端通过自我学习,记忆保存主人的唤醒声音。 唤醒词语音自学习的步骤 以荣耀v20为例, 其唤醒词是"你...
PHP语音通知接口开发 人工智能

PHP语音通知接口开发

语音通知接口应用场景 语音通知的强提醒模式,能在第一时间通知到用户,满足多种场景下的应用需求 订单通知 报警通知 更多案列请查看短信通知+语音播报自动双呼解决方案 无线语音通知API优势 PHP对接语...
论语音通知在互联网行业中的应用 人工智能

论语音通知在互联网行业中的应用

语音通知顾名思义就是通过拨打语音电话的方式,播报通知的内容,这种通知的方式非常有效,及时的通知到用户一些重要的信息,不会像短信一样,因为其他原因没有看到,或者在短信堆里完全找不到。但是呢,有一些信息可...
如何用Python将普通视频变成动漫视频 人工智能

如何用Python将普通视频变成动漫视频

文章目录 容我废话一下 一、思路流程 二、图像转动漫 三、视频帧读取与视频帧写入 容我废话一下 最近几个月,毒教材被曝光引发争议,那些编写度教材的人着实可恶。咱程序员也没有手绘插画能力,但咱可以借助强...
密度聚类( DBSCAN ) 人工智能

密度聚类( DBSCAN )

密度聚类( DBSCAN ) 密度聚类的思想是不同于K-Means的,但是更符合我们人类的思维,基本的思想是通过是否紧密相连来判断样本点是否属于一个簇。代表性的算法就是DBSCAN,它基于一组邻域参数...
TF-GNN踩坑记录(二) 人工智能

TF-GNN踩坑记录(二)

最近在尝试构建GraphTensor时,尝试把默认的特征名hidden_state改成其他时,出现了奇怪的报错。 一般来说出现此类错误时,只需要检查各模型call()函数中的运算,排查问题就行了。 但...
word2vec-python对词进行相似度计算1 人工智能

word2vec-python对词进行相似度计算1

初学NLP,尝试word2vec模型 第一次学这种,查阅了很多的博客,克服了些些问题,记录一下第一次探索的历程和相关代码,文中借鉴多篇优秀的文章,连接会在文章中给出。 1.实验样本 在我最开始寻找实验...