Merge remote-tracking branch 'LCTT/master'

This commit is contained in:
wxy 2018-04-10 18:51:56 +08:00
commit 50ba47c460
5 changed files with 152 additions and 294 deletions

View File

@ -0,0 +1,81 @@
深度学习战争Facebook 支持的 PyTorch 与 Google 的 TensorFlow
======
![](https://hub.packtpub.com/wp-content/uploads/2018/03/iStock-621901930-1068x832.jpg)
有一个令人震惊的事实,即人工智能和机器学习的工具和技术在近期迅速兴起。深度学习,或者说“注射了激素的机器学习”,数据科学家和机器学习专家在这个领域有数不胜数等可用的库和框架。很多这样的框架都是基于 Python 的,因为 Python 是一个更通用,相对简单的语言。[Theano] [1]、[Keras] [2]、 [TensorFlow] [3] 是几个基于 Python 构建的流行的深度学习库,目的是使机器学习专家更轻松。
Google 的 TensorFlow 是一个被广泛使用的机器学习和深度学习框架。 TensorFlow 开源于 2015 年得到了机器学习专家社区的广泛支持TensorFlow 已经迅速成长为许多机构根据其机器学习和深度学习等需求而选择的框架。 另一方面PyTorch 是由 Facebook 最近开发的用于训练神经网络的 Python 包,改编自基于 Lua 的深度学习库 Torch。 PyTorch 是少数可用的深度学习框架之一,它使用<ruby>基于磁带的自动梯度系统<rt>tape-based autograd system</rt></ruby>,以快速和灵活的方式构建动态神经网络。
在这篇文章中,我们将 PyTorch 与 TensorFlow 进行不同方面的比较。
让我们开始吧!
### 什么编程语言支持 PyTorch 和 TensorFlow
虽然主要是用 C++ 和 CUDA 编写的,但 TensorFlow 包含一个位于核心引擎上的 Python API使得更便于被<ruby>Python 支持者<rt>Pythonistas</rt></ruby>使用。 除了 Python它还包括 C++、Haskell、Java、Go 和 Rust 等其他 API这意味着开发人员可以用他们的首选语言进行编码。
虽然 PyTorch 是一个 Python 软件包,但你也可以提供使用基本的 C/C++ 语言的 API 进行编码。 如果你习惯使用 Lua 编程语言,你也可以使用 Torch API 在 PyTorch 中编写神经网络模型。
### PyTorch 和 TensorFlow 有多么易于使用?
如果将 TensorFlow 作为一个独立的框架使用,它可能会有点复杂,并且会给深度学习模型的训练带来一些困难。 为了减少这种复杂性,可以使用位于 TensorFlow 复杂引擎之上的 Keras 封装,以简化深度学习模型的开发和训练。 TensorFlow 也支持 PyTorch 目前没有的[分布式培训] [4]。 由于包含 Python APITensorFlow 也可以在生产环境中使用,即可用于培训练和部署企业级深度学习模型。
PyTorch 由于 Torch 的复杂用 Python 重写。 这使得 PyTorch 对于开发人员更为原生。 它有一个易于使用的框架,提供最大化的灵活和速度。 它还允许在训练过程中快速更改代码而不妨碍其性能。 如果你已经有了一些深度学习的经验,并且以前使用过 Torch那么基于它的速度、效率和易用性你会更喜欢 PyTorch。 PyTorch 包含定制的 GPU 分配器,这使得深度学习模型具有更高的内存效率。 由此,训练大型深度学习模型变得更容易。 因此Pytorch
在 Facebook、Twitter、Salesforce 等大型组织广受欢迎。
### 用 PyTorch 和 TensorFlow 训练深度学习模型
PyTorch 和 TensorFlow 都可以用来建立和训练神经网络模型。
TensorFlow 工作于 SCG静态计算图包括在模型开始执行之前定义静态图。 但是,一旦开始执行,在模型内的调整更改的唯一方法是使用 [tf.session and tf.placeholder tensors][5]。
PyTorch 非常适合训练 RNN递归神经网络因为它们在 [PyTorch] [6] 中比在 TensorFlow 中运行得更快。 它适用于 DCG动态计算图可以随时在模型中定义和更改。 在 DCG 中,每个模块可以单独调试,这使得神经网络的训练更简单。
TensorFlow 最近提出了 TensorFlow Fold这是一个旨在创建 TensorFlow 模型的库,用于处理结构化数据。 像 PyTorch 一样,它实现了 DCG在 CPU 上提供高达 10 倍的计算速度,在 GPU 上提供超过 100 倍的计算速度! 在 [Dynamic Batching] [7] 的帮助下,你现在可以执行尺寸和结构都不相同的深度学习模型。
### GPU 和 CPU 优化的比较
TensorFlow 的编译时间比 PyTorch 短,为构建真实世界的应用程序提供了灵活性。 它可以从 CPU、GPU、TPU、移动设备到 Raspberry Pi物联网设备等各种处理器上运行。
另一方面PyTorch 包括<ruby>张量<rt>tensor</rt></ruby>计算,可以使用 GPU 将深度神经网络模型加速到 [50 倍或更多] [8]。 这些张量可以停留在 CPU 或 GPU 上。 CPU 和 GPU 都是独立的库, 无论神经网络大小如何PyTorch 都可以高效地利用。
### 社区支持
TensorFlow 是当今最流行的深度学习框架之一,由此也给它带来了庞大的社区支持。 它有很好的文档和一套详细的在线教程。 TensorFlow 还包括许多预先训练过的模型,这些模型托管和提供于 [GitHub] [9]。 这些模型提供给热衷于使用 TensorFlow 开发者和研究人员一些现成的材料来节省他们的时间和精力。
另一方面PyTorch 的社区相对较小,因为它最近才发展起来。 与 TensorFlow 相比,文档并不是很好,代码也不是很容易获得。 然而PyTorch 确实允许个人与他人分享他们的预训练模型。
### PyTorch 和 TensorFlow —— 力量悬殊的故事
就目前而言由于各种原因TensorFlow 显然比 PyTorch 更受青睐。
TensorFlow 很大,经验丰富,最适合实际应用。 是大多数机器学习和深度学习专家明显的选择,因为它提供了大量的功能,最重要的是它在市场上的成熟应用。 它具有更好的社区支持以及多语言 API 可用。 它有一个很好的文档库,由于从准备到使用的代码使之易于生产。 因此,它更适合想要开始深度学习的人,或者希望开发深度学习模型的组织。
虽然 PyTorch 相对较新,社区较小,但它速度快,效率高。 总之,它给你所有的优势在于 Python 的有用性和易用性。 由于其效率和速度,对于基于研究的小型项目来说,这是一个很好的选择。 如前所述Facebook、Twitter 等公司正在使用 PyTorch 来训练深度学习模型。 但是,使用它尚未成为主流。 PyTorch 的潜力是显而易见的,但它还没有准备好去挑战这个 TensorFlow 野兽。 然而考虑到它的增长PyTorch 进一步优化并提供更多功能的日子并不遥远,直到与 TensorFlow可以 比较。
作者: Savia Lobo非常喜欢数据科学。 喜欢更新世界各地的科技事件。 喜欢歌唱和创作歌曲。 相信才智上的艺术。
--------------------------------------------------------------------------------
via: https://datahub.packtpub.com/deep-learning/dl-wars-pytorch-vs-tensorflow/
作者:[Savia Lobo][a]
译者:[Wuod3n](https://github.com/Wuod3n)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://datahub.packtpub.com/author/savial/
[1]:https://www.packtpub.com/web-development/deep-learning-theano
[2]:https://www.packtpub.com/big-data-and-business-intelligence/deep-learning-keras
[3]:https://www.packtpub.com/big-data-and-business-intelligence/deep-learning-tensorflow
[4]:https://www.tensorflow.org/deploy/distributed
[5]:https://www.tensorflow.org/versions/r0.12/get_started/basic_usage
[6]:https://www.reddit.com/r/MachineLearning/comments/66rriz/d_rnns_are_much_faster_in_pytorch_than_tensorflow/
[7]:https://arxiv.org/abs/1702.02181
[8]:https://github.com/jcjohnson/pytorch-examples#pytorch-tensors
[9]:https://github.com/tensorflow/models

View File

@ -1,27 +1,30 @@
监视 Kubernetes 集群
使用 Graylog 和 Prometheus 监视 Kubernetes 集群
======
这篇文章最初发表在 [Kevin Monroe 的博客][1] 上
这篇文章最初发表在 [Kevin Monroe 的博客][1] 上。
监视日志和指标状态是集群管理员的重点工作。它的好处很明显:指标能帮你设置一个合理的性能目标,而日志分析可以发现影响你工作负载的问题。然而,困难的是如何找到一个与大量运行的应用程序一起工作的监视解决方案。
在本文中,我将使用 [Graylog][2] (用于日志)和 [Prometheus][3] 用于指标去打造一个Kubernetes 集群的监视解决方案。当然了,这不仅是将三个东西连接起来那么简单,实现上,最终结果看起来应该如下图所示:
在本文中,我将使用 [Graylog][2] (用于日志)和 [Prometheus][3] (用于指标)去打造一个 Kubernetes 集群的监视解决方案。当然了,这不仅是将三个东西连接起来那么简单,实现上,最终结果看起来应该如下图所示:
![][4]
正如你所了解的Kubernetes 不仅做一件事情 —— 它是 master、workers、networking bit 等等。同样Graylog 是一个配角apache2、mongodb、等等Prometheus 也一样telegraf、grafana 等等)。在部署中连接这些点看起来似乎有些让人恐惧,但是使用合适的工具将不会那么困难。
正如你所了解的Kubernetes 不是一件东西 —— 它由主控节点、工作节点、网络连接、配置管理等等组成。同样Graylog 是一个配角apache2、mongodb、等等Prometheus 也一样telegraf、grafana 等等)。在部署中连接这些点看起来似乎有些让人恐惧,但是使用合适的工具将不会那么困难。
我将使用 [conjure-up][5] 和 [Canonical Distribution of Kubernetes][6] (CDK) 去探索 Kubernetes。我发现 conjure-up 接口对部署大型软件很有帮助,但是我知道一些人可能不喜欢 GUIs、TUIs 以及其它 UIs。对于这些人,我将用命令行再去部署一遍。
我将使用 [conjure-up][5] 和 [Canonical 版本的 Kubernetes][6] (CDK) 去探索 Kubernetes。我发现 `conjure-up` 接口对部署大型软件很有帮助,但是我知道一些人可能不喜欢 GUI、TUI 以及其它用户界面。对于这些人,我将用命令行再去部署一遍。
在开始之前需要注意的一点是Graylog 和 Prometheus 是部署在 Kubernetes 侧而不是集群上。像 Kubernetes 仪表盘和 Heapster 是运行的集群非常好的信息来源,但是我的目标是为日志/指标提供一个分析机制,而不管集群运行与否。
在开始之前需要注意的一点是Graylog 和 Prometheus 是部署在 Kubernetes 侧而不是集群上。像 Kubernetes 仪表盘和 Heapster 是运行的集群非常好的信息来源,但是我的目标是为日志/指标提供一个分析机制,而不管集群运行与否。
### 开始探索
如果你的系统上没有 conjure-up首先要做的第一件事情是请先安装它在 Linux 上,这很简单:
如果你的系统上没有 `conjure-up`,首先要做的第一件事情是,请先安装它,在 Linux 上,这很简单:
```
sudo snap install conjure-up --classic
```
对于 macOS 用户也提供了 brew 包:
```
brew install conjure-up
```
@ -29,34 +32,33 @@ brew install conjure-up
你需要最新的 2.5.2 版,它的好处是添加了 CDK spell因此如果你的系统上已经安装了旧的版本请使用 `sudo snap refresh conjure-up` 或者 `brew update && brew upgrade conjure-up` 去更新它。
安装完成后,运行它:
```
conjure-up
```
![][7]
你将发现有一个 spell 列表。选择 CDK 然后按下 `Enter`
你将发现有一个 spell 列表。选择 CDK 然后按下回车
![][8]
这个时候,你将看到 CDK spell 可用的附加组件。我们感兴趣的是 Graylog 和 Prometheus因此选择这两个然后点击 `Continue`
这个时候,你将看到 CDK spell 可用的附加组件。我们感兴趣的是 Graylog 和 Prometheus因此选择这两个然后点击 “Continue”
它将引导你选择各种云,以决定你的集群部署的地方。之后,你将看到一些部署的后续步骤,接下来是回顾屏幕,让你再次确认部署内容:
![][9]
除了典型的 K8s 相关的应用程序etcd、flannel、load-balancer、master以及 workers之外你将看到我们选择的日志和指标相关的额外应用程序。
除了典型的 K8s 相关的应用程序etcd、flannel、load-balancer、master 以及 workers之外你将看到我们选择的日志和指标相关的额外应用程序。
Graylog 栈包含如下:
* apache2graylog web 接口的反向代理
* apache2graylog web 界面的反向代理
* elasticsearch日志使用的文档数据库
* filebeat从 K8s master/workers 转发日志到 graylog
* graylog为日志收集器提供一个 api以及提供一个日志分析界面
* mongodb保存 graylog 元数据的数据库
Prometheus 栈包含如下:
* grafana指标相关的仪表板的 web 界面
@ -64,18 +66,18 @@ Prometheus 栈包含如下:
* telegraf发送主机的指标到 prometheus 中
你可以在回顾屏幕上微调部署,但是默认组件是必选 的。点击 “Deploy all Remaining Applications” 继续。
你可以在回顾屏幕上微调部署,但是默认组件是必选 的。点击 `Deploy all Remaining Applications` 继续。
部署工作将花费一些时间它将部署你的机器和配置你的云。完成后conjure-up 将展示一个摘要屏幕,它包含一些链连,你可以用你的终端去浏览各种感兴趣的内容:
部署工作将花费一些时间,它将部署你的机器和配置你的云。完成后,`conjure-up` 将展示一个摘要屏幕,它包含一些链接,你可以用你的终端去浏览各种感兴趣的内容:
![][10]
#### 浏览日志
现在Graylog 已经部署和配置完成我们可以看一下采集到的一些数据。默认情况下filebeat 应用程序将从 Kubernetes 的 master 和 workers 中转发系统日志( `/var/log/*.log` )和容器日志(`/var/log/containers/*.log`)到 graylog 中。
现在Graylog 已经部署和配置完成我们可以看一下采集到的一些数据。默认情况下filebeat 应用程序将从 Kubernetes 的 master 和 worker 中转发系统日志( `/var/log/*.log` )和容器日志(`/var/log/containers/*.log`)到 graylog 中。
记住如下的 apache2 的地址和 graylog 的 admin 密码:
```
juju status --format yaml apache2/0 | grep public-address
public-address: <your-apache2-ip>
@ -83,15 +85,15 @@ juju run-action --wait graylog/0 show-admin-password
admin-password: <your-graylog-password>
```
在浏览器中输入 `http://<your-apache2-ip>` 然后以管理员用户名admin和密码<your-graylog-password>)登入。
在浏览器中输入 `http://<your-apache2-ip>` 然后以管理员用户名admin和密码\<your-graylog-password>)登入。
**注意:** 如果这个界面不可用,请等待大约 5 分钟时间,以便于配置的反向代理生效。
登入后,顶部的 `Sources` 选项卡可以看到从 K8s 的 master 和 workers 中收集日志的概述:
登入后,顶部的 “Sources” 选项卡可以看到从 K8s 的 master 和 workers 中收集日志的概述:
![][11]
通过点击 `System / Inputs` 选项卡深入这些日志,选择 `Show received messages` 查看 filebeat 的输入:
通过点击 “System / Inputs” 选项卡深入这些日志,选择 “Show received messages” 查看 filebeat 的输入:
![][12]
@ -99,9 +101,10 @@ juju run-action --wait graylog/0 show-admin-password
#### 浏览指标
我们的部署通过 grafana 仪表板提供了两种类型的指标:系统指标,包括像 K8s master 和 workers 的 cpu/内存/磁盘使用情况,以及集群指标,包括像从 K8s cAdvisor 端点上收集的容器级指标。
我们的部署通过 grafana 仪表板提供了两种类型的指标:系统指标,包括像 K8s master 和 worker 的 CPU /内存/磁盘使用情况,以及集群指标,包括像从 K8s cAdvisor 端点上收集的容器级指标。
记住如下的 grafana 的地址和 admin 密码:
```
juju status --format yaml grafana/0 | grep public-address
public-address: <your-grafana-ip>
@ -109,46 +112,50 @@ juju run-action --wait grafana/0 get-admin-password
password: <your-grafana-password>
```
在浏览器中输入 `http://<your-grafana-ip>:3000`输入管理员用户admin和密码<your-grafana-password>)登入。成功登入后,点击 `Home` 下拉框,选取 `Kubernetes Metrics (via Prometheus)` 去查看集群指标仪表板:
在浏览器中输入 `http://<your-grafana-ip>:3000`输入管理员用户admin和密码\<your-grafana-password>)登入。成功登入后,点击 “Home” 下拉框,选取 “Kubernetes Metrics (via Prometheus)” 去查看集群指标仪表板:
![][14]
我们也可以通过下拉框切换到 `Node Metrics (via Telegraf) ` 去查看 K8s 主机的系统指标。
我们也可以通过下拉框切换到 “Node Metrics (via Telegraf) ” 去查看 K8s 主机的系统指标。
![][15]
### 另一种方法
正如在文章开始的介绍中提到的,我喜欢 conjure-up 的 “魔法之杖” 去指导我完成像 Kubernetes 这种复杂软件的部署。现在,我们来看一下 conjure-up 的另一种方法,你可能希望去看到实现相同结果的一些命令行的方法。还有其它的可能已经部署了前面的 CDK想去扩展使用上述的 Graylog/Prometheus 组件。不管什么原因你既然看到这了,既来之则安之,继续向下看吧。
正如在文章开始的介绍中提到的,我喜欢`conjure-up` 的向导去完成像 Kubernetes 这种复杂软件的部署。现在,我们来看一下 `conjure-up` 的另一种方法,你可能希望去看到实现相同结果的一些命令行的方法。还有其它的可能已经部署了前面的 CDK想去扩展使用上述的 Graylog/Prometheus 组件。不管什么原因你既然看到这了,既来之则安之,继续向下看吧。
支持 conjure-up 的工具是 [Juju][16]。CDK spell 所做的一切,都可以使用 juju 命令行来完成。我们来看一下,如何一步步完成这些工作。
支持 `conjure-up` 的工具是 [Juju][16]。CDK spell 所做的一切,都可以使用 `juju` 命令行来完成。我们来看一下,如何一步步完成这些工作。
**从 Scratch 中启动**
#### 从 Scratch 中启动
如果你使用的是 Linux安装 Juju 很简单,命令如下:
```
sudo snap install juju --classic
```
对于 macOSJuju 也可以从 brew 中安装:
```
brew install juju
```
现在为你选择的云配置一个控制器。你或许会被提示请求一个凭据(用户名密码):
```
juju bootstrap
```
我们接下来需要基于 CDK 捆绑部署:
```
juju deploy canonical-kubernetes
```
**从 CDK 开始**
#### 从 CDK 开始
使用我们部署的 Kubernetes 集群,我们需要去添加 Graylog 和 Prometheus 所需要的全部应用程序:
```
## deploy graylog-related applications
juju deploy xenial/apache2
@ -165,6 +172,7 @@ juju deploy xenial/telegraf
```
现在软件已经部署完毕,将它们连接到一起,以便于它们之间可以相互通讯:
```
## relate graylog applications
juju relate apache2:reverseproxy graylog:website
@ -182,6 +190,7 @@ juju relate kubernetes-worker:juju-info telegraf:juju-info
```
这个时候,所有的应用程序已经可以相互之间进行通讯了,但是我们还需要多做一点配置(比如,配置 apache2 反向代理、告诉 prometheus 如何从 K8s 中取数、导入到 grafana 仪表板等等):
```
## configure graylog applications
juju config apache2 enable_modules="headers proxy_html proxy_http"
@ -199,17 +208,17 @@ juju run-action --wait grafana/0 import-dashboard \
dashboard="$(base64 <dashboard-json>)"
```
以上的步骤需要根据你的部署来指定一些值。你可以用与 conjure-up 相同的方法得到这些:
* <vhost-tmpl>: 从 github 获取我们的示例 [模板][17]
* <graylog-ip>: `juju run --unit graylog/0 'unit-get private-address'`
* <es-cluster>: `juju config elasticsearch cluster-name`
* <scraper-yaml>: 从 github 获取我们的示例 [scraper][18] `[K8S_PASSWORD][20]` 和 `[K8S_API_ENDPOINT][21]` [substitute][19] 的正确值
* <dashboard-json>: 从 github 获取我们的 [主机][22] 和 [k8s][23] 仪表板
以上的步骤需要根据你的部署来指定一些值。你可以用与 `conjure-up` 相同的方法得到这些:
* `<vhost-tmpl>` 从 github 获取我们的示例 [模板][17]
* `<graylog-ip>` `juju run --unit graylog/0 'unit-get private-address'`
* `<es-cluster>` `juju config elasticsearch cluster-name`
* `<scraper-yaml>` 从 github 获取我们的示例 [scraper][18] `[K8S_PASSWORD][20]` 和 `[K8S_API_ENDPOINT][21]` [substitute][19] 的正确值
* `<dashboard-json>` 从 github 获取我们的 [主机][22] 和 [k8s][23] 仪表板
最后,发布 apache2 和 grafana 应用程序,以便于可以通过它们的 web 界面访问:
```
## expose relevant endpoints
juju expose apache2
@ -222,7 +231,7 @@ juju expose grafana
我的目标是向你展示如何去部署一个 Kubernetes 集群,很方便地去监视它的日志和指标。无论你是喜欢向导的方式还是命令行的方式,我希望你清楚地看到部署一个监视系统并不复杂。关键是要搞清楚所有部分是如何工作的,并将它们连接到一起工作,通过断开/修复/重复的方式,直到它们每一个都能正常工作。
这里有一些非常好的工具像 conjure-up 和 Juju。充分发挥这个生态系统贡献者的专长让管理大型软件变得更容易。从一套可靠的应用程序开始按需定制然后投入到工作中
这里有一些像 conjure-up 和 Juju 一样非常好的工具。充分发挥这个生态系统贡献者的专长让管理大型软件变得更容易。从一套可靠的应用程序开始,按需定制,然后投入到工作中!
大胆去尝试吧,然后告诉我你用的如何。你可以在 Freenode IRC 的 **#conjure-up** 和 **#juju** 中找到像我这样的爱好者。感谢阅读!
@ -236,7 +245,7 @@ via: https://insights.ubuntu.com/2018/01/16/monitor-your-kubernetes-cluster/
作者:[Kevin Monroe][a]
译者:[qhwdw](https://github.com/qhwdw)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -1,46 +1,47 @@
区块链不适用的若干场景
======
> 这三个问题可以帮你避开不实宣传。
![](https://opensource.com/sites/default/files/styles/image-full-size/public/lead-images/blocks_building.png?itok=eMOT-ire)
不错,“区块链”这个概念异常的火热。
不错,区块链这个概念异常的火热
众所周知我一直关注区块链及相关技术的成熟度发展情况思考我们是否对其评价过高了但从目前的情况来看还没有这个迹象。我在文中提到的区块链技术是广义上的包含了狭义上不属于区块链的分布式账本技术DLT。我对<ru by>私有链<rt>permissioned blockchain</rt></ruby>更感兴趣,其中私有链的定义可以参考我的文章《[区块链是安全性方面的话题吗?][1]》。简而言之,我对加密货币之外的区块链业务应用特别感兴趣^[注1](#footnote1)
众所周知我一直关注区块链及相关技术的成熟度发展情况思考其是否达到过高期望的峰值peak hype但从目前的情况来看还没有这个迹象。我在文中提到的区块链技术是广义上的包含了狭义上不属于区块链的分布式账本技术DLTs。我对私有链更感兴趣其中私有链的定义可以参考我的文章[区块链是安全性方面的话题吗?][1]。简而言之,我对加密货币之外的区块链业务应用特别感兴趣<sup>[1](#footnote1)</sup>
我们对区块链的技术成熟度的判断应该有一部分可以得到证实^[注2](#footnote2) 。如果我们判断正确,未来将会出现海量的区块链应用。这很可能会变成现实,但并不是所有的应用都是优秀的区块链应用,其中一部分很可能是非常糟糕的
我们对区块链的技术成熟度的判断应该有一部分可以得到证实<sup>[2](#footnote2)</sup>。如果我们判断正确,未来将会出现海量的区块链应用。这很可能会变成现实,但并不是所有的应用都是优秀的区块链应用,其中一部分很可能是非常糟糕的。
但区块链所处的技术成熟度意味着,大量业务将快速拥抱新技术<sup>[3](#footnote3)</sup>,但对于可能的前景却一知半解。促成这种情况的原因可以大致分为三种:
但区块链所处的技术成熟度意味着,大量业务将快速拥抱新技术^[注3](#footnote3) ,但对于可能的前景却一知半解。促成这种情况的原因可以大致分为三种:
1. 对于涉及多用户数据存储的业务应用,在投入精力的情况下,几乎都可以改造为基于区块链的版本;
2. 很多区块链相关的会议和“专家”呼吁尽快拥抱区块链,否则可能会在半年内被淘汰<sup>[4](#footnote4)</sup>
2. 很多区块链相关的会议和“专家”呼吁尽快拥抱区块链,否则可能会在半年内被淘汰^[注4](#footnote4)
3. 完全理解区块链技术是很难的,支持其在企业中落地的往往是工程师。
对于最后一条,我必须补充几句,不然很容易被引起众怒<sup>[5](#footnote5)</sup>。作为一名工程师,我显然无意贬低工程师。但工程师的天性使然,我们对见到的新鲜事物(亮点)热情澎湃,却对业务本身神交<sup>[6](#footnote6)</sup>不足,故对于新技术给业务带来的影响理解可能并不深刻。在业务领导者看来,这些影响不一定是有利的。
对于最后一条,我必须补充几句,不然很容易被引起众怒^[注5](#footnote5) 。作为一名工程师,我显然无意贬低工程师。但工程师的天性使然,我们对见到的新鲜事物(亮点)热情澎湃,却对业务本身<ruby>深入<rt>fully grok</rt></ruby>^[注6](#footnote6) 不足,故对于新技术给业务带来的影响理解可能并不深刻。在业务领导者看来,这些影响不一定是有利的。
上面提到的三种促因可能导致一种风险,即在没有充分评估利弊的情况下,将业务改造为区块链应用。在另一文([区块链:每个人都应该参与进来吗?][2])中提到几个场景,用于判断一个业务什么情况下适合采用区块链技术。这些场景是有益的,但更进一步,我坚信人们更加需要的是,业务完全不适用区块链的几种简单的场景判定。我总结了三种场景判定,如果对于其中任何一个问题你给出了肯定的回答,那么很大概率上区块链不适合你。
### 场景判定1业务是否需要集中式的管控或授权
### 场景判定 1业务是否需要集中式的管控或授权
如果你给出了肯定的回答,那么区块链不适合你。
例如,假设你是一个蒲团销售商,具有唯一的订单系统,那么对于何时发货你有唯一的授权,显然区块链不适合你。假设你是一个内容提供商,所有提供的内容都会经过唯一的编辑和发布过程,显然区块链不适合你。
例如,假设你是一个普通销售商,具有唯一的订单系统,那么对于何时发货你有唯一的授权,显然区块链不适合你。假设你是一个内容提供商,所有提供的内容都会经过唯一的编辑和发布过程,显然区块链不适合你。
经验总结:只有当任务对应的执行流程及相应的认证流程是分布于众多主体时,区块链是有价值的。
**经验总结:只有当任务对应的执行流程及相应的认证流程是分布于众多主体时,区块链是有价值的。**
### 场景判定2业务使用经典数据库是否工作良好
### 场景判定 2业务使用经典数据库是否工作良好
如果你给出了肯定的回答,那么区块链不适合你。
该场景似乎与上一个场景是强相关的,但并不总是如此。在一些应用中,处理流程是分布的,但信息存储是中心化的;在另外一些应用中,处理流程需要中心化的授权,但信息存储是分布的,即总有一个并不是分布式的。但如果业务使用经典数据库可以工作量良好的话,使用经典数据库是一个好主意。
经典数据库不仅性能良好,在设计与运营成本方面低比区块链或分布式账本,而且我们在这方面技术积累丰厚。区块链让所有人<sup>[8](#footnote8)</sup>可以查看和持有数据,但间接成本和潜在成本都比较高昂。
经典数据库不仅性能良好,在设计与运营成本方面低比区块链或分布式账本,而且我们在这方面技术积累丰厚。区块链让所有人^[注8](#footnote8) 可以查看和持有数据,但间接成本和潜在成本都比较高昂。
### 场景判定3业务采用新技术是否成本高昂或对合作伙伴有负面效果
### 场景判定 3业务采用新技术是否成本高昂或对合作伙伴有负面效果
如果你给出了肯定的回答,那么区块链不适合你。
我曾听过这种观点,即区块链会让所有人获益。但这显然是不可能的。假设你正在为某个流程设计一个应用,改变合作伙伴与你及应用的交互方式,那么你需要判断这个改变是否符合合作伙伴的兴趣。不论是否涉及区块链,可以很容易的设计并引入一个应用,虽然降低了你自己的业务阻力,但与此同时增加了合作伙伴的业务阻力。
我曾听过这种观点,即区块链会让所有人获益。但这显然是不可能的。假设你正在为某个流程设计一个应用,改变合作伙伴与你及应用的交互方式,那么你需要判断这个改变是否符合合作伙伴的想法。不论是否涉及区块链,可以很容易的设计并引入一个应用,虽然降低了你自己的业务阻力,但与此同时增加了合作伙伴的业务阻力。
假设我为汽车行业生产发动机配件那么使用区块链追溯和管理配件会让我受益匪浅。例如我可以查看购买的滚珠轴承的生产商、生产时间和钢铁材料供应商等。换一个角度假设我是滚珠轴承生产商已经为40多个客户公司建立了处理流程。为一家客户引入新的流程会涉及工作方式、系统体系、储藏和安全性标准等方面的变更这无法让我感兴趣相反这会导致复杂性和高开销。
@ -48,31 +49,24 @@
这几个场景判定用于提纲挈领,并不是一成不变的。其中数据库相关的那个场景判定更像是技术方面的,但也是紧密结合业务定位和功能的。希望这几个判定可以为区块链技术引进促因带来的过热进行降温。
<a name="footnote1">1</a>\. 请不要误解我的意思,加密货币显然是一种有趣的区块链业务应用,只是不在本文的讨论范畴而已。
<a name="footnote2">2</a>\. 知道具体是哪些部分是很有意义的,如果你知道,请告诉我好吗?
<a name="footnote3">3</a>\. 坦率的说,它其实更像是一大堆技术的集合体。
<a name="footnote4">4</a>\. 这显然是不太可能的,如果被淘汰的主体是这些会议和“专家”本身倒十分有可能。
<a name="footnote5">5</a>\. 由于比方打得有些不恰当,估计还是会引起众怒。
<a name="footnote6">6</a>\. 我太喜欢grok这个单词了我把它放在这里作为我的工程师标志<sup>[7](#footnote7)</sup>
<a name="footnote7">7</a>\. 你可能已经想到了,我读过*Stranger in a Strange Land*一书,包括删减版和原版。
<a name="footnote8">8</a>\. 在合理的情况下。
- 注 1. 请不要误解我的意思,加密货币显然是一种有趣的区块链业务应用,只是不在本文的讨论范畴而已。
- 注 2. 知道具体是哪些部分是很有意义的,如果你知道,请告诉我好吗?
- 注 3. 坦率的说,它其实更像是一大堆技术的集合体。
- 注 4. 这显然是不太可能的,如果被淘汰的主体是这些会议和“专家”本身倒十分有可能。
- 注 5. 由于比方打得有些不恰当,估计还是会引起众怒。
- 注 6. 我太喜欢 grok 这个单词了,我把它放在这里作为我的工程师标志^[注7](#footnote7) 。
- 注 7. 你可能已经想到了,我读过*Stranger in a Strange Land*一书,包括删减版和原版。
- 注 8. 在合理的情况下。
原文最初发表于[爱丽丝, 夏娃和鲍勃 一个安全性主题博客][3],已获得转载许可。
--------------------------------------------------------------------------------
原文链接: https://opensource.com/article/18/3/3-tests-not-moving-blockchain
via: https://opensource.com/article/18/3/3-tests-not-moving-blockchain
作者:[Mike Bursell][a]
译者:[pinewall](https://github.com/pinewall)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -1,109 +0,0 @@
深度学习战争Facebook支持的PyTorch与Google的TensorFlow
======
有一个令人震惊的事实,即人工智能和机器学习的工具和技术在近期迅速兴起。深度学习或者说“注射了激素的机器学习”是数据科学家和机器学习专家在可用的库和框架方面被宠坏的一个领域。很多这样的框架都是基于Python的因为Python是一个更通用相对简单的语言。[Theano] [1][Keras] [2] [TensorFlow] [3]是一些基于Python构建的流行的深度学习库目的是使机器学习专家更轻松。
Google的TensorFlow是一个广泛使用的机器学习和深度学习框架。 TensorFlow开源于2015年得到了机器学习专家的广泛支持TensorFlow已经迅速成长为许多机构为其机器学习和深度学习需求所选择的框架。 另一方面PyTorch最近开发的用于训练神经网络的Python包被改编自基于Lua的深度学习库Torch。 PyTorch是少数可用的DL框架之一它使用基于磁带的autograd系统tape-based autograd system以快速和灵活的方式构建动态神经网络。
在这篇文章中我们将PyTorch与TensorFlow进行不同方面的比较。
让我们开始吧!
###什么编程语言支持 PyTorch和TensorFlow
虽然主要是用C ++和CUDA编写的但Tensorflow包含一个位于核心引擎上的Python API使得更便于被Pythonistas使用。 除了Python它还包括C ++HaskellJavaGo和Rust等其他API这意味着开发人员可以用他们的首选语言进行编码。
虽然PyTorch是一个Python软件包但你也可以提供使用基本的C / C ++语言的API进行编码。 如果你习惯使用Lua编程语言你也可以使用Torch API在PyTorch中编写神经网络模型。
###PyTorch和TensorFlow有多么易于使用
如果将TensorFlow作为一个独立的框架使用它可能会有点复杂并且会给深度学习模型的训练带来一些困难。 为了减少这种复杂性可以使用位于TensorFlow复杂引擎之上的Keras封装简化深度学习模型的开发和训练。 TensorFlow也支持PyTorch目前没有的[分布式培训] [4]。 由于包含Python APITensorFlow也可以在生产环境中使用即可用于培训练和部署企业级深度学习模型。
PyTorch由于Torch的复杂而被Python重写。 这使得PyTorch对于开发人员更为原生。 它有一个易于使用的框架,提供最大化的灵活和速度。 它还允许在训练过程中快速更改代码而不妨碍其性能。 如果你已经有了一些深度学习的经验并且以前使用过Torch那么基于它的速度效率和易用性你会更喜欢PyTorch。 PyTorch包含定制的GPU分配器这使得深度学习模型具有高度的内存效率。 由此,训练大型深度学习模型变得更容易。 因此Pytorch
在FacebookTwitterSalesforce等大型组织广受欢迎。
###用PyTorch和TensorFlow训练深度学习模型
PyTorch和TensorFlow都可以用来建立和训练神经网络模型。
TensorFlow在SCG静态计算图上工作包括在模型开始执行之前定义静态图形。 但是,一旦开始执行,在模型内的调整更改的唯一方法是使用[tf.session and tf.placeholder tensors][5]。
PyTorch非常适合训练RNNs递归神经网络因为它们在[PyTorch] [6]中比在TensorFlow中运行得更快。 它适用于DCG动态计算图可以随时在模型中定义和更改。 在DCG中每个模块可以单独调试这使得神经网络的训练更简单。
TensorFlow最近提出了TensorFlow Fold这是一个旨在创建TensorFlow模型的库用于处理结构化数据。 像PyTorch一样它实现了DCGs在CPU上提供高达10倍的计算速度在GPU上提供超过100倍的计算速度 在[Dynamic Batching] [7]的帮助下,你现在可以执行尺寸和结构都不相同的深度学习模型。
###GPU和CPU优化的比较
TensorFlow的编译时间比PyTorch短为构建真实世界的应用程序提供了灵活性。 它可以从CPUGPUTPU移动设备到Raspberry Pi物联网设备等各种处理器上运行。
另一方面PyTorch包括张量tensor计算可以使用GPU将深度神经网络模型加速到[50倍或更多] [8]。 这些张量可以停留在CPU或GPU上。 CPU和GPU都是独立的库 无论神经网络大小如何PyTorch都可以高效地利用。
###社区支持
TensorFlow是当今最流行的深度学习框架之一由此也给它带来了庞大的社区支持。 它有很好的文档和一套详细的在线教程。 TensorFlow还包括许多预先训练过的模型这些模型在[github] [9]上托管和提供。 这些模型提供给热衷于使用TensorFlow开发者和研究人员一些现成的材料来节省他们的时间和精力。
另一方面PyTorch的社区相对较小因为它最近才发展起来。 与TensorFlow相比文档并不是很好代码也不是很容易获得。 然而PyTorch确实允许个人与他人分享他们的预训练模型。
### PyTorch和TensorFlow-力量悬殊的故事
就目前而言由于各种原因Tensorflow显然比PyTorch更受青睐。
Tensorflow很大经验丰富最适合实际应用。 是大多数机器学习和深度学习专家明显的选择,因为它提供了大量的功能,最重要的是它在市场上的成熟应用。 它具有更好的社区支持以及多语言API可用。 它有一个很好的文档库,由于从准备到使用的代码使之易于生产。 因此,它更适合想要开始深度学习的人,或者希望开发深度学习模型的组织。
虽然PyTorch相对较新社区较小但它速度快效率高。 总之它给你所有的优势在于Python的有用性和易用性。 由于其效率和速度,对于基于研究的小型项目来说,这是一个很好的选择。 如前所述FacebookTwitter等公司正在使用Pytorch来训练深度学习模型。 但是,使用它尚未成为主流。 PyTorch的潜力是显而易见的但它还没有准备好去挑战这个TensorFlow的野兽。 然而考虑到它的增长PyTorch进一步优化并提供更多功能的日子并不遥远直到与TensorFlow可以比较。
###Savia Lobo
非常喜欢数据科学。 喜欢更新世界各地的科技事件。 喜欢歌唱和创作歌曲。 相信才智上的艺术。
--------------------------------------------------------------------------------
via: https://datahub.packtpub.com/deep-learning/dl-wars-pytorch-vs-tensorflow/
作者:[Savia Lobo][a]
译者:[Wuod3n](https://github.com/Wuod3n)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://datahub.packtpub.com/author/savial/
[1]:https://www.packtpub.com/web-development/deep-learning-theano
[2]:https://www.packtpub.com/big-data-and-business-intelligence/deep-learning-keras
[3]:https://www.packtpub.com/big-data-and-business-intelligence/deep-learning-tensorflow
[4]:https://www.tensorflow.org/deploy/distributed
[5]:https://www.tensorflow.org/versions/r0.12/get_started/basic_usage
[6]:https://www.reddit.com/r/MachineLearning/comments/66rriz/d_rnns_are_much_faster_in_pytorch_than_tensorflow/
[7]:https://arxiv.org/abs/1702.02181
[8]:https://github.com/jcjohnson/pytorch-examples#pytorch-tensors
[9]:https://github.com/tensorflow/models

View File

@ -1,117 +0,0 @@
提升针对国际读者技术性写作的5个技巧
============================================================
![documentation](https://www.linux.com/sites/lcom/files/styles/rendered_file/public/typewriter-801921_1920.jpg?itok=faTXFNoE "documentation")
针对国际读者用英语写作很不容易,下面这些小窍门可以记下来。[知识共享许可][2]
针对国际读者用英语写文档不需要特别考虑英语母语的人。相反更应该注意文档的语言可能不是读者的第一语言。我们看看下面这些简单的句子“加密密码用xxx命令Encrypt the password using the 'foo bar' command.)”
从语法上讲这个句子是正确的。ing形式动名词经常在英语中使用很多英语母语的人应该大概对这样造句没有疑惑。然而仔细观察这个句子有歧义单词“using”可以针对“the password”也可以针对动词“加密”。因此这个句子能够有两种不同的理解方式。
* Encrypt the password that uses the 'foo bar' command 加密这个使用xxx命令的密码.
* Encrypt the password by using the 'foo bar' command使用xxx命令加密密码.
关于这个话题密码加密或者xxx命令只要你有这方面的知识你就不会理解错误而且正确的选择第二种方式才是句子要表达的含义。但是如果你对这个知识点没有概念呢如果你仅仅是一个翻译者只有关于文章主题的一般知识而不是一个技术专家或者英语不是你的母语而且你不熟悉英语的高级语法形式呢
甚至连英语母语的人都可能需要一些训练才能写出简洁明了的技术文档。所以提升对文章适用性和潜在问题的认识是第一步。
这篇文章,基于我在[欧盟开放源码峰会][5]上的演讲,提供了几种有用的技巧。大多数技巧不仅仅针对技术文档,也可以用于日程信函的书写,如邮件或者报告之类的。
**1. 转换视角**
转换视角从你的读者出发。首先要了解你潜在的读者。如果你是作为开发人员针对用户写则从用户的视角来看待你的产品。用户画像Persona技术能够帮助你专注于目标受众而且提供关于你的受众适当的细节信息。
**2. 遵守KISSKeep it short and simple原则**
这个原则可以用于几个层次,如语法,句式或者单词。看下面的例子:
_单词:_
罕见的和长的单词会降低阅读速度而且可能会是非母语读者的障碍。使用简单点的单词,如:
“utilize” → “use”
“indicate” → “show”, “tell”, “say”
“prerequisite” → “requirement”
_语法_
最好使用最简单的时态。举个例子当提到一个动作的结果时使用一般现在时。如“Click '_OK_' . The _Printer Options_ dialog appears单击'_ok_'.就弹出_打印选项_对话框了
_句式_
一般说来,一个句子就表达一个意思。然而在我看来,把句子的长度限制到一定数量的单词是没有用的。短句子不是想着那么容易理解的(特别是一组名词的时候)。有时候把句子剪短到一定单词数量会造成歧义,相应的还会使句子更加难以理解。
**3. 当心歧义**
作为作者,我们通常没有注意到句子中的歧义。让别人审阅你的文章有助于发现这些问题。如果无法这么做,就尝试从这些不同的视角审视每个句子:
对于没有相关知识背景的读者也能看懂吗?对于语言能力有限的读者也可以吗?所有句子成分间的语法关系清晰吗?如果某个句子没有达到这些要求,重新措辞来解决歧义。
**4. 格式统一**
这个适用于对单词,拼写和标点符号的选择,也是适用于短语和结构的选择。对于列表,使用平行的语法造句。如:
Why white space is important为什么空格很重要:
* It focuses attention让读者注意力集中.
* It visually separates sections让文章章节分割更直观.
* It splits content into chunks让文章内容分割为不同块.
**5. 清除冗余**
对目标读者仅保留明确的信息。在句子层面避免填充如basically, easily和没必要的修饰。如
"already existing" → "existing"
"completely new" → "new"
##总结
你现在应该猜到了,写作就是改。好的文章需要付出和练习。但是如果你仅是偶尔写写,则可以通过专注目标读者和运用基本写作技巧来显著地提升你的文章。
文章易读性越高理解起来越容易即使针对于不同语言级别的读者也是一样。尤其在本地化翻译方面高质量的原文是非常重要的因为“错进错出原文Garbage in, garbage out"。如果原文有不足,翻译时间会更长,导致更高的成本。甚至,这种不足会在翻译过程中成倍的放大而且后面需要在多种语言版本中改正。
![Tanja Roth](https://www.linux.com/sites/lcom/files/styles/floated_images/public/tanja-roth.jpg?itok=eta0fvZC "Tanja Roth")
Tanja Roth, SUSE Linux公司-技术文档专家 [使用许可][1]
_在对语言和技术两方面兴趣的驱动下Tanja作为一名技术文章的写作者在机械工程医学技术和IT领域工作了很多年。她在2005年加入SUSE组织并且贡献了各种各样产品和项目的文章包括高可用性和云的相关话题。_
--------------------------------------------------------------------------------
via: https://www.linux.com/blog/event/open-source-summit-eu/2017/12/technical-writing-international-audience?sf175396579=1
作者:[TANJA ROTH ][a]
译者:[yizhuoyan](https://github.com/yizhuoyan)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]:https://www.linux.com/users/tanja-roth
[1]:https://www.linux.com/licenses/category/used-permission
[2]:https://www.linux.com/licenses/category/creative-commons-zero
[3]:https://www.linux.com/files/images/tanja-rothjpg
[4]:https://www.linux.com/files/images/typewriter-8019211920jpg
[5]:https://osseu17.sched.com/event/ByIW
[6]:https://en.wikipedia.org/wiki/Persona_(user_experience)