发布人:Google 团队 Cheng Xing 和 Michael Broughton
训练大型机器学习模型是 TensorFlow 的核心能力。多年来,训练规模已成为 NLP、图像识别和药物研发等众多现代机器学习系统的重要特征。利用多台机器来提高计算能力和吞吐量为机器学习领域带来巨大进步。同样,在量子计算和量子机器学习领域,更多可用的机器资源可以加速对更大的量子态和更加复杂系统的模拟。在本文中,我们将逐步带您了解如何使用 TensorFlow 和 TensorFlow Quantum 进行大规模和分布式的 QML 模拟。以更大的 FLOP/s 计数运行规模更大的模拟,可以为研究工作带来小规模模拟无法实现的全新可能性。在下方的图表中,我们大致描绘了量子模拟中几种不同硬件设置的近似扩缩能力。
运行分布式工作负载时基础架构往往都很复杂,不过我们可以用 Kubernetes 来简化这一过程。Kubernetes 是一个开源的容器编排系统,同样也是能够有效管理大规模工作负载的可靠平台。尽管我们可以用物理集群或虚拟机集群来设置多个 worker ,但 Kubernetes 能够提供出诸多优势,其中包括:
-
服务发现 - Worker 可以通过熟知的 DNS 名称轻松识别其他 worker,无需手动配置 IP 目的地。
-
自动装箱 - Kubernetes 会根据资源需求和当前的消耗量,将工作负载自动调度到不同的机器上。
-
自动发布和回滚 - Kubernetes 会通过更改配置来改变 worker 副本的数量,同时还会在响应和调度可用的机器时自动添加/删除 worker 资源。
本教程将指导您使用 Google Cloud 产品(包括 Kubernetes 托管平台 Google Kubernetes Engine)来完成 TensorFlow Quantum 多个 worker 设置。您将有机会学习 TensorFlow Quantum 中的单 worker 量子卷积神经网络 (QCNN) 教程,并将其拓展到多 worker 的训练中。
-
Google Kubernetes Engine
-
量子卷积神经网络 (QCNN) 教程
从我们对多 worker 设置的实验来看,如果我们用 1000 个训练示例训练 23 量子位的 QCNN(相当于使用全状态向量模拟大约 3000 个电路),在 32 个节点 (512 vCPU) 的集群上平均每个周期会花费 5 分钟,这一过程需要花费数美元。相比之下,如果我们在单 worker 上完成同样的训练作业,平均每个周期会花费约 4 小时。将规模进一步扩大来看,数十万个 30 量子位的电路可以使用超过 10000 个虚拟 CPU 在数小时内完成运行,而在单 worker 设置下运行则可能需要花费数周时间。实际性能和成本可能会因虚拟机机器类型和集群总运行时等 Cloud 设置而异。在进行大规模实验之前,我们建议您先通过类似本教程中用到的小集群进行实验。
本教程的所有源代码均可在 TensorFlow Quantum GitHub 代码库中找到。README.md 中包含能够让您快速上手并运行本教程的便捷方法。本教程将侧重于详细介绍每个操作步骤,从而帮助您理解基本概念,并将这些概念集成到您的项目中。现在就开始吧!
-
TensorFlow Quantum
https://github.com/tensorflow/quantum/tree/research/qcnn_multiworker
想获取更多 TensorFlow 官方资讯,请在微信中搜索:TensorFlow_official
关注 TensorFlow 官方微信!
在 Google Cloud 中设置基础架构
首先我们需要在 Google Cloud 中创建基础架构资源。如果您有现有的 Google Cloud 环境,则具体操作步骤可能会有所不同,例如组织政策限制条件导致的不同。本文包括一些最常见的必要步骤。值得注意的是,您需要为创建的 Google Cloud 资源付费,点击此处了解本教程中使用的计费资源摘要。如果您是 Google Cloud 新用户,那么您可以获得 300 美元赠金。如果您是学术机构成员,那么您可以获得 Google Cloud 研究赠金。
在本教程中,您将会运行数个 shell 命令。为此,您可以使用计算机上的本地 Unix shell,也可以使用 Cloud Shell,后者包含我们会在后面提到的许多工具。
您可以利用 setup.sh 中的脚本自动实现以下步骤。在本节中,我们将为大家详细介绍每个步骤,如果这是您第一次使用 Google Cloud,我们建议您仔细阅读整个章节。如果您希望自动化 Google Cloud 设置过程,请跳过本章节:
-
打开
setup.sh
并配置其中的参数值。 -
运行
./setup.sh infra
。
在本教程中,您将会用到以下几个 Google Cloud 产品
-
Kubernetes Engine (GKE)。这是本教程中主要负责执行 QCNN 作业的基础架构平台。
-
Cloud Storage,用于存储来自 QCNN 作业的数据。
-
Container Registry,用于存储容器镜像。
为准备好 Cloud 环境,请首先遵循以下快速入门指南:
-
Container Registry 快速入门
-
Kubernetes Engine 快速入门
在本教程中,您可以在浏览到创建集群的说明时停止阅读 Kubernetes Engine 快速入门。此外,请安装 Cloud Storage 命令行工具 gsutil(如果您使用的是 Cloud Shell,则系统已安装好 gsutil):
gcloud components install gsutil
作为参考信息,本教程中的 shell 命令将会引用以下这些变量。部分变量在结合本教程之后会提到的每个命令的上下文后,会更容易理解。
-
${CLUSTER_NAME
:您在 Google Kubernetes Engine 上的首选 Kubernetes 集群名称。 -
${PROJECT}
:您的 Google Cloud 项目 ID。 -
${NUM_NODES}
:集群中虚拟机的数量。 -
${MACHINE_TYPE}
:虚拟机的机器类型。该变量可控制每个虚拟机中 CPU 和内存资源的数量。 -
${SERVICE_ACCOUNT_NAME}
:Google Cloud IAM 服务帐号和关联的 Kubernetes 服务帐号的名称。 -
${ZONE}
:Kubernetes 集群的 Google Cloud 区域 -
${BUCKET_REGION}
:Google Clo