在英特尔 架构上训练和使用 TensorFlow* 模型

简介

TensorFlow* 是一款领先的深度学习和机器学习框架。截至 2017 年 5 月,该框架集成了面向英特尔® 至强® 处理器和英特尔® 至强融核™ 处理器的多项优化。本文是教程系列的第三部分,旨在提供相关信息帮助开发人员通过 GitHub* 存储库中可用的资源构建、安装和探索使用在英特尔® 架构上优化的 TensorFlow*。

本系列的第一篇教程在英特尔® 架构上构建和安装 TensorFlow* 展示了如何通过 GitHub* 存储库中的可用资源构建和安装在英特尔® 架构上优化的 TensorFlow。

本系列的第二篇教程在英特尔® 架构上构建和安装 TensorFlow Serving 介绍了如何构建和安装 TensorFlow Serving — 专为生产环境设计的高性能机器学习服务系统。

在本教程中,我们将训练和保存 TensorFlow 模型,构建 TensorFlow 模型服务器,并通过客户端应用测试该服务器。本教程基于 TensorFlow 网站提供的教程 面向 ML 新手的 MNIST 和 服务 TensorFlow 模型。建议大家在完全了解如何训练和保存 TensorFlow 模型之间,查看这些教程。

训练和保存 MNIST 模型

根据维基百科介绍,MNIST (Modified National Institute of Standards and Technology) 数据库包含 60,000 张训练图像和 10,000 张测试图像,用于机器学习领域的训练与测试。因为 MNIST 数据库相对比较简单,因此经常被用作演示机器学习框架的基础数据集。

首先打开终端,使用以下命令:

cd ~/serving

bazel build //tensorflow_serving/example:mnist_saved_model

rm -rf /tmp/mnist_model

bazel-bin/tensorflow_serving/example/mnist_saved_model /tmp/mnist_model

故障排除:编写时,TensorFlow Serving 存储库识别了一个记录为 “NotFoundError in mnist_export example #421” 的错误。如果使用上述命令后遇到该错误,可尝试以下解决方法:

  1. 打开 serving bazel-bin/tensorflow_serving/example/mnist_saved_model.runfiles/ org_tensorflow/tensorflow/contrib/image/__init__.py
  2. 添加注释 (#),如下所示:
  3. #from tensorflow.contrib.image.python.ops.single_image_random_dot_stereograms import single_image_random_dot_stereograms
  4. 保存并关闭 __init__.py。
  5. 尝试重新发布命令:
  6. bazel-bin/tensorflow_serving/example/mnist_saved_model /tmp/mnist_model

由于运行 mnist_saved_model 时我们省略了 training_iterations 和 model_version command-line 参数,因此它们分别默认为 1000 和 1。因为我们为导出目录传递了 /tmp/mnist_model,因此训练的模型保存在 /tmp/mnist_model/1中。

根据 TensorFlow 教程文档中的解释,“1” 版子目录包含以下文件:

  • saved_model.pb 为序列化 tensorflow::SavedModel。它包含关于该模型的一个或多个图表定义,以及模型的元数据,比如签名。
  • variables 是保留序列化图表变量的文件。

故障排除:在部分实例中可能会遇到脚本运行下载的培训文件被破坏的问题。 该错误在 GitHub 上定义为 "Not a gzipped file #170"。如有必要,可通过 /tmp 目录中的以下命令,手动下载这些文件:

wget http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz

wget http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz

wget http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz

wget http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz

构建和启动 TensorFlow 模型服务器

使用以下命令,构建 TensorFlow 模型服务器:

bazel build //tensorflow_serving/model_servers:tensorflow_model_server

使用以下命令,启动 TensorFlow 模型服务器:

bazel-bin/tensorflow_serving/model_servers/tensorflow_model_server --port=9000 --model_name=mnist --model_base_path=/tmp/mnist_model/ &

测试 TensorFlow 模型服务器

最后一条命令开始在终端中运行 ModelServer。为了使用安装 TensorFlow Serving 中的 mnist_client 实用程序测试服务器,输入 /serving 目录中的以下命令:

bazel build //tensorflow_serving/example:mnist_client

bazel-bin/tensorflow_serving/example/mnist_client --num_tests=1000 --server=localhost:9000

如果一切运行良好,将出现如下图 1 所示的结果。

在英特尔 架构上训练和使用 TensorFlow* 模型

图 1.TensorFlow 客户端测试结果。

故障排除:GitHub 上有一个定义为 “gRPC doesn't respect the no_proxy environment variable” 的错误,会导致客户端应用运行时出现 “Endpoint read failed” 错误。使用 env 命令查看是否设置了 http_proxy 环境变量。如果设置了,可通过以下命令暂时不设置:

unset http_proxy

总结

在本系列教程中,我们介绍了如何构建 TensorFlow 机器学习框架和 TensorFlow Serving — 专为生产环境设计的高性能机器学习服务系统。训练和保存基于 MNIST 数据集的简单模型,然后使用 TensorFlow 模型服务器部署该模型。最后,使用 GitHub 存储库中的 mnist_client 示例演示客户端应用如何运用 TensorFlow 模型服务器执行机器学习参考。

如欲了解更多有关该主题的信息,请访问TensorFlow 网站,它是了解该框架的主要资料来源。文章 TensorFlow 基于现代英特尔® 架构的优化 介绍了具体的图形优化、性能试验,以及借助 CPU 优化构建和安装 TensorFlow 的详细信息。

相关推荐