2020年4月

800Gb 以太网规范使当前以太网标准的最高速度提高了一倍,但同时也对包括延迟在内的其他方面进行了调整。

由业界支持的 以太网技术联盟 Ethernet Technology Consortium (ETC)已宣布完成 800Gb 以太网技术规范。

新规范基于当前高端 400Gb 以太网协议中使用的许多技术,新规范正式称为 800GBASE-R。设计它的联盟(当时称为 25Gb 以太网联盟)在开发 25、50 和 100Gb 以太网协议方面也发挥了重要作用,其成员包括 博通、思科、谷歌和微软。

800Gb 以太网规范增加了新的 介质访问控制 media access control (MAC)和 物理编码子层 physical coding sublayer (PCS)方法,新规范对这些功能进行了调整,来使用 8 条 106.25Gbps 的物理通道分发数据。(通道可以是铜双绞线,也可以是光缆,一束光纤或光波。)800GBASE-R 规范建立在两个 400 GbE 2xClause PCS 之上,以创建一个以 800Gbps 的总速率运行的单个 MAC。

尽管主要是使用八条 106.25Gb 通道,但这并不是固定的。它可以以一半的速度 (53.125Gbps) 使用 16 条通道。

新标准提供了 400G 以太网规范的一半延迟,但是新规范也将运行在 50 Gbps、100 Gbps 和 200 Gbps 的网络上的 前向纠错 forward error correction (FEC)开销减少了一半,从而减少了网卡上的数据包处理负担。

通过降低延迟,这将满足对延迟敏感的应用(例如高性能计算和人工智能)中对速度的需求,在这些应用中,需要尽可能快地移动大量数据。

从 400G 增加到 800G 并不是太大的技术飞跃。它意味着在相同的传输速率下增加更多的通道,再做一些调整。但是,要想突破 Tb 级,Cisco 和其他网络公司已经讨论了十年了,这将需要对技术进行重大修改,而且并非易事。

新技术可能也不便宜。800G 可与现有硬件一起使用,而 400Gb 以太网交换机价格不菲,高达六位数。对技术进行重大修改,越过 Tb 障碍,可能会变得更加昂贵。但是对于大客户和高性能计算客户而言,这也是情理之中的事。

ETC 并未透露何时会支持 800G 的新硬件,但考虑到它对现有规格的变化不大,它可能会在今年出现,前提是疫情引起的停滞不会影响它。


via: https://www.networkworld.com/article/3538529/ethernet-consortium-announces-completion-of-800gbe-spec.html

作者:Andy Patrizio 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

开始在 Mac 上使用 Raspberry Pi Imager。

有多种购买树莓派的方法,根据你的购买渠道的不同,可能附带或不附带操作系统。要在树莓派上安装操作系统,只需将操作系统镜像 “闪存” 到 SD 卡即可。为了使之尽可能简单,树莓派基金会推出一个 Raspberry Pi Imager 实用程序,你可以在所有主流平台上下载它。下面就来简单介绍一下这个有用的新工具。

安装 Imager

你通常可以在树莓派下载页面上找到 Raspberry Pi Imager。它有 Mac、Ubuntu 和 Windows 版本。我将下载并演示 Mac 版本。

Mac 的安装包是常规的 DMG 镜像,它会挂载到你的桌面,然后经典的安装界面就会出现:

只需将可爱的树莓图标拖到“应用”文件夹,就可以完成。从启动台中调用它,你会看到一系列简单的按钮和菜单供你选择。真的不能比这更简单了:

可用的镜像和选项

默认选项包含各种树莓派型号的镜像。Raspbian 是首选,它有两个可用的选项,较小的 “Lite” 版本和较大的 “Full” 版本。LibreELEC Kodi 娱乐系统有各种特定于型号的版本。Ubuntu 18 和 19 有适用于不同树莓派型号的 32 位和 64 位版本。有一个 RPi 4 EEPROM 恢复程序,以及使用 FAT32 格式化卡的功能。最后,有一个通用的镜像安装程序选项,稍后我将进行尝试。这个简单而紧凑的程序非常方便。

安装一些镜像

我决定使用 16g 的 micro SD 卡。我选择了默认的 Raspbian 镜像,选择已连接的 USB/SD 设备,然后按下 “WRITE” 按钮。这是一个简短的演示:

我没有在此处发布整个操作过程。我认为它是在写入的时候下载了镜像,对于我的无线连接这花费了几分钟。该过程在完成之前要先经过写入,然后经过验证环节。完成后,我弹出设备,并将卡插入到我的树莓派 3 中,然后按照通常的图形 Raspbian 安装向导和桌面环境进行设置。

这对我来说还不够。我每天都会下载许多 Linux,今天我还在寻找更多。我回到了树莓派下载页面,并下载了 RISC OS 镜像。这个过程几乎一样容易。下载 RISCOSPi.5.24.zip 文件,将其解压缩,然后找到 ro524-1875M.img 文件。在 “Operating System” 按钮中,我选择了 “Use Custom” 并选择了所需的镜像文件。这个过程几乎是相同的。唯一真正的不同是我必须在下载目录中搜寻并选择一个镜像。文件写完后,回到树莓派 3,RISC OS 可以使用了。

对 USB C 的抱怨

顺便说一句,如今有多少人对 USB C 带来的不便感到沮丧?我使用的是只有 USB C 口的 MacBook Pro,我需要不断更换适配器才能完成工作。看看这个:

是的,那是一个 USB C 到 USB A 适配器,然后是一个 USB 到 SD 卡读卡器,以及一个 SD 到 micro SD 适配器。我可能可以在网上找到一些东西来简化此过程,但这些都是我手头有的部件,以支持我家五花八门的 Mac、Windows 和 Linux 主机。说到这里就不多说了,但我希望你能从这些疯狂的东西中得到一个笑点。

总结

新的 Raspberry Pi Imager 是一种简单有效的工具,可以快速烧录树莓派镜像。BalenaEtcher 是用于对可移动设备进行烧录的类似工具,但是新的 Raspberry Pi Imager 通过省去了获取那些常见镜像的步骤,使普通树莓派系统安装(如 Raspbian)更加容易。


via: https://opensource.com/article/20/4/raspberry-pi-imager-mac

作者:James Farrell 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

工作中用了容器?熟悉这些出自云原生计算基金会的项目吗?

随着用容器来开发应用的实践变得流行,云原生应用也在增长。云原生应用的定义为:

“云原生技术用于开发使用打包在容器中的服务所构建的应用程序,以微服务的形式部署,并通过敏捷的 DevOps 流程和持续交付工作流在弹性基础设施上进行管理。”

这个定义提到了构成云原生应用的不可或缺的四个元素:

  1. 容器
  2. 微服务
  3. DevOps
  4. 持续集成和持续交付 (CI/CD)

尽管这些技术各有各自独特的历史,但它们之间却相辅相成,在短时间内实现了云原生应用和工具的惊人的指数级增长。这个云原生计算基金会(CNCF)信息图呈现了当今云原生应用生态的规模和广度。

 title=

云原生计算基金会项目

我想说,瞧着吧!这仅仅是一个开始。正如 NodeJS 的出现引发了无数的 JavaScript 工具的爆炸式增长一样,容器技术的普及也推动了云原生应用的指数增长。

好消息是,有几个组织负责监管并将这些技术连接在一起。 其中之一是 开放容器倡议 Open Containers Initiative (OCI),它是一个轻量级的、开放的治理机构(或项目),“它是在 Linux 基金会的支持下形成的,其明确目的是创建开放的行业标准的容器格式和运行时。” 另一个是 CNCF,它是“一个致力于使云原生计算普及和可持续发展的开源软件基金会”。

通常除了围绕云原生应用建立社区之外,CNCF 还帮助项目围绕其云原生应用建立结构化管理。CNCF 创建了成熟等级的概念(沙箱级、孵化级或毕业级),分别与下图中的“创新者”、“早期采用者”和“早期大量应用”相对应。

 title=

CNCF 项目成熟等级

CNCF 为每个成熟等级制定了详细的标准(为方便读者而列在下面)。获得技术监督委员会(TOC)三分之二的同意才能转为孵化或毕业级。

沙箱级

要想成为沙箱级,一个项目必须至少有两个 TOC 赞助商。 有关详细过程,请参见《CNCF 沙箱指南 v1.0》。

孵化级

注:孵化级是我们期望对项目进行全面的尽职调查的起点。

要进入孵化级,项目除了满足沙箱级的要求之外还要满足:

  • 证明至少有三个独立的最终用户已成功将其用于生产,且 TOC 判断这些最终用户具有足够的质量和范围。
  • 提交者的数量要合理。提交者定义为具有提交权的人,即可以接受部分或全部项目贡献的人。
  • 显示出有大量持续提交和合并贡献。
  • 由于这些指标可能会根据项目的类型、范围和大小而有很大差异,所以 TOC 有权决定是否满足这些标准的活动水平。

毕业级

要从沙箱或孵化级毕业,或者要使一个新项目作为已毕业项目加入,项目除了必须满足孵化级的标准外还要满足:

  • 至少有两个来自组织的提交者。
  • 已获得并保持了“核心基础设施计划最佳实践徽章”。
  • 已完成独立的第三方安全审核,并发布了具有与以下示例类似的范围和质量的结果(包括已解决的关键漏洞):https://github.com/envoyproxy/envoy#security-audit,并在毕业之前需要解决所有关键的漏洞。
  • 采用《CNCF 行为准则》。
  • 明确规定项目治理和提交流程。最好将其列在 GOVERNANCE.md 文件中,并引用显示当前提交者和荣誉提交者的 OWNERS.md 文件。
  • 至少有一个主仓的项目采用者的公开列表(例如,ADOPTERS.md 或项目网站上的徽标)。
  • 获得 TOC 的绝大多数票,进入毕业阶段。如果项目能够表现出足够的成熟度,则可以尝试直接从沙箱级过渡到毕业级。项目可以无限期保持孵化状态,但是通常预计它们会在两年内毕业。

值得关注的 9 个项目

本文不可能涵盖所有的 CNCF 项目,我将介绍最有趣的 9 个毕业和孵化的开源项目。

名称授权类型简要描述
KubernetesApache 2.0容器编排平台
PrometheusApache 2.0系统和服务监控工具
EnvoyApache 2.0边缘和服务代理
rktApache 2.0Pod 原生的容器引擎
JaegerApache 2.0分布式跟踪系统
LinkerdApache 2.0透明服务网格
HelmApache 2.0Kubernetes 包管理器
EtcdApache 2.0分布式键值存储
CRI-OApache 2.0专门用于 Kubernetes 的轻量级运行时环境

我也创建了视频材料来介绍这些项目。

毕业项目

毕业的项目被认为是成熟的,已被许多组织采用的,并且严格遵守了 CNCF 的准则。以下是三个最受欢迎的开源 CNCF 毕业项目。(请注意,其中一些描述来源于项目的网站并被做了改编。)

Kubernetes(希腊语“舵手”)

Kubernetes! 说起云原生应用,怎么能不提 Kubernetes 呢? Google 发明的 Kubernetes 无疑是最著名的基于容器的应用程序的容器编排平台,而且它还是一个开源工具。

什么是容器编排平台?通常,一个容器引擎本身可以管理几个容器。但是,当你谈论数千个容器和数百个服务时,管理这些容器变得非常复杂。这就是容器编排引擎的用武之地。容器编排引擎通过自动化容器的部署、管理、网络和可用性来帮助管理大量的容器。

Docker Swarm 和 Mesosphere Marathon 也是容器编排引擎,但是可以肯定地说,Kubernetes 已经赢得了这场比赛(至少现在是这样)。Kubernetes 还催生了像 OKD 这样的容器即服务(CaaS)平台,它是 Kubernetes 的 Origin 社区发行版,并成了 Red Hat OpenShift 的一部分。

想开始学习,请访问 Kubernetes GitHub 仓库,并从 Kubernetes 文档页面访问其文档和学习资源。

Prometheus(普罗米修斯)

Prometheus 是 2012 年在 SoundCloud 上构建的一个开源的系统监控和告警工具。之后,许多公司和组织都采用了 Prometheus,并且该项目拥有非常活跃的开发者和用户群体。现在,它已经成为一个独立的开源项目,独立于公司之外进行维护。

 title=

Prometheus 的架构

理解 Prometheus 的最简单方法是可视化一个生产系统,该系统需要 24(小时)x 365(天)都可以正常运行。没有哪个系统是完美的,也有减少故障的技术(称为容错系统),但是,如果出现问题,最重要的是尽快发现问题。这就是像 Prometheus 这样的监控工具的用武之地。Prometheus 不仅仅是一个容器监控工具,但它在云原生应用公司中最受欢迎。此外,其他开源监视工具,包括 Grafana,都借助了 Prometheus。

开始使用 Prometheus 的最佳方法是下载其 GitHub 仓库。在本地运行 Prometheus 很容易,但是你需要安装一个容器引擎。你可以在 Prometheus 网站上查看详细的文档。

Envoy(使者)

Envoy(或 Envoy 代理)是专为云原生应用设计的开源的边缘代理和服务代理。由 Lyft 创建的 Envoy 是为单一服务和应用而设计的高性能的 C++ 开发的分布式代理,同时也是为由大量微服务组成的服务网格架构而设计的通信总线和通用数据平面。Envoy 建立在 Nginx、HAProxy、硬件负载均衡器和云负载均衡器等解决方案的基础上,Envoy 与每个应用相伴(并行)运行,并通过提供平台无关的方式提供通用特性来抽象网络。

当基础设施中的所有服务流量都经过 Envoy 网格时,很容易就可以通过一致的可观测性来可视化问题域,调整整体性能,并在单个位置添加基础功能。基本上,Envoy 代理是一个可帮助组织为生产环境构建容错系统的服务网格工具。

服务网格应用有很多替代方案,例如 Uber 的 Linkerd(下面会讨论)和 Istio。Istio 通过将其部署为 Sidecar 并利用了 Mixer 的配置模型,实现了对 Envoy 的扩展。Envoy 的显著特性有:

  • 包括所有的“ 入场筹码 table stakes (LCTT 译注:引申为基础必备特性)”特性(与 Istio 这样的控制平面组合时)
  • 带载运行时 99% 数据可达到低延时
  • 可以作为核心的 L3/L4 过滤器,提供了开箱即用的 L7 过滤器
  • 支持 gRPC 和 HTTP/2(上行/下行)
  • 由 API 驱动,并支持动态配置和热重载
  • 重点关注指标收集、跟踪和整体可监测性

要想了解 Envoy,证实其能力并实现其全部优势,需要丰富的生产级环境运行的经验。你可以在其详细文档或访问其 GitHub 仓库了解更多信息。

孵化项目

下面是六个最流行的开源的 CNCF 孵化项目。

rkt(火箭)

rkt, 读作“rocket”,是一个 Pod 原生的容器引擎。它有一个命令行接口用来在 Linux 上运行容器。从某种意义上讲,它和其他容器如 Podman、Docker 和 CRI-O 相似。

rkt 最初是由 CoreOS (后来被 Red Hat 收购)开发的,你可以在其网站上找到详细的文档,以及在 GitHub 上访问其源代码。

Jaeger(贼鸥)

Jaeger 是一个开源的端到端的分布式追踪系统,适用于云端应用。在某种程度上,它是像 Prometheus 这样的监控解决方案。但它有所不同,因为其使用场景有所扩展:

  • 分布式事务监控
  • 性能和延时优化
  • 根因分析
  • 服务依赖性分析
  • 分布式上下文传播

Jaeger 是一项 Uber 打造的开源技术。你可以在其网站上找到详细文档,以及在 GitHub 上找到其源码。

Linkerd

像创建 Envoy 代理的 Lyft 一样,Uber 开发了 Linkerd 开源解决方案用于生产级的服务维护。在某些方面,Linkerd 就像 Envoy 一样,因为两者都是服务网格工具,旨在提供平台级的可观测性、可靠性和安全性,而无需进行配置或代码更改。

但是,两者之间存在一些细微的差异。 尽管 Envoy 和 Linkerd 充当代理并可以通过所连接的服务进行上报,但是 Envoy 并不像 Linkerd 那样被设计为 Kubernetes Ingress 控制器。Linkerd 的显著特点包括:

  • 支持多种平台(Docker、Kubernetes、DC/OS、Amazon ECS 或任何独立的机器)
  • 内置服务发现抽象,可以将多个系统联合在一起
  • 支持 gRPC、HTTP/2 和 HTTP/1.x请 求和所有的 TCP 流量

你可以在 Linkerd 网站上阅读有关它的更多信息,并在 GitHub 上访问其源码。

Helm(舵轮)

Helm 基本上就是 Kubernetes 的包管理器。如果你使用过 Apache Maven、Maven Nexus 或类似的服务,你就会理解 Helm 的作用。Helm 可帮助你管理 Kubernetes 应用程序。它使用“Helm Chart”来定义、安装和升级最复杂的 Kubernetes 应用程序。Helm 并不是实现此功能的唯一方法;另一个流行的概念是 Kubernetes Operators,它被 Red Hat OpenShift 4 所使用。

你可以按照其文档中的快速开始指南GitHub 指南来试用 Helm。

Etcd

Etcd 是一个分布式的、可靠的键值存储,用于存储分布式系统中最关键的数据。其主要特性有:

  • 定义明确的、面向用户的 API(gRPC)
  • 自动 TLS,可选的客户端证书验证
  • 速度(可达每秒 10,000 次写入)
  • 可靠性(使用 Raft 实现分布式)

Etcd 是 Kubernetes 和许多其他技术的默认的内置数据存储方案。也就是说,它很少独立运行或作为单独的服务运行;相反,它以集成到 Kubernetes、OKD/OpenShift 或其他服务中的形式来运作。还有一个 etcd Operator 可以用来管理其生命周期并解锁其 API 管理功能:

你可以在 etcd 文档中了解更多信息,并在 GitHub上访问其源码。

CRI-O

CRI-O 是 Kubernetes 运行时接口的 OCI 兼容实现。CRI-O 用于各种功能,包括:

  • 使用 runc(或遵从 OCI 运行时规范的任何实现)和 OCI 运行时工具运行
  • 使用容器/镜像进行镜像管理
  • 使用容器/存储来存储和管理镜像层
  • 通过容器网络接口(CNI)来提供网络支持

CRI-O 提供了大量的文档,包括指南、教程、文章,甚至播客,你还可以访问其 GitHub 页面

我错过了其他有趣且开源的云原生项目吗?请在评论中提醒我。


via: https://opensource.com/article/19/8/cloud-native-projects

作者:Bryant Son 选题:lujun9972 译者:messon007 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

在 Linux 上安装最新 Python,替代或与老版本并存的分步说明。

Python 现在是最流行、最常用的编程语言。Python 的简单语法和较低的学习曲线使其成为初学者和专业开发人员的终极选择。Python 还是一种非常通用的编程语言。从 Web 开发到人工智能,它几乎在除了移动开发的所有地方都有使用。

如果你使用的是 Python,那么你很有可能是一名开发人员(或想成为一名开发人员),而 Linux 是创建软件的绝佳平台。但是,当你每天使用 Python 时,有时你希望使用最新版本。你可能不想仅仅为了测试最新版本的系统而替换了默认的 Python 安装,因此本文说明了如何在 Linux 上安装最新版本的 Python 3,而不替换发行版提供的版本。

使用 python --version 终端命令检查是否已安装 Python,如果已安装,那么检查是哪个版本。如果你的 Linux 系统上未安装 Python,或者你想安装更新的版本,请按照以下步骤操作。

分步安装说明

步骤 1:首先,安装构建 Python 所需的开发包

在 Debian 上

$ sudo apt update
$ sudo apt install build-essential zlib1g-dev \
libncurses5-dev libgdbm-dev libnss3-dev \
libssl-dev libreadline-dev libffi-dev curl

在 Fedora 上:

$ sudo dnf groupinstall development

步骤 2:下载最新的稳定版本的 Python 3

访问官方 Python 网站并下载最新版本的 Python 3。下载完成后,你会有一个 .tar.xz 归档文件(“tarball”),其中包含 Python 的源代码。

步骤 3:解压 tarball

下载完成后,使用解压程序或 Linux 的 tar 命令解压压缩包,例如:

$ tar -xf Python-3.?.?.tar.xz

步骤 4:配置脚本

解压 Python 压缩包后,进入 configure 脚本所在目录并在 Linux 终端中使用以下命令执行该脚本:

$ cd Python-3.*
./configure

配置可能需要一些时间。等待直到成功完成,然后再继续。

步骤 5:开始构建过程

如果你的系统上已经安装了某个版本的 Python,并且希望同时安装新版本的 Python,请使用以下命令:

$ sudo make altinstall

构建过程可能需要一些时间。

如果要使用此版本替换当前版本的 Python,那么应使用包管理器(例如 aptdnf)卸载当前的 Python 包,然后安装:

$ sudo make install

但是,通常最好以软件包的形式(例如 .deb.rpm 文件)来安装软件,以便系统可以为你跟踪和更新它。因为本文假设尚未打包最新的 Python,所以你可能没有这个选择。在这种情况下,你可以按照建议使用 altinstall 来安装 Python,或者使用最新的源代码重构现有的 Python 包。这是一个高级主题,并且特定于你的发行版,因此不在本文讨论范围之内。

步骤 6:验证安装

如果你没有遇到任何错误,那么现在你的 Linux 系统上已安装了最新的 Python。要进行验证,请在终端中输入以下命令之一:

python3 --version

或者

python --version

如果输出显示 Python 3.x,那么说明 Python 3 已成功安装。

创建虚拟环境(可选)

Python 提供了名为 venv(虚拟环境)的软件包,可帮助你将程序目录或软件包与其他目录或软件包隔离。

要创建虚拟环境,请在 Python 终端中输入以下内容(在此示例中,假定你安装的 Python 版本为 3.8 系列):

python3.8 -m venv example

该命令创建一个带有一些子目录的新目录(我将其命名为 example)。

要激活虚拟环境,请输入:

$ source example/bin/activate
(example) $

请注意,你的终端提示符($)现在以环境名称开头。

要停用虚拟环境,请使用 deactivate 命令:

(example) $ deactivate

总结

Python 是一种有趣的语言,它的开发和改进非常频繁。一旦了解了如何安装最新版本而又不干扰发行版提供的稳定版本,熟悉新功能将很容易。

如果你有任何反馈或问题,请在评论中提出。


via: https://opensource.com/article/20/4/install-python-linux

作者:Vijay Singh Khatri 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

通过使用人类和机器生成的翻译,可以将关键的健康短语翻译成世界各地的当地语言。

你可能不知道,目前世界上有 7117 种语言在使用,不是方言,而是在用的语言! 然而,世界上许多数字媒体只能使用几十种语言,而像谷歌翻译这样的翻译平台只支持 100 种左右的语言。这样的现实意味着,由于缺乏及时获取信息的机会,全世界有数十亿人被边缘化。当前的冠状病毒(COVID-19)大流行已经让人痛苦地意识到了这一点,凸显了将健康相关的短语(如“ 请洗手 wash your hands ”或“保持距离”等)即时、快速翻译成小众语言的必要性。

为此,我应用了最先进的 AI 技术,用 544 种语言构建出了与“请洗手”相近的短语并进行了统计(我的 GPU 还在运行)。 多语言无监督和受监督嵌入 Multilingual Unsupervised and Supervised Embeddings (MUSE)方法被用来训练这 544 种语言和英语之间的跨语言单词嵌入。然后,这些嵌入方法可以从现有文档中提取出与目标短语相似的短语。

我与 SIL 国际公司的同事们合作完成了这项工作,他们收集了该短语的更多的人工翻译结果。这些人工翻译结果和我的一些机器翻译结果的组合可以在这个民族语指南页面上搜索到(机器生成的短语用一个小的机器人图标表示),更多的翻译将在生成/收集到的时候加入。

利用现有的语料库

SIL 国际公司已经完成了 2000 多种语言的语言工作,目前管理着 1600 多个语言项目。因此,当我解决这个特殊的问题时,我知道我们很可能已经多次将“请洗手”和/或类似的短语翻译成了数百种语言,而这一猜测得到了回报。我很快就从我们的档案库中收集到了超过 900 种语言的文档(主要是完成的贝壳书模板、教材和圣经)。这些文档中的每一份都有一个英文的对应版本,其中必然包括“请洗手”和/或类似“请洗脸”这样的短语。此外,这些文档的质量都很高,并与当地语言社区合作进行了翻译和检查。

这是相当多语言的数据集。然而,有两个问题需要克服。首先,这个数据包含了大多数语言的数千种样本,这与训练机器翻译模型所使用的数百万个样本形成了鲜明对比。其次,即使文档中包含目标语言中的“请洗手”这个短语,我们也不知道这个短语在周围文本中的确切位置。

我们当然可以利用低资源语言的机器翻译中的一些最新技巧,但是需要花费一些时间来调整自动化方法,以快速适应每种语言对中的翻译模型。此外,我们所针对的许多语言都没有现成的的基线,可以用来比较评估指标(例如 BLEU 评分)。考虑到对冠状病毒大流行的迫切担忧,我们希望比这更快一点(尽管我们计划在将来再来解决这个问题)。

我选择通过在现有的文档中寻找短语本身或短语的组件(如“请洗”或“你的手”)来尝试构建“请洗手”这个短语。为了找到这些成分,我使用 Facebook Research 的多语言无监督和受监督嵌入(MUSE)对每个 {英语、目标语言} 对进行了 跨语言 cross-lingual 嵌入训练。MUSE 以 单语言 monolingual 的单词嵌入作为输入(我使用 fasttext 来生成这些词),并使用对抗性方法学习了从英语到目标嵌入空间的映射。这个过程的输出是 跨语言 cross-lingual 的单词嵌入。

一旦产生了跨语言嵌入,我们就可以开始在目标语言文档中寻找短语组件。结果发现,整个文档中清楚地使用了“请洗脸”这个短语以及单独的“手”、“请洗”等词。对于每一种语言,我都通过 n-gram 搜索我预期该短语会出现的地方(根据其在英语的对应版本中的用法)。使用跨语言嵌入法对 n-gram 进行了矢量化处理,并使用各种距离指标与英语短语的矢量化版本进行了比较。在嵌入空间中,与英文短语“最接近”的 n-gram 被确定为与目标语言匹配。

最后,将与英语对应的成分短语进行组合,生成目标语言中的“请洗手”短语。这种组合方式再次利用了跨语言嵌入,以确保以合适方式组合组件。例如,如果我们在目标语言中匹配“请洗脚”这个短语,就必须将“脚”对应的 n-gram 替换成“手”对应的 n-gram。下面是 伯利兹·克里奥尔 Belize Kriol 英语的一个例子:

当然,在这个匹配过程中,会做一些假设,这个过程完全有可能不能产生语法上正确的预测。例如,我假设在大多数语言中,“手”的单词和“脚”的单词都是一个 字元 token 长的(字元由空格和标点符号隔开)。当然并非总是如此。这可能会造成类似于“和洗和手你”或类似的瑕疵词条。希望我们可以克服其中的一些局限性,并在未来扩展这个系统,但是,现在,我们选择用图形来强化这个想法。

我们将世界卫生组织的洗手说明改编成了一个 PNG 图片模板。然后,我们把我们翻译和生成的短语,用 Bash 和 Go 脚本的组合将其渲染到洗手图像中。这样,在文字和图像中都强调了正确洗手的理念(以防万一我们生成的翻译很尴尬)。

结果

到目前为止,我已经能够训练出 544 种语言的跨语言嵌入。我使用上述讨论过的方法尝试为所有这些语言构建“请洗手”这个短语。因为我没有许多语言对的对齐数据,所以我使用了同样包含“请洗手”成分的单独的保留文档来帮助验证构造短语中的字元。这让我们对公开发布的翻译版本有了一些信心(至少它们包含了表示“洗”和/或“手”的信息)。此外,我还将该方法与谷歌翻译支持的和/或有可用的人工翻译的语言对进行了比较。以下是来自 Ethnologue 带有语言统计的翻译样本。

语言:意大利语 [Ita]

  • 地点:意大利
  • 人口: 68,000,000
  • 我们的系统: làvati la mani
  • 谷歌翻译: Lavati le mani

语言:保加利亚语 [bul]

  • 地点:保加利亚
  • 人口:8,000,000
  • 我们的系统:умий ръцете
  • 谷歌翻译:Измий си ръцете

语言: 荷兰语 [nld]

  • 地点:荷兰
  • 人口:24,000,000,000
  • 我们的系统:wast uw handen
  • 谷歌翻译:Was je handen

语言: Pijin [pis]

  • 地点:所罗门群岛
  • 人口: 550,000
  • 我们的系统:wasim han
  • 谷歌翻译:不支持

语言:Tikar [tik]

  • 地点:喀麦隆
  • 人口:110,000
  • 我们的系统:ɓɔsi fyàʼ
  • 谷歌翻译:不支持

语言:Waffa [waj]

  • 地点:巴布亚新几内亚
  • 人口:1,300
  • 我们的系统:yaakuuvaitana nnikiiyauvaa fini
  • 谷歌翻译:不支持

构造的短语类似于参考翻译,或者似乎是“请洗手”的另一种说法。例如,在保加利亚语中,我预测为“умий ръцете”,而谷歌翻译预测为“Измий си ръцете”。 然而,如果我用谷歌翻译回译我的预测,我还是会得到“请洗手”。有一些不确定的地方,我无法与参考译文(例如,所罗门群岛的 Pijin [pis])或人类注释的跨度进行比较,但我仍然可以验证“洗”(wasim)和“手”(han)分别用在其他必定是谈论洗或手的参考文件中。 大约有 15% 的译文可以用这个方法验证,我希望在收集参考文献字典的过程中能进行更多的验证。

请注意,我最多使用了每种语言中大约 7000 个句子来得到上述译文,即使是意大利语这样的高资源语言也是如此。我也不依赖语言对之间的对齐句子。尽管存在这种数据非常稀缺、无监督的情况,但对于两个系统都支持的语言,我仍然能够获得类似于谷歌翻译的短语。这证明了这种“混合”方法(无监督的单词嵌入+基于规则的匹配)在将短语翻译成数据非常少的语言中的潜在用途。

注意:我绝对不是说这是解决冠状病毒和其他健康相关的信息传播问题的解决方案。这里仍有很多东西需要探索和正式评估,我们正在为此努力。在很多情况下,这种方法无法帮助构建数百种语言的重要信息资料。但是,我认为,我们所有人都应该尝试着为当前危机的相关问题制定创造性的解决方案。也许这只是一个非常大的拼图中的一块。

你可以在这个民族语言指南上查看经过验证的译文加上人工翻译的完整列表。此外,我们即将以论文的形式对这一系统进行更深入的描述和分析。我们欢迎公众对翻译进行反馈,以帮助系统进行微调,最重要的是,确保将健康信息传递给世界各地的边缘化语言社区。

制作自己的洗手海报

我们已经开源了用于渲染复合的脚本和生成洗手海报的代码。这种方法应该能够处理几乎所有的语言和脚本。你可以在海报中添加你自己的“请洗手”的翻译,以帮助传播,或者根据自己的本地语境进行翻译。请务必在社交媒体上以 #WashYourHands 为标签分享你生成的海报。

培养你的 AI 技能

有很多令人兴奋的 AI 问题,可以给世界带来巨大的影响。如果你想用人工智能解决像上面提到的问题,或者你认为你的企业可能需要开始利用人工智能来做其他事情(供应链优化、推荐、客户服务自动化等),那么不要错过今年 5 月的AI 课堂培训活动AI 课堂是一个沉浸式的、为期三天的虚拟培训活动,适合至少有一定编程经验和数学基础知识的人参加。该培训提供了使用 Python 和开源框架(如 TensorFlow 和 PyTorch)进行现实的 AI 开发的实用基础知识。完成课程后,学员将有信心开始开发和部署自己的 AI 解决方案。

本文经许可转载自 https://datadan.io/blog/wash-your-hands


via: https://opensource.com/article/20/4/ai-translation

作者:Daniel Whitenack 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

防火墙是你的计算机防止网络入侵的第一道屏障。为确保你的安全,请下载我们的备忘单。

合理的防火墙是你的计算机防止网络入侵的第一道屏障。你在家里上网,通常互联网服务提供会在路由中搭建一层防火墙。当你离开家时,那么你计算机上的那层防火墙就是仅有的一层,所以配置和控制好你 Linux 电脑上的防火墙很重要。如果你维护一台 Linux 服务器,那么知道怎么去管理你的防火墙同样重要,只要掌握了这些知识你才能保护你的服务器免于本地或远程非法流量的入侵。

安装防火墙

很多 Linux 发行版本已经自带了防火墙,通常是 iptables。它很强大并可以自定义,但配置起来有点复杂。幸运的是,有开发者写出了一些前端程序来帮助用户控制防火墙,而不需要写冗长的 iptables 规则。

在 Fedora、CentOS、Red Hat 和一些类似的发行版本上,默认安装的防火墙软件是 firewalld,通过 firewall-cmd 命令来配置和控制。在 Debian 和大部分其他发行版上,可以从你的软件仓库安装 firewalld。Ubuntu 自带的是 简单防火墙 Uncomplicated Firewall (ufw),所以要使用 firewalld,你必须启用 universe 软件仓库:

$ sudo add-apt-repository universe
$ sudo apt install firewalld

你还需要停用 ufw:

$ sudo systemctl disable ufw

没有理由不用 ufw。它是一个强大的防火墙前端。然而,本文重点讲 firewalld,因为大部分发行版都支持它而且它集成到了 systemd,systemd 是几乎所有发行版都自带的。

不管你的发行版是哪个,都要先激活防火墙才能让它生效,而且需要在启动时加载:

$ sudo systemctl enable --now firewalld

理解防火墙的域

Firewalld 旨在让防火墙的配置工作尽可能简单。它通过建立 zone 来实现这个目标。一个域是一组的合理、通用的规则,这些规则适配大部分用户的日常需求。默认情况下有九个域。

  • trusted:接受所有的连接。这是最不偏执的防火墙设置,只能用在一个完全信任的环境中,如测试实验室或网络中相互都认识的家庭网络中。
  • homeworkinternal:在这三个域中,接受大部分进来的连接。它们各自排除了预期不活跃的端口进来的流量。这三个都适合用于家庭环境中,因为在家庭环境中不会出现端口不确定的网络流量,在家庭网络中你一般可以信任其他的用户。
  • public:用于公共区域内。这是个偏执的设置,当你不信任网络中的其他计算机时使用。只能接收选定的常见和最安全的进入连接。
  • dmz:DMZ 表示隔离区。这个域多用于可公开访问的、位于机构的外部网络、对内网访问受限的计算机。对于个人计算机,它没什么用,但是对某类服务器来说它是个很重要的选项。
  • external:用于外部网络,会开启伪装(你的私有网络的地址被映射到一个外网 IP 地址,并隐藏起来)。跟 DMZ 类似,仅接受经过选择的传入连接,包括 SSH。
  • block:仅接收在本系统中初始化的网络连接。接收到的任何网络连接都会被 icmp-host-prohibited 信息拒绝。这个一个极度偏执的设置,对于某类服务器或处于不信任或不安全的环境中的个人计算机来说很重要。
  • drop:接收的所有网络包都被丢弃,没有任何回复。仅能有发送出去的网络连接。比这个设置更极端的办法,唯有关闭 WiFi 和拔掉网线。

你可以查看你发行版本的所有域,或通过配置文件 /usr/lib/firewalld/zones 来查看管理员设置。举个例子:下面是 Fefora 31 自带的 FedoraWorkstation 域:

$ cat /usr/lib/firewalld/zones/FedoraWorkstation.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Fedora Workstation</short>
  <description>Unsolicited incoming network packets are rejected from port 1 to 1024, except for select network services. Incoming packets that are related to outgoing network connections are accepted. Outgoing network connections are allowed.</description>
  <service name="dhcpv6-client"/>
  <service name="ssh"/>
  <service name="samba-client"/>
  <port protocol="udp" port="1025-65535"/>
  <port protocol="tcp" port="1025-65535"/>
</zone>

获取当前的域

任何时候你都可以通过 --get-active-zones 选项来查看你处于哪个域:

$ sudo firewall-cmd --get-active-zones

输出结果中,会有当前活跃的域的名字和分配给它的网络接口。笔记本电脑上,在默认域中通常意味着你有个 WiFi 卡:

FedoraWorkstation
  interfaces: wlp61s0

修改你当前的域

要更改你的域,请将网络接口重新分配到不同的域。例如,把例子中的 wlp61s0 卡修改为 public 域:

$ sudo firewall-cmd --change-interface=wlp61s0 --zone=public

你可以在任何时候、任何理由改变一个接口的活动域 —— 无论你是要去咖啡馆,觉得需要增加笔记本的安全策略,还是要去上班,需要打开一些端口进入内网,或者其他原因。在你凭记忆学会 firewall-cmd 命令之前,你只要记住了关键词 changezone,就可以慢慢掌握,因为按下 Tab 时,它的选项会自动补全。

更多信息

你可以用你的防火墙干更多的事,比如自定义已存在的域,设置默认域,等等。你对防火墙越了解,你在网上的活动就越安全,所以我们创建了一个备忘单便于速查和参考。


via: https://opensource.com/article/20/2/firewall-cheat-sheet

作者:Seth Kenlon 选题:lujun9972 译者:lxbwolf 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出