搭建GPU环境的TensorFlow并将单块GPU划分逻辑为分区的实践

1、搭建环境

1.1、查看GPU版本

在安装tensorflow的GPU版本之前可以先看下自己的显卡情况
命令:nvidia-smi 

 

 或者桌面右下角,NVIDIA图标,进入到NVIDIA的控制面板:

点击左下角的系统信息组件中查看NVCUDA64.dll的版本

1.2、新建虚拟环境

创建一个虚拟环境,名称为myTFGPU,Python版本为3.7,这两个按自己环境指定,也可以进入站点:tensorflow-GPU版本 选择适合自己的版本
conda create -n myTFGPU python=3.7
进入这个虚拟环境:activate myTFGPU

1.3、安装带GPU版本的tensorflow

安装命令,带上豆瓣镜像要快很多

pip install tensorflow-gpu==2.9.0 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com 

安装好之后,我们来看下自己的设备情况:

import tensorflow as tf
tf.test.gpu_device_name()
#Created device /device:GPU:0 with 1318 MB memory:  -> device: 0, name: NVIDIA GeForce GTX 1050, pci bus id: 0000:01:00.0, compute capability: 6.1
'/device:GPU:0'

可以看到GPU的型号,大小,计算能力。这些能够正确显示,说明就安装成功了。再来看下本机的物理GPU和CPU的情况

# 查看gpu和cpu的数量
gpus = tf.config.experimental.list_physical_devices(device_type='GPU')
cpus = tf.config.experimental.list_physical_devices(device_type='CPU')
print(gpus, cpus)
#[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')] [PhysicalDevice(name='/physical_device:CPU:0', device_type='CPU')]

1.4、CUDA和cuDNN版本对应

 其中cudnn和cuda因为以前安装过,这里就省略了,安装命令:

conda install -c conda-forge cudatoolkit=11.2 cudnn=8.1.0

当然这两个对应的版本,可以使用命令:conda search -f cudnn 查看对应的版本,避免出现版本问题

(tensorflowGPU) C:\Users\Tony>conda search -f cudnn
Fetching package metadata .........
cudnn                        7.1.4                 cuda9.0_0  defaults7.1.4                 cuda8.0_0  defaults7.3.1                 cuda9.0_0  defaults7.3.1                cuda10.0_0  defaults7.6.0                cuda10.1_0  defaults7.6.0                cuda10.0_0  defaults7.6.0                 cuda9.0_0  defaults7.6.4                cuda10.1_0  defaults7.6.4                 cuda9.0_0  defaults7.6.4                cuda10.0_0  defaults7.6.5                 cuda9.0_0  defaults7.6.5                cuda10.1_0  defaults7.6.5                cuda10.0_0  defaults7.6.5                cuda10.2_0  defaults7.6.5                 cuda9.2_0  defaults8.2.1                cuda11.3_0  defaults

1.5、CUDA和cuDNN下载

CUDA和cuDNN比较大,建议下载安装要好点:
CUDA Toolkit:https://developer.nvidia.com/cuda-toolkit-archive
cuDNN:https://developer.nvidia.com/rdp/cudnn-archive

安装好了之后,将下面这几个文件复制到对应位置即可:

Copy <installpath>\cuda\bin\cudnn*.dll to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin.
Copy <installpath>\cuda\include\cudnn*.h to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\include.
Copy <installpath>\cuda\lib\x64\cudnn*.lib to C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\lib\x64.

如果安装中遇到问题可以参看:https://blog.csdn.net/weixin_41896770/article/details/127444808

2、GPU逻辑分区

我们知道在Windows里面的硬盘,可以将其随意划分成多个逻辑盘,C、D、E、F等,同样道理,GPU也可以做这样的设置。

import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
#[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]

比如我的电脑就只有一块GPU,有时想做一些多GPU的测试,没有多余的GPU,不过很好的一点是,tensorflow等框架都支持分布式的,同时也支持对GPU做逻辑划分。

#逻辑划分
tf.config.experimental.set_virtual_device_configuration(gpus[0],[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=512),tf.config.experimental.VirtualDeviceConfiguration(memory_limit=512),tf.config.experimental.VirtualDeviceConfiguration(memory_limit=512)])
logical_gpus = tf.config.experimental.list_logical_devices('GPU')
#我们看下是否将GPU成功划分逻辑分区
print(logical_gpus)
#[LogicalDevice(name='/device:GPU:0', device_type='GPU'), LogicalDevice(name='/device:GPU:1', device_type='GPU'), LogicalDevice(name='/device:GPU:2', device_type='GPU')]

打印出来,我们可以看到,将本机的一块物理GPU划分成了三块逻辑GPU,名字分别是/device:GPU:0/device:GPU:1/device:GPU:2

其余一些实用方法可以查阅print(dir(tf.config))

tf.debugging.set_log_device_placement(True)#打印一些变量在哪些设备
gpus = tf.config.experimental.list_physical_devices('GPU')#物理的GPU列表
tf.config.experimental.set_visible_devices(gpus[0], 'GPU')#设置GPU可见

下面有很多方法,有兴趣的可以了解它们的作用: 

['LogicalDevice', 'LogicalDeviceConfiguration', 'PhysicalDevice', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_sys', 'experimental', 'experimental_connect_to_cluster', 'experimental_connect_to_host', 'experimental_functions_run_eagerly', 'experimental_run_functions_eagerly', 'functions_run_eagerly', 'get_logical_device_configuration', 'get_soft_device_placement', 'get_visible_devices', 'list_logical_devices', 'list_physical_devices', 'optimizer', 'run_functions_eagerly', 'set_logical_device_configuration', 'set_soft_device_placement', 'set_visible_devices', 'threading']

3、JupyterLab测试

由于这里我们是新建的一个环境,激活之后在这个虚拟环境中,我们先进行安装 :
conda install -c conda-forge jupyterlab
然后输入命令即可:jupyter lab
这样就可以在JupyterLab中写代码进行测试了

我们来实际测试下这个逻辑分区的GPU:

import tensorflow as tfgpus = tf.config.experimental.list_physical_devices('GPU')
tf.config.experimental.set_virtual_device_configuration(gpus[0],[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=512),tf.config.experimental.VirtualDeviceConfiguration(memory_limit=512),tf.config.experimental.VirtualDeviceConfiguration(memory_limit=512)])
logical_gpus = tf.config.experimental.list_logical_devices('GPU')c = []
for gpu in logical_gpus:print(gpu.name)with tf.device(gpu.name):a = tf.constant([[1,2,3],[4,5,6]])b = tf.constant([[7,8],[9,10],[11,12]])c.append(tf.matmul(a, b))
print(c)
#将三块GPU计算的值,通过CPU计算相加
with tf.device('/cpu:0'):matmul_sum = tf.add_n(c)print(matmul_sum)'''
/device:GPU:0
/device:GPU:1
/device:GPU:2
[<tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[ 58,  64],[139, 154]])>, <tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[ 58,  64],[139, 154]])>, <tf.Tensor: shape=(2, 2), dtype=int32, numpy=
array([[ 58,  64],[139, 154]])>]
tf.Tensor(
[[174 192][417 462]], shape=(2, 2), dtype=int32)
'''

我们可以看到分别在三块逻辑GPU上面进行了矩阵的乘法计算,还可以将它们指定到CPU来计算和。所以需要使用某块GPU或CPU,我们通过使用with tf.device('GPU或CPU名称') 来指定。这种对于大模型来说是很实用的,一般一块GPU的大小是有限的,而大模型的参数是非常大的,这样就可以将不同的层使用不同的GPU来分别计算了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/470.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python技术自学的方式

Python是一种高级编程语言&#xff0c;被广泛用于软件开发、数据分析、人工智能和科学计算等领域。它于1991年由Guido van Rossum创建&#xff0c;并且其简洁、易读的语法以及丰富的标准库使得它成为了初学者和专业开发人员的首选语言之一。 一、Python技术介绍 学习Python技术…

【探索 Kubernetes|作业管理篇 系列 15】DaemonSet 的”过人之处“

前言 大家好&#xff0c;我是秋意零。 在上一篇中&#xff0c;我们讲解了 StatefulSet 的存储状态&#xff1b;我们发现&#xff0c;它的存储状态&#xff0c;就是利用了 PV 与 PVC 的设计。StatefulSet 自动为我们创建 PVC 并且以 <pvc-name>-<pod-name>-<编…

LENOVO联想笔记本电脑ThinkBook 15 G2-ITL(20VE)原装出厂Windows10系统恢复原厂OEM设置预装系统

Lenovo联想笔记本电脑&#xff0c;ThinkBook 15 G2-ITL(20VE)出厂Windows10系统&#xff0c;出厂预装系统 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;ISO 文件大小&#xf…

Type-C PD显示器方案简介

方案概述 LDR6020 Type-C PD显示器方案可以给显示器提供一个全功能C口&#xff0c;支持手机&#xff0c;电脑&#xff0c;游戏主机等一线投屏功能&#xff0c;同时支持PD快充输出。LDR6020内置了 USB Power Delivery 控制器和 PD BMC PHY 收发器&#xff0c;支持PD2.0/3.0等快充…

【PCL】(二)CMake编译

&#xff08;二&#xff09;编译 将以下代码写到pcd_write.cpp中&#xff0c;并放到项目/PATH/TO/MY/GRAND/PROJECT/project中。 #include <iostream>#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>intmain (){pcl::PointCloud<pcl::PointXYZ&…

C语言编程—内存管理

C语言中的动态内存管理。C语言为内存的分配和管理提供了几个函数。这些函数可以在 <stdlib.h> 头文件中找到。 在C语言中&#xff0c;内存是通过指针变量来管理的。指针是一个变量&#xff0c;它存储了一个内存地址&#xff0c;这个内存地址可以指向任何数据类型的变量&…

【C语言】手把手带你解决青蛙跳台阶问题

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_&#xff0c;今天更新的是经典递归问题——青蛙跳台阶&#xff0c;在所有有关递归的问题中&#xff0c;青蛙跳台阶是最广为人知的问题之一&#xff0c;可以说&#xff0c;如果你能真正弄懂青蛙跳台阶问…

生产者与消费者问题

本篇文章我们使用C探讨一下生产者与消费者问题. 1. 多线程的引入 我们学习了操作系统, 知道了进程和线程的概念, 但是如果不进行代码实战的话, 会很难理解它们. 特别是编程的初学者(比如我), 在了解了进程和线程后通常会感到疑惑: 多线程怎么用? 为啥我平时写代码没有使用到…

Mybatis源码分析_解析大流程梳理_解析配置文件 (3)

学习mybatis&#xff0c;绕不开一个核心类 Configuration。这个类相当于一个小型数据库&#xff0c;把mybatis里面所有的配置信息基本全部给存储起来了。 package org.apache.ibatis.session;import java.util.Arrays; import java.util.Collection; import java.util.HashMap;…

Vue3+VueCli+TS官方模板简析

使用脚手架安装相关依赖 使用vueCli 安装预设的vuextslessrouter ## 查看vue/cli版本&#xff0c;确保vue/cli版本在4.5.0以上 vue --version## 安装或者升级你的vue/cli npm install -g vue/cli## 创建 vue create vue3_cli_ts_htgl //create vue3_cli_ts_htgl为自…

ELFK日志分析系统并使用Filter对日志数据进行处理

系列文章目录 文章目录 系列文章目录一、FilebeatELK1.FilebeatELK 部署2.Filebeat 节点上操作 二、Filter1.内置正则表达式调用 总结 一、FilebeatELK 1.FilebeatELK 部署 Node1节点&#xff08;2C/4G&#xff09;&#xff1a;node1/192.168.169.10 Elasticsearch Node2节点…

深入浅出之Docker Compose详解

目录 1.Docker Compose概述 1.1 Docker Compose 定义 1.2 Docker Compose产生背景 1.3 Docker Compose 核心概念 1.4 Docker Compose 使用步骤 1.5 Docker Compose 常用命令 2. Docker Compose 实战 2.1 Docker Compose下载和卸载 2.2 Docker Compose 项目概述 2.3 Do…