提交 b075e660 编写于 作者: W wizardforcel

2020-08-31 22:30:35

上级 a9d05cd1
此差异已折叠。
# 十二、分布式 TensorFlow 和云深度学习
在本章中,我们将讨论使用分布式 TensorFlow 和 Cloud 深度学习。 我们将为您提供一些食谱:
在本章中,我们将讨论使用分布式 TensorFlow 和深度学习。 我们将为您提供一些食谱:
* 使用 TensorFlow 和 GPU
* 使用分布式 TensorFlow:多个 GPU 和一个 CPU
......@@ -197,7 +197,7 @@ with tf.Session() as sess:
我们按以下步骤进行:
1. 考虑这段代码,在此我们指定集群体系结构,其中一个主服务器运行在 192.168.1.1:1111 上,两个工作服务器分别运行在 192.168.1.2:1111 和 192.168.1.3:1111 上。
1. 考虑这段代码,在此我们指定集群体系结构,其中一个主服务器运行在`192.168.1.1:1111`上,两个工作服务器分别运行在`192.168.1.2:1111``192.168.1.3:1111`上。
```py
import sys
......@@ -210,7 +210,7 @@ cluster = tf.train.ClusterSpec({'ps': ['192.168.1.1:1111'],
})
```
2. 请注意,代码是在多台机器上复制的,因此了解当前执行节点的作用很重要。 我们从命令行获得此信息。 机器可以是工作程序,也可以是参数服务器(ps)。
2. 请注意,代码是在多台机器上复制的,因此了解当前执行节点的作用很重要。 我们从命令行获得此信息。 机器可以是工作程序,也可以是参数服务器(`ps`)。
```py
# parse command-line to specify machine
......@@ -219,7 +219,7 @@ task_idx = sys.argv[2] # index job in the worker or ps list
# as defined in the ClusterSpec
```
3. 在给定群集的情况下运行训练服务器,我们为每个计算赋予一个角色(工作者或 ps)和一个 ID。
3. 在给定群集的情况下运行训练服务器,我们为每个计算赋予一个角色(工作者或`ps`)和一个 ID。
```py
# create TensorFlow Server. This is how the machines communicate.
......@@ -305,7 +305,7 @@ from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
```
3. 检查您的角色是 Parameter Server 还是 Worker。 如果工人随后定义了一个简单的密集神经网络,则定义一个优化器以及用于评估分类器的度量(例如准确性)。
3. 检查您的角色是参数服务器还是工作器。 如果工人随后定义了一个简单的密集神经网络,则定义一个优化器以及用于评估分类器的度量(例如准确性)。
```py
if FLAGS.job_name == "ps":
......@@ -448,7 +448,7 @@ cd ..
bazel test tensorflow_serving/...
```
5. 现在,让我们看一个保存模型的示例,以便服务器可以保存它。 此步骤的灵感来自[用于构建 MNIST 训练器和服务模型的示例](https://github.com/tensorflow/serving/blob/master/tensorflow_serving/example/mnist_saved_model.py)。 第一步是将构建器导入为 saved_model_builder。 然后,大部分工作由`SavedModelBuilder()`完成,该工作将已训练模型的*快照*保存到可靠的存储中。 请注意,此处`export_path``/tmp/mnist_model/`
5. 现在,让我们看一个保存模型的示例,以便服务器可以保存它。 此步骤的灵感来自[用于构建 MNIST 训练器和服务模型的示例](https://github.com/tensorflow/serving/blob/master/tensorflow_serving/example/mnist_saved_model.py)。 第一步是将构建器导入为`saved_model_builder`。 然后,大部分工作由`SavedModelBuilder()`完成,该工作将已训练模型的*快照*保存到可靠的存储中。 请注意,此处`export_path``/tmp/mnist_model/`
```py
from tensorflow.python.saved_model import builder as saved_model_builder
......@@ -548,7 +548,7 @@ gsutil cp /tmp/data/train.tfrecords gs://${BUCKET}/data/
gsutil cp /tmp/data/test.tfrecords gs://${BUCKET}/data/
```
7. 现在,我们将创建多个工作程序(worker-0,worker-1),它们是初始模板实例计算机的克隆。 我们不希望计算机在关闭时删除磁盘,因此这就是我们拥有第一个命令的原因。
7. 现在,我们将创建多个工作程序(`worker-0``worker-1`),它们是初始模板实例计算机的克隆。 我们不希望计算机在关闭时删除磁盘,因此这就是我们拥有第一个命令的原因。
```py
gcloud compute instances set-disk-auto-delete template-instance \
......@@ -607,7 +607,7 @@ gsutil cp /tmp/data/train.tfrecords gs://${BUCKET}/data/
gsutil cp /tmp/data/test.tfrecords gs://${BUCKET}/data/
```
3. 提交训练工作非常简单:我们可以使用 CloudML 引擎简单地调用训练步骤。 在此示例中,训练人员代码在 us-central1 区域中运行 1000 次迭代。 输入数据是从存储桶中提取的,而输出桶将被提交到其他存储桶中。
3. 提交训练工作非常简单:我们可以使用 CloudML 引擎简单地调用训练步骤。 在此示例中,训练人员代码在`us-central1`区域中运行 1000 次迭代。 输入数据是从存储桶中提取的,而输出桶将被提交到其他存储桶中。
```py
JOB_NAME="job_$(date +%Y%m%d_%H%M%S)"
......@@ -640,7 +640,7 @@ ${VERSION_NAME}
gcloud ml-engine versions set-default --model ${MODEL_NAME} ${VERSION_NAME}
```
6. 在线提供模型后,便可以访问服务器并做出预测。 通过使用脚本`make_request.py`创建 request.json,该脚本从 MNIST 读取数据,执行一次热编码,然后使用格式正确的 json 模式编写功能。
6. 在线提供模型后,便可以访问服务器并做出预测。 通过使用脚本`make_request.py`创建`request.json`,该脚本从 MNIST 读取数据,执行一次热编码,然后使用格式正确的 json 模式编写功能。
```py
gcloud ml-engine predict --model ${MODEL_NAME} --json-instances request.json
......@@ -660,7 +660,7 @@ Microsoft Azure 提供了一项名为 Batch AI 的服务,该服务使我们能
# 做好准备
第一步,我们需要一个 Azure 帐户:如果您还没有 Azure 帐户,则可以[在此处免费创建一个帐户](https://azure.microsoft.com/en-us/services/batch-ai/) 。 Azure 向新用户提供为期 30 天的$ 200 信用额度。 此食谱将遵循 Microsoft Azure 提供的示例,以使用 TensorFlow 分布式在两个 GPU 上运行 MNIST,相关代码可[在 Github 上获得](https://github.com/Azure/batch-shipyard/tree/master/recipes/TensorFlow-Distributed)
第一步,我们需要一个 Azure 帐户:如果您还没有 Azure 帐户,则可以[在此处免费创建一个帐户](https://azure.microsoft.com/en-us/services/batch-ai/) 。 Azure 向新用户提供为期 30 天的 200 美元信用额度。 此食谱将遵循 Microsoft Azure 提供的示例,以使用 TensorFlow 分布式在两个 GPU 上运行 MNIST,相关代码可[在 Github 上获得](https://github.com/Azure/batch-shipyard/tree/master/recipes/TensorFlow-Distributed)
# 怎么做...
......@@ -718,7 +718,7 @@ az batchai cluster create -n nc6 -i UbuntuDSVM -s Standard_NC6 --min 2 --max 2 -
az batchai cluster create -n nc6 -i UbuntuDSVM -s Standard_NC6 --min 2 --max 2 --afs-name batchaisample --afs-mount-path external -u <user_name> -p <password>
```
9. 下一步是在 job.json 文件中创建作业创建参数:
9. 下一步是在`job.json`文件中创建作业创建参数:
```py
{
......@@ -772,7 +772,7 @@ az batchai job stream-file --job-name myjob --output-directory-id stdouterr --na
# 还有更多...
上面我们学习了如何使用 Azure 命令行工具将 Microsoft Azure Batch AI 用于分布式 TensorFlow。 我们也可以使用 Jupyter Notebook 做同样的事情。 这将涉及设置 Azure Active Directory 并进行新的 App 注册。 [可以在以下链接上获得详细信息](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal)
上面我们学习了如何使用 Azure 命令行工具将 Microsoft Azure Batch AI 用于分布式 TensorFlow。 我们也可以使用 Jupyter 笔记本做同样的事情。 这将涉及设置 Azure Active Directory 并进行新的 App 注册。 [可以在以下链接上获得详细信息](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal)
Azure BatchAI 也可以与其他 AI 深度学习库一起使用,我们建议您仔细阅读 BatchAI Github [以获取更多详细信息](https://github.com/Azure/BatchAI)
......@@ -794,7 +794,7 @@ GPU 仅在 P2 实例创建中可用,并且默认情况下不可用,要获得
现在您已经可以使用 AWS 账户和 p2.xlarge 实例,现在就可以从 EC2 仪表板创建自己的实例了。 第一步是选择机器映像,到目前为止,Amazon 提供了预装有深度学习库的特殊机器映像,您可以选择 Ubuntu 或 Linux 版本。 接下来,选择 GPU 以计算实例类型。
您可以使用默认参数查看并启动实例,也可以配置设置,选择存储并配置安全组。 配置安全组很重要,默认情况下已设置 SSH 安全组,但是如果要使用 Jupyter Notebook,则需要为端口 8888 添加自定义安全组,可以选择从中登录的源。 对于实例,有三种可能性:“自定义”,“随处可见”或“我的 IP”:
您可以使用默认参数查看并启动实例,也可以配置设置,选择存储并配置安全组。 配置安全组很重要,默认情况下已设置 SSH 安全组,但是如果要使用 Jupyter 笔记本,则需要为端口 8888 添加自定义安全组,可以选择从中登录的源。 对于实例,有三种可能性:“自定义”,“随处可见”或“我的 IP”:
![](img/10716413-09c1-49c7-9c5c-207de1610b48.png)
......@@ -802,7 +802,7 @@ GPU 仅在 P2 实例创建中可用,并且默认情况下不可用,要获得
# 怎么做...
1. 第一步是连接到实例,您可以使用命令行通过 ssh 或浏览器来实现。 我们使用 CLI。
1. 第一步是连接到实例,您可以使用命令行通过 SSH 或浏览器来实现。 我们使用 CLI。
2. 要进行连接,首先更改`.pem`文件的模式。
......@@ -833,7 +833,10 @@ ssh -i " <security-keypair-filename>.pem" ubuntu@ec2-XXXXXXXXXXXXX.compute-1.ama
AWS 市场上提供了带有预配置库和 API 的大量 Docker 映像和机器映像。 要启动 jupyter 笔记本,请在命令行中使用`<jupyter notebook --ip=0.0.0.0 --no-browser>`。 这将导致输出,如下所示:
首次连接以使用令牌登录时,将此 URL 复制/粘贴到浏览器中:
http://0.0.0.0:8888 /?token = 3156e ...
```py
http://0.0.0.0:8888/?token=3156e...
```
您将 URL 复制并粘贴到浏览器中,就可以开始使用了。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册