Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
hands-on-ml-zh
提交
09f92203
H
hands-on-ml-zh
项目概览
OpenDocCN
/
hands-on-ml-zh
通知
13
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
H
hands-on-ml-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
09f92203
编写于
5月 04, 2018
作者:
yh_cheer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
12chapter update
上级
19acdee0
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
8 addition
and
8 deletion
+8
-8
docs/12.在设备和服务器上的分布式TensorFlow.md
docs/12.在设备和服务器上的分布式TensorFlow.md
+8
-8
未找到文件。
docs/12.在设备和服务器上的分布式TensorFlow.md
浏览文件 @
09f92203
...
...
@@ -4,7 +4,7 @@
在本章中,我们将看到如何使用TensorFlow在多个设备(CPU和GPU)上分配计算并将它们并行运行(参见图12-1)。 首先,我们会先在一台机器上的多个设备上分配计算,然后在多台机器上的多个设备上分配计算。
![
1524821340342
](
F:\文档\GitHub\hands_on_Ml_with_Sklearn_and_TF\images\chapter_12\1.png
)
![
1524821340342
](
https://github.com/yhcheer/hands_on_Ml_with_Sklearn_and_TF/blob/yh/images/chapter_12/1.png?raw=true
)
与其他神经网络框架相比,TensorFlow对分布式计算的支持是其主要亮点之一。 它使您可以完全控制如何跨设备和服务器分布(或复制)您的计算图,并且可以让您以灵活的方式并行和同步操作,以便您可以在各种并行方法之间进行选择。
...
...
@@ -30,11 +30,11 @@
Nvidia的CUDA允许开发者使用支持CUDA的GPU进行各种计算(不仅仅是图形加速)。 Nvidia的CUDA深度神经网络库(cuDNN)是针对DNN的GPU加速原语库。 它提供了常用DNN计算的优化实现,例如激活层,归一化,前向和后向卷积以及池化(参见第13章)。 它是Nvidia Deep Learning SDK的一部分(请注意,它需要创建一个Nvidia开发者帐户才能下载它)。 TensorFlow使用CUDA和cuDNN来控制GPU卡并加速计算(见图12-2)。
![
1524830422813
](
F:\文档\GitHub\hands_on_Ml_with_Sklearn_and_TF\images\chapter_12\2.png
)
![
1524830422813
](
https://github.com/yhcheer/hands_on_Ml_with_Sklearn_and_TF/blob/yh/images/chapter_12/2.png?raw=true
)
您可以使用
`nvidia-smi`
命令来检查CUDA是否已正确安装。 它列出了可用的GPU卡以及每张卡上运行的进程:
![
1524830581469
](
F:\文档\GitHub\hands_on_Ml_with_Sklearn_and_TF\images\chapter_12\2-2.png
)
![
1524830581469
](
https://github.com/yhcheer/hands_on_Ml_with_Sklearn_and_TF/blob/yh/images/chapter_12/2-2.png?raw=true
)
最后,您必须安装支持GPU的TensorFlow。 如果你使用
`virtualenv`
创建了一个独立的环境,你首先需要激活它:
...
...
@@ -95,7 +95,7 @@ $ CUDA_VISIBLE_DEVICES=3,2 python3 program_2.py
程序#1只会看到GPU卡0和1(分别编号为0和1),程序#2只会看到GPU卡2和3(分别编号为1和0)。 一切都会正常工作(见图12-3)。
![
1524831933410
](
F:\文档\GitHub\hands_on_Ml_with_Sklearn_and_TF\images\chapter_12\3.png
)
![
1524831933410
](
https://github.com/yhcheer/hands_on_Ml_with_Sklearn_and_TF/blob/yh/images/chapter_12/3.png?raw=true
)
另一种选择是告诉TensorFlow只抓取一小部分内存。 例如,要使TensorFlow只占用每个GPU内存的40%,您必须创建一个ConfigProto对象,将其
`gpu_options.per_process_gpu_memory_fraction`
选项设置为0.4,并使用以下配置创建session:
...
...
@@ -107,11 +107,11 @@ session = tf.Session(config=config)
现在像这样的两个程序可以使用相同的GPU卡并行运行(但不是三个,因为3×0.4> 1)。 见图12-4。
![
1524832121806
](
F:\文档\GitHub\hands_on_Ml_with_Sklearn_and_TF\images\chapter_12\4.png
)
![
1524832121806
](
https://github.com/yhcheer/hands_on_Ml_with_Sklearn_and_TF/blob/yh/images/chapter_12/4.png?raw=true
)
如果在两个程序都运行时运行
`nvidia-smi`
命令,则应该看到每个进程占用每个卡的总RAM大约40%:
![
1524832269888
](
F:\文档\GitHub\hands_on_Ml_with_Sklearn_and_TF\images\chapter_12\4-2.png
)
![
1524832269888
](
https://github.com/yhcheer/hands_on_Ml_with_Sklearn_and_TF/blob/yh/images/chapter_12/4-2.png?raw=true
)
另一种选择是告诉TensorFlow只在需要时才抓取内存。 为此,您必须将
`config.gpu_options.allow_growth`
设置为True。 但是,TensorFlow一旦抓取内存就不会释放内存(以避免内存碎片),因此您可能会在一段时间后内存不足。 是否使用此选项可能难以确定,因此一般而言,您可能想要坚持之前的某个选项。
...
...
@@ -223,7 +223,7 @@ sess.run(i.initializer) # the placer runs and falls back to /cpu:0
TensorFlow管理每个设备上的线程池以并行化操作(参见图12-5)。 这些被称为 inter-op 线程池。 有些操作具有多线程内核:它们可以使用其他线程池(每个设备一个)称为 intra-op 线程池(下面写成内部线程池)。
![
1525242329728
](
F:\文档\GitHub\hands_on_Ml_with_Sklearn_and_TF\images\chapter_12\5.png
)
![
1525242329728
](
https://github.com/yhcheer/hands_on_Ml_with_Sklearn_and_TF/blob/yh/images/chapter_12/5.png?raw=true
)
例如,在图12-5中,操作A,B和C是源操作,因此可以立即进行评估。 操作A和B放置在GPU#0上,因此它们被发送到该设备的内部线程池,并立即进行并行评估。 操作A正好有一个多线程内核; 它的计算被分成三部分,这些部分由内部线程池并行执行。 操作C转到GPU#1的内部线程池。
...
...
@@ -262,7 +262,7 @@ z = x + y
要跨多台服务器运行图形,首先需要定义一个集群。 一个集群由一个或多个TensorFlow服务器组成,称为任务,通常分布在多台机器上(见图12-6)。 每项任务都属于一项job(下面称作业)。 作业只是一组通常具有共同作用的任务,例如跟踪模型参数(例如,参数服务器parameter server通常命名为“ps”)或执行计算(这样的作业通常被命名为“ worker”)。
![
1525243820277
](
F:\文档\GitHub\hands_on_Ml_with_Sklearn_and_TF\images\chapter_12\6.png
)
![
1525243820277
](
https://github.com/yhcheer/hands_on_Ml_with_Sklearn_and_TF/blob/yh/images/chapter_12/6.png?raw=true
)
以下集群规范定义了两个作业“ps”和“worker”,分别包含一个任务和两个任务。 在这个例子中,机器A托管着两个TensorFlow服务器(即任务),监听不同的端口:一个是“ps”作业的一部分,另一个是“worker”作业的一部分。 机器B仅托管一台TensorFlow服务器,这是“worker”作业的一部分。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录