吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用TensorFlow進行大規模和分布式的QML模擬

硬件三人行 ? 來源:TensorFlow ? 作者:Cheng Xing 和 Michae ? 2021-08-10 17:31 ? 次閱讀

發布人: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 的訓練中。

從我們對多 worker 設置的實驗來看,如果我們用 1000 個訓練示例訓練 23 量子位的 QCNN(相當于使用全狀態向量模擬大約 3000 個電路),在 32 個節點 (512 vCPU) 的集群上平均每個周期會花費 5 分鐘,這一過程需要花費數美元。相比之下,如果我們在單 worker 上完成同樣的訓練作業,平均每個周期會花費約 4 小時。將規模進一步擴大來看,數十萬個 30 量子位的電路可以使用超過 10000 個虛擬 CPU 在數小時內完成運行,而在單 worker 設置下運行則可能需要花費數周時間。實際性能和成本可能會因虛擬機機器類型和集群總運行時等 Cloud 設置而異。在進行大規模實驗之前,我們建議您先通過類似本教程中用到的小集群進行實驗。

本教程的所有源代碼均可在 TensorFlow Quantum GitHub 代碼庫中找到。README.md 中包含能夠讓您快速上手并運行本教程的便捷方法。本教程將側重于詳細介紹每個操作步驟,從而幫助您理解基本概念,并將這些概念集成到您的項目中。現在就開始吧!

在 Google Cloud 中

設置基礎架構

首先我們需要在 Google Cloud 中創建基礎架構資源。如果您有現有的 Google Cloud 環境,則具體操作步驟可能會有所不同,例如組織政策限制條件導致的不同。本文包括一些最常見的必要步驟。值得注意的是,您需要為創建的 Google Cloud 資源付費,點擊此處了解本教程中使用的計費資源摘要。如果您是 Google Cloud 新用戶,那么您可以獲得 300 美元贈金。如果您是學術機構成員,那么您可以獲得 Google Cloud 研究贈金。

此處

https://github.com/tensorflow/quantum/blob/2a24b979467445f6d8e7156796f34ce81af147fa/qcnn_multiworker/README.md#billable-resources

在本教程中,您將會運行數個 shell 命令。為此,您可以使用計算機上的本地 Unix shell,也可以使用 Cloud Shell,后者包含我們會在后面提到的許多工具。

Cloud Shell

https://cloud.google.com/shell/docs/using-cloud-shell

您可以利用 setup.sh 中的腳本自動實現以下步驟。在本節中,我們將為大家詳細介紹每個步驟,如果這是您第一次使用 Google Cloud,我們建議您仔細閱讀整個章節。如果您希望自動化 Google Cloud 設置過程,請跳過本章節:

打開 setup.sh 并配置其中的參數值。

運行 。/setup.sh infra 。

setup.sh

https://github.com/tensorflow/quantum/blob/2a24b979467445f6d8e7156796f34ce81af147fa/qcnn_multiworker/setup.sh

在本教程中,您將會用到以下幾個 Google Cloud 產品:

Kubernetes Engine (GKE)。這是本教程中主要負責執行 QCNN 作業的基礎架構平臺。

Cloud Storage,用于存儲來自 QCNN 作業的數據。

Container Registry,用于存儲容器鏡像。

為準備好 Cloud 環境,請首先遵循以下快速入門指南:

Container Registry 快速入門

https://cloud.google.com/container-registry/docs/quickstart

Kubernetes Engine 快速入門

https://cloud.google.com/kubernetes-engine/docs/quickstart

在本教程中,您可以在瀏覽到創建集群的說明時停止閱讀 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 Cloud Storage 存儲分區的 Google Cloud 地區。

${BUCKET_NAME}:用于存儲訓練輸出的 Google Cloud Storage 存儲分區的名稱。

為確保您擁有運行本教程其余章節的 Cloud 操作的權限,請確保您擁有 owner 的 IAM 角色或以下所有角色:

container.admin

iam.serviceAccountAdmin

Storage.adminIAM 角色

https://cloud.google.com/iam/docs/understanding-roles

如要查看您的角色,請運行以下命令:

gcloud projects get-iam-policy ${PROJECT}

并加上您的 Google Cloud 項目 ID,然后搜索您的用戶帳號。

在您完成快速入門指南后,請運行以下命令創建 Kubernetes 集群:

gcloud container clusters create ${CLUSTER_NAME} --workload-pool=${PROJECT}.svc.id.goog --num-nodes=${NUM_NODES} --machine-type=${MACHINE_TYPE} --zone=${ZONE} --preemptible

并加上您的 Google Cloud 項目 ID 和首選的集群名稱。

--num-nodes 為支持 Kubernetes 集群的 Compute Engine 虛擬機的數量。這不必與您希望 QCNN 作業擁有的 worker 副本數量相同,因為 Kubernetes 能夠在同一節點上調度多個副本,不過前提是該節點有足夠的 CPU 和內存資源。如果您是首次嘗試本教程,我們建議您使用 2 個節點。

--machine-type 可指定虛擬機的機器類型。如果您是首次嘗試本教程,我們建議您使用具備 2 個 vCPU 和 7.5GB 內存的“n1-standard-2”。

機器類型

https://cloud.google.com/compute/docs/machine-types

--zone 是您希望集群運行所處的 Google Cloud 區域(例如“us-west1-a”)。

--workload-pool 可以啟用 GKE Workload Identity 功能,從而將 Kubernetes 服務帳號和 Google Cloud IAM 服務帳號關聯在一起。為實現精細訪問權限控制,建議您使用 IAM 服務帳號來訪問各種 Google Cloud 產品。在此您將可以創建一個用于 QCNN 作業的服務帳號。Kubernetes 服務帳號是一種機制,可以將 IAM 服務帳號的憑據注入 worker 容器中。

Workload Identity

https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity

Google Cloud IAM 服務帳號

https://cloud.google.com/iam/docs/service-accounts

--preemptible 使用 Compute Engine 搶占式虛擬機來支持 Kubernetes 集群。與普通的虛擬機相比,搶占式虛擬機在成本上降低了 80%,不過其代價是虛擬機隨時都可能會被搶占,進而導致訓練過程終止。這種虛擬機非常適合在短時間內訓練大量集群。

然后您可以創建一個 IAM 服務帳號:

gcloud iam service-accounts create ${SERVICE_ACCOUNT_NAME}

并將其與 Workload Identity 集成:

gcloud iam service-accounts add-iam-policy-binding --role roles/iam.workloadIdentityUser --member “serviceAccount:${PROJECT}.svc.id.goog[default/${SERVICE_ACCOUNT_NAME}]” ${SERVICE_ACCOUNT_NAME}@${PROJECT}.iam.gserviceaccount.com

現在創建一個存儲分區,這是存儲數據的基本容器:

gsutil mb -p ${PROJECT} -l ${BUCKET_REGION} -b on gs://${BUCKET_NAME}

并使用您首選的存儲分區名稱。存儲分區名稱為全局唯一,因此我們建議您在存儲分區名稱中加入項目名稱。我們建議您將存儲分區地區設為包含您集群區域的地區。區域的地區,即區域名稱去掉最后一個連字符之后的部分。例如,區域“us-west1-a”的地區為“us-west1”。

要讓 QCNN 作業能夠訪問 Cloud Storage 數據,請為您的 IAM 服務帳號授予相應權限:

gsutil iam ch serviceAccount:${SERVICE_ACCOUNT_NAME}@${PROJECT}.iam.gserviceaccount.com:roles/storage.admin gs://${BUCKET_NAME}

準備 Kubernetes 集群

設置好 Cloud 環境后,現在您可以將必要的 Kubernetes 工具安裝到集群中。您需要 KubeFlow 中的 tf-operator 組件。KubeFlow 是用于在 Kubernetes 上運行機器學習工作負載的工具包,子組件 tf-operator 可簡化 TensorFlow 作業的管理。tf-operator 可以單獨進行安裝,無需安裝規模更大的 KubeFlow。

tf-operator

https://github.com/kubeflow/tf-operator

如要安裝 tf-operator ,請運行以下命令:

docker pull k8s.gcr.io/kustomize/kustomize:v3.10.0

docker run k8s.gcr.io/kustomize/kustomize:v3.10.0 build “github.com/kubeflow/tf-operator.git/manifests/overlays/standalone?ref=v1.1.0” | kubectl apply -f -

(注意 tf-operator 會使用 Kustomize 來管理其部署文件,所以在此我們也需要安裝 Kustomize)

使用 MultiWorkerMirroredStrategy

進行訓練

現在您可以使用 TensorFlow Quantum 研究分支中的 QCNN 代碼,并將其準備好,以便以分布式方式運行這些代碼。首先復制源代碼:

git clone https://github.com/tensorflow/quantum.git && cd quantum && git checkout origin/research && cd qcnn_multiworker

或者,如果您使用的是向 GitHub 進行身份驗證的 SSH 密鑰:

git clone git@github.com:tensorflow/quantum.git && cd quantum && git checkout origin/research && cd qcnn_multiworker

向 GitHub 進行身份驗證的 SSH 密鑰

https://docs.github.com/en/github/getting-started-with-github/quickstart/set-up-git#next-steps-authenticating-with-github-from-git

代碼設置

training 目錄中包含執行 QCNN 分布式訓練的必備組件。training/qcnn.py 和 common/qcnn_common.py 的組合與 TensorFlow Quantum 中的混合 QCNN 示例相同,但在功能上有所增加:

借助 tf.distribute.MultiWorkerMirroredStrategy ,您現在可以選擇利用多臺機器進行訓練。

TensorBoard 集成,我們將在下一節中詳細為您講解。

TensorBoard

https://tensorflow.google.cn/tensorboard

MultiWorkerMirroredStrategy 是一種可執行同步分布式訓練的 TensorFlow 機制。我們在您的現有模型中增加了幾行代碼,以便針對分布式訓練進行增強。

MultiWorkerMirroredStrategy

https://tensorflow.google.cn/guide/distributed_training#multiworkermirroredstrategy

在 training/qcnn.py 文件的開頭,我們對 MultiWorkerMirroredStrategy 進行設置:

strategy = tf.distribute.MultiWorkerMirroredStrategy()

training/qcnn.py

https://github.com/tensorflow/quantum/blob/2a24b979467445f6d8e7156796f34ce81af147fa/qcnn_multiworker/training/qcnn.py

然后在模型準備階段,我們將此策略以參數的形式傳入:

。.. = qcnn_common.prepare_model(strategy)

每個 QCNN 分布式訓練作業的 worker 都會運行以上 Python 代碼的副本。每個 worker 都需要知道其他所有 worker 的網絡端點。通常,我們會將 TF_CONFIG 環境變量用于此目的。但在本例中,tf-operator 會自動在后臺將變量注入。

模型訓練完成后,權重會上傳至您的 Cloud Storage 存儲分區,隨后推理作業會對其進行訪問。

if task_type == ‘worker’and task_id == 0:

qcnn_weights_path=‘/tmp/qcnn_weights.h5’

qcnn_model.save_weights(qcnn_weights_path)

upload_blob(args.weights_gcs_bucket, qcnn_weights_path, f‘qcnn_weights.h5’)

Kubernetes 部署設置

在繼續完成 Kubernetes 部署設置和啟動 worker 之前,您需要針對您自己的設置在教程源代碼中配置幾個參數。此處提供的腳本 setup.sh 可以用于簡化該過程。

setup.sh

https://github.com/tensorflow/quantum/blob/2a24b979467445f6d8e7156796f34ce81af147fa/qcnn_multiworker/setup.sh

如果您在之前的步驟中尚未完成此操作,請打開 setup.sh 并配置其中的參數值。然后運行以下命令:

。/setup.sh param

至此,本節剩余的步驟可通過以下這行命令來執行:

make training

我們將在本節剩余部分中為您詳細講解 Kubernetes 的設置過程。

首先我們需要用 Docker 將 QCNN 作業包裝為容器映像,并將其上傳至 Container Registry,然后才能在 Kubernetes 中以容器的形式運行作業。Dockerfile 中包含映像規范。如要構建和上傳映像,請運行以下命令:

docker build -t gcr.io/${PROJECT}/qcnn 。

docker push gcr.io/${PROJECT}/qcnn

接下來,您將通過 common/sa.yaml 創建 Kubernetes 服務帳號,從而完成 Workload Identity 設置。該服務帳號將會由 QCNN 容器使用。

apiVersion: v1

kind: ServiceAccount

metadata:

annotations:

iam.gke.io/gcp-service-account: ${SERVICE_ACCOUNT_NAME}@${PROJECT}.iam.gserviceaccount.com

name: ${SERVICE_ACCOUNT_NAME}

該注釋會向 GKE 表明,此 Kubernetes 服務帳號應與您之前創建的 IAM 服務帳號綁定。我們首先創建服務帳號:

kubectl apply -f common/sa.yaml

最后一步便是創建分布式訓練作業。 ttraining/qcnn.yaml 中包含 Kubernetes 作業規范。在 Kubernetes 中,我們會將多個具有相關函數的容器分組成名為 pod 的單一實體,這是您可以進行調度的最基礎的工作單元。通常來說,用戶會利用 Deployment 和 Job 等現有資源類型來創建和管理工作負載。而您將改為使用 TFJob (該信息在“kind”字段中指定),這不是 Kubernetes 內置的資源類型,而是由 tf-operator 提供的自定義資源,可用于輕松處理 TensorFlow 工作負載。

值得注意的是,TFJob 規范中包含 tfReplicaSpecs.Worker 字段,您可通過該字段配置 MultiWorkerMirroredStrategy worker。PS(參數服務器)、Chief 和 Evaluator 的值同樣也支持異步和其他形式的分布式訓練。 tf-operator 會在后臺為每個 worker 副本創建兩個 Kubernetes 資源:

一個是使用 tfReplicaSpecs.Worker.template 中 pod 規范模板的 pod 對象。該資源可運行您之前在 Kubernetes 上創建的容器。

另一個是 Service 對象,它能夠在 Kubernetes 集群中公開顯示已知的網絡端點,從而授予對 worker gRPC 訓練服務器的訪問權限。其他 worker 可以僅通過指向 《service_name》:《port》 (也是 《service_name》。《service_namespace》.svc:《port》 工作的替代形式)來與服務器通信

TFJob 會為每個 worker 副本生成一個 Service 和一個 pod。TFJob 更新后,相應的更改將反映在底層 Service 和 pod 中。Worker 狀態也會在 TFJob 中報告顯示

Service 會向集群的其余部分公開 worker 服務器。每個 worker 在與其他 worker 通信時都會使用目標 worker 的 Service 名稱作為 DNS 名稱

Worker 規范中有幾個重要的字段:

Replicas:worker 副本的數量。我們可以在同一節點上調度多個副本,因此副本的數量不會受到節點數量的限制。

Template:每個 worker 副本的 pod 規范模板

serviceAccountName:該字段可為 pod 提供訪問 Kubernetes 服務帳號的權限。

container:

image:指向您之前構建的 Container Registry 映像。

command:容器的入口點命令。

arg:命令行參數。

Ports:開放兩個端口,其中一個用于 worker 間互相通信,另一個用于分析用途。

affinity:該字段會向 Kubernetes 表明,您希望在不同的節點上盡可能多地調度 worker pod,以最大限度地利用資源。

如要創建 TFJob,請運行以下命令:

kubectl apply -f training/qcnn.yaml

檢查部署

恭喜!您的分布式訓練正在進行中。如要查看作業狀態,請多次運行 kubectl get pods (或添加 -w 以流式顯示輸出)。最終您應該能夠看到 qcnn-worker 的數量和 replicas 參數中的數量相同,且狀態均為 Running:

NAME READY STATUS RESTARTS

qcnn-worker-01/1 Running 0

qcnn-worker-11/1 Running 0

如要訪問 worker 的日志輸出,請運行以下命令:

kubectl logs 《worker_pod_name》

或添加 -f 以流式顯示輸出。qcnn-worker-0 的輸出結果如下所示:

I tensorflow/core/distributed_runtime/rpc/grpc_server_lib.cc:411] Started server with target: grpc:/

/qcnn-worker-0.default.svc:2222

I tensorflow/core/profiler/rpc/profiler_server.cc:46] Profiler server listening on [::]:2223 selecte

d port:2223

Epoch 1/50

4/4 [==============================] - 7s 940ms/step - loss: 0.9387 - accuracy: 0.0000e+00 - val_loss: 0.7432 - val_accuracy: 0.0000e+00

I tensorflow/core/profiler/lib/profiler_session.cc:71] Profiler session collecting data.

I tensorflow/core/profiler/lib/profiler_session.cc:172] Profiler session tear down.

Epoch 50/504/4 [==============================] - 1s 222ms/step - loss: 0.1468 - accuracy: 0.4101 - val_loss: 0.2043 - val_accuracy: 0.4583

File /tmp/qcnn_weights.h5 uploaded to qcnn_weights.h5.

qcnn-worker-1 的輸出結果與上述結果類似,區別是沒有最后一行。主 worker (worker 0) 負責保存整個模型的權重。

您也可以訪問 Cloud Console 中的 Storage 瀏覽器,通過瀏覽之前創建的存儲分區來驗證模型權重。

Cloud Console 中的 Storage 瀏覽器

https://console.cloud.google.com/storage/browser

如要刪除訓練作業,請運行以下命令:

kubectl delete -f training/qcnn.yaml

借助 TensorBoard 了解訓練性能

TensorBoard 是 TensorFlow 的可視化工具包。通過將 TensorFlow Quantum 模型與 TensorBoard 進行集成,您將獲得許多開箱可用的模型可視化數據,例如訓練損失和準確性、可視化模型圖和程序分析。

代碼設置

如要在作業中啟用 TensorBoard,請創建 TensorBoard 回調并將其傳入 model.fit():

tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=args.logdir,

histogram_freq=1,

update_freq=1,

profile_batch=‘10, 20’)

history = qcnn_model.fit(x=train_excitations,

y=train_labels,

batch_size=32,

epochs=50,

verbose=1,

validation_data=(test_excitations, test_labels),

callbacks=[tensorboard_callback])

profile_batch 參數可在程序化模式下啟用 TensorFlow 性能剖析器,從而在您于此處指定的訓練步驟范圍內對程序進行采樣。您也可以啟用采樣模式。

tf.profiler.experimental.server.start(args.profiler_port)

該模式允許由不同程序或通過 TensorBoard 界面發起按需分析。

TensorBoard 功能

在這里我們將重點介紹本教程中使用的部分 TensorBoard 的強大功能。請查看 TensorBoard 指南以了解詳情。

TensorBoard 指南

https://tensorflow.google.cn/tensorboard/get_started

損失和準確性

損失是模型在訓練過程中力求最小化的數量,可通過損失函數計算得出。準確性是指在訓練過程中,預測結果與標簽匹配的樣本的比例。默認情況下系統會導出損失指標。如要啟用準確性指標,請將以下命令添加到model.compile() 步驟中:

qcnn_model.compile(。.., metrics=[‘accuracy’])

自定義指標

除了損失指標和準確性指標以外,TensorBoard 同樣還支持自定義指標。例如,教程代碼將 QCNN 讀出張量以直方圖的形式導出。

自定義指標

https://tensorflow.google.cn/tensorboard/scalars_and_keras#logging_custom_scalars

性能剖析器

TensorFlow 性能剖析器是一款十分有用的工具,該工具可助您在模型訓練作業中調試性能瓶頸。在本教程中,我們同時采用了程序化模式(在預定義的訓練步驟范圍內進行分析)和采樣模式(按需進行分析)。如果是 MultiWorkerMirroredStrategy 的設置,則目前的程序化模式僅會輸出來自主 worker (worker 0) 的分析數據,而采樣模式能夠對所有 worker 進行分析。

TensorFlow 性能剖析器

https://tensorflow.google.cn/guide/profiler

當您第一次打開性能剖析器時,顯示的數據均來自程序化模式。您可通過概覽頁面了解到每個訓練步驟所需時長。無論是擴縮基礎架構(向集群中添加更多的虛擬機、使用配備更多 CPU 和更大內存的虛擬機、與硬件加速器集成)還是提高代碼效率,當您嘗試用不同的方法來提升訓練性能時,均可以此為參考。

Trace Viewer 會將所有后臺訓練指令耗費的時間在詳細視圖中分別列出,以便您確定執行時間瓶頸。

Kubernetes 部署設置

如要查看 TensorBoard 界面,您可以在 Kubernetes 中創建 TensorBoard 實例。Kubernetes 設置位于 training/tensorboard.yaml。該文件包含 2 個對象:

一個是 Deployment 對象,其中包含帶有相同 worker 容器映像的 pod 副本,不同的是要用 TensorBoard 命令來運行:tensorboard --logdir=gs://${BUCKET_NAME}/${LOGDIR_NAME} --port=5001 --bind_all

一個是可以創建網絡負載平衡器的 Service 對象,能夠實現通過互聯網訪問 TensorBoard 界面,這樣您就可以在瀏覽器中查看該界面。

您也可以通過將 --logdir 指向相同的 Cloud Storage 存儲分區,以在工作站上運行 TensorBoard 本地實例,不過這需要額外的 IAM 權限設置。

創建 Kubernetes 設置:

kubectl apply -f training/tensorboard.yaml

在 kubectl get pods 的輸出結果中,您應該可以看到一個前綴為 qcnn-tensorboard的 pod,其最終會處于運行狀態。如要獲得 TensorBoard 實例的 IP 地址,請運行以下命令:

kubectl get svc tensorboard-service -w

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)

tensorboard-service LoadBalancer 10.123.240.9 《pending》 5001:32200/TCP

負載平衡器需要花費一些時間來進行預配,所以您可能不會馬上看到 IP 地址。預配完成后,請在瀏覽器中轉到 《ip》:5001 以訪問 TensorBoard 界面。

借助 TensorFlow 2.4 及更高版本,我們可以在采樣模式下分析多個 worker:在訓練作業運行期間,您可通過點擊 Tensorboard 性能剖析器中的“捕獲性能剖析文件”,并將“性能剖析文件服務網址”設為 qcnn-worker-《replica_id》:2223 來分析 worker 。要啟用此功能,worker 服務需要公開性能剖析器端口。教程源代碼中提供的腳本能夠修補所有由 TFJob 生成的 worker Service,為其設置性能剖析器端口。運行以下命令即可:

training/apply_profiler_ports.sh

請注意,手動修補 Service 只是臨時解決方案,目前我們正在計劃對 tf-operator 進行修改,以支持在 TFJob 中指定其他端口。

運行推理

在完成分布式訓練作業后,模型權重會存儲在您的 Cloud Storage 存儲分區中。然后您可以使用這些權重來構建推理程序,進而在 Kubernetes 集群中創建推理作業。您也可以在本地工作站上運行推理程序,不過這需要額外的 IAM 權限來向 Cloud Storage 授予訪問權限。

代碼設置

inference/ 目錄中提供了推理源代碼。主文件 qcnn_inference.py 基本上是重用 common/qcnn_common.py 中的模型構建代碼,但是會改為從 Cloud Storage 存儲分區中加載模型權重:

qcnn_weights_path = ‘/tmp/qcnn_weights.h5’

download_blob(args.weights_gcs_bucket, args.weights_gcs_path, qcnn_weights_path)

qcnn_model.load_weights(qcnn_weights_path)

然后主文件會將模型應用于測試集,并計算均方誤差。

results = qcnn_model(test_excitations).numpy().flatten()

loss = tf.keras.losses.mean_squared_error(test_labels, results)

Kubernetes 部署設置

本節中剩余的步驟可通過以下這行命令來執行:

make inference

由于您已經在訓練步驟中將推理程序內置到 Docker 映像中,所以在這一步中,您無需構建新的映像。推理作業規范 inference/inference.yaml 中存在一個 Job,其 pod 規范指向映像,但會改為執行 qcnn_inference.py。運行 kubectl apply -f inference/inference.yaml 以創建作業。

前綴為 inference-qcnn的 pod 最終應處于運行狀態 (kubectl get pods)。在推理 pod (kubectl logs 《pod_name》) 的日志輸出中,均方誤差應接近于 TensorBoard 界面中顯示的最終損失。

Blob qcnn_weights.h5 downloaded to /tmp/qcnn_weights.h5.

[-0.82200970.40201923-0.828569770.46476707-1.12814780.233174860.005841821.33518550.35139582-0.099580481.2205497-1.30386961.4065738-1.1120421-0.010213521.4553616-0.70309246-0.05183951.4699622-1.3712595-0.018703521.29395891.28658020.8472030.31496051.1705848-1.00516761.2537074-0.2943283-1.3489063-1.47278831.45662761.34179120.91234220.2942805-0.7918621.2984066-1.11394041.4648925-1.6311806-0.175303760.70148027-1.00840270.098989160.41216150.62743163-1.4237025-0.6296255 ]

Test Labels

[-11-11-11111-11-11-111-1-11-1-111111-11-1-1-1111-1-11-11-1-11-1111-1-1]

Mean squared error: tf.Tensor(0.29677835, shape=(), dtype=float32)

清理

我們的分布式訓練之旅到此圓滿結束!在您對照著本教程實驗完畢后,我們將在本節中逐步為您講解如何清理 Google Cloud 資源。

首先移除 Kubernetes 部署。運行以下命令:

make delete-inference

kubectl delete -f training/tensorboard.yaml

如果您尚未進行此操作,請運行以下命令:

make delete-training

然后刪除 GKE 集群。此操作也將刪除底層虛擬機。

gcloud container clusters delete ${CLUSTER_NAME} --zone=${ZONE}

接下來,刪除 Google Cloud Storage 中的訓練數據。

gsutil rm -r gs://${BUCKET_NAME}

最后,按照 Cloud Console 使用說明從 Container Registry 中移除 worker 容器映像。查找名為 qcnn 的映像。

Cloud Console 使用說明

https://cloud.google.com/container-registry/docs/managing#deleting_images

后續工作

現在,您已嘗試過多 worker 設置,那么不妨在您的項目中試著設置吧!由于本教程中提到的工具會不斷更新迭代,訓練多 worker 的最佳做法也會隨時間發生變化。請定期查看 TensorFlow Quantum GitHub 代碼庫中的教程目錄,以獲取更新內容!

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器學習
    +關注

    關注

    66

    文章

    8439

    瀏覽量

    133087
  • nlp
    nlp
    +關注

    關注

    1

    文章

    489

    瀏覽量

    22109

原文標題:使用 TensorFlow Quantum 訓練多個 Worker

文章出處:【微信號:yingjiansanrenxing,微信公眾號:硬件三人行】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    分布式云化數據庫有哪些類型

    分布式云化數據庫有哪些類型?分布式云化數據庫主要類型包括:關系型分布式數據庫、非關系型分布式數據庫、新SQL分布式數據庫、以列方式存儲數據、
    的頭像 發表于 01-15 09:43 ?111次閱讀

    HarmonyOS Next 應用元服務開發-分布式數據對象遷移數據權限與基礎數據

    向用戶申請授權。 二、基礎數據遷移 使用分布式數據對象,與上述開發步驟類似,需要在源端onContinue()接口中進行數據保存,并在對端的onCreate()/onNewWant()接口中進行數據恢復
    發表于 12-24 09:40

    分布式光纖測溫解決方案

    分布式光纖測溫解決方案
    的頭像 發表于 11-12 01:02 ?228次閱讀
    <b class='flag-5'>分布式</b>光纖測溫解決方案

    淺談屋頂分布式光伏發電技術的設計與應用

    【摘要】為了緩解城市用電緊張袁降低人們的用電成本,可以在工業園區、辦公樓屋頂等場所應用屋頂分布式光伏發電技術進行就近轉換、并網發電袁充分利用建筑物屋頂的太陽資源。概述屋頂分布式光伏發電技術,分析屋頂
    的頭像 發表于 11-11 15:10 ?1099次閱讀
    淺談屋頂<b class='flag-5'>分布式</b>光伏發電技術的設計與應用

    淺談分布式電源和電動汽車的配電網可靠性評估

    電動汽車無序充電行為在時空上具有較強的隨機性,其充電負荷會改變日負荷變化趨勢,進而影響配電網的可靠性。大規模分布式電源和電動汽車接入配電網,勢必會給配電網的可靠性帶來影響,因此,需要對含分布式電源和電動汽車的配電網的可靠性
    的頭像 發表于 11-04 11:16 ?350次閱讀
    淺談<b class='flag-5'>分布式</b>電源和電動汽車的配電網可靠性評估

    分布式IO模擬量模塊:多領域應用的高效能解決方案

    其轉換為數字信號進行傳輸和處理。明達技術自主研發的MR30分布式IO模擬量模塊在諸多行業領域內均有廣泛應用。
    的頭像 發表于 10-24 16:30 ?250次閱讀

    分布式光纖測溫是什么?應用領域是?

    分布式光纖測溫是一種先進的溫度測量技術,它利用光纖的拉曼散射原理進行溫度監測。以下是對分布式光纖測溫的詳細介紹: 一、基本原理 分布式光纖測溫的原理基于光纖的拉曼散射效應。當光纖某處的
    的頭像 發表于 10-24 15:30 ?512次閱讀
    <b class='flag-5'>分布式</b>光纖測溫是什么?應用領域是?

    分布式光纖聲波傳感技術的工作原理

    分布式光纖聲波傳感技術(Distributed Acoustic Sensing,DAS)是一種利用光纖作為傳感元件,實現對沿光纖路徑上的環境參數進行連續分布式測量的技術。
    的頭像 發表于 10-18 14:50 ?1035次閱讀
    <b class='flag-5'>分布式</b>光纖聲波傳感技術的工作原理

    分布式輸電線路故障定位中的分布式是指什么

    的全面覆蓋。這些監測點之間通過無線網絡進行數據互聯,形成一個分布式的監測系統; 三相覆蓋:對于三相輸電線路,分布式故障定位系統會在每相上都安裝相應的監測裝置,以實現對三相導線的全面監控。 二、技術特點 行波測距
    的頭像 發表于 10-16 11:39 ?341次閱讀
    <b class='flag-5'>分布式</b>輸電線路故障定位中的<b class='flag-5'>分布式</b>是指什么

    基于分布式計算的AR光波導中測試圖像的仿真

    的方式相同)。 采用分布式計算方法進行仿真 客戶端數量:41臺(在5臺不同的計算機上)。 模擬時間(10201次模擬):4小時10分鐘。 模擬
    發表于 08-07 14:13

    分布式光伏發電對低壓電網的影響與對策

    的意義。分布式光伏發電小規模并網時,其對電網的影響微乎其微,而分布式光伏發電大規模并網或集中在某條供電線路、臺區或變電站,則會對電網造成較大的影響。為了確保電力系統的安全可靠運行,有必
    的頭像 發表于 07-31 09:25 ?1016次閱讀
    <b class='flag-5'>分布式</b>光伏發電對低壓電網的影響與對策

    安科瑞分布式光伏系統在某重工企業18MW分布式光伏中應用

    2024年7月16日,江蘇省發改委發布《關于高質量做好全省分布式光伏接網消納的通知(征求意見稿)》,計劃大力支持分布式光伏的發展! 1、未來分布式光伏規模規劃 根據規劃,2024、20
    的頭像 發表于 07-19 11:30 ?577次閱讀
    安科瑞<b class='flag-5'>分布式</b>光伏系統在某重工企業18MW<b class='flag-5'>分布式</b>光伏中應用

    TensorFlow是什么?TensorFlow怎么用?

    術界和工業界都得到了廣泛的應用。它不僅支持大規模的數據處理,還提供了自動微分、分布式訓練等高級功能,極大地簡化了深度學習任務的開發流程。
    的頭像 發表于 07-12 16:38 ?818次閱讀

    鴻蒙開發接口數據管理:【@ohos.data.distributedData (分布式數據管理)】

    分布式數據管理為應用程序提供不同設備間數據庫的分布式協同能力。通過調用分布式數據各個接口,應用程序可將數據保存到分布式數據庫中,并可對分布式
    的頭像 發表于 06-07 09:30 ?1072次閱讀
    鴻蒙開發接口數據管理:【@ohos.data.distributedData (<b class='flag-5'>分布式</b>數據管理)】

    HarmonyOS實戰案例:【分布式賬本】

    Demo基于Open Harmony系統使用ETS語言進行編寫,本Demo主要通過設備認證、分布式拉起、分布式數據管理等功能來實現。
    的頭像 發表于 04-12 16:40 ?1393次閱讀
    HarmonyOS實戰案例:【<b class='flag-5'>分布式</b>賬本】
    百家乐官网庄闲当哪个好| 威尼斯人娱乐城真人游戏| 现场百家乐官网平台源码| 大发888casino下载| 太阳城百家乐网上| 百家乐官网哪家信誉好| 威尼斯人娱乐代理注测| 租房做生意如何注意风水问题| 百家乐那个娱乐城信誉好| 百家乐官网技巧经| 乐天堂| 百家乐大路图| 老k百家乐官网的玩法技巧和规则 KTV百家乐官网的玩法技巧和规则 | 百家乐社区| 百家乐官网什么方法容易赢| 百家乐官网实时路单| 大发888娱乐场游戏下载| 至尊百家乐规则| 百家乐官网博彩安全吗| 六合彩开奖记录| 百家乐的战术| 澳门百家乐官网论| 伯爵百家乐官网娱乐城| 97玩棋牌游戏中心| 百家乐娱乐官网网| 24山辅星水法分阴阳| 百家乐官网象棋赌博| 百乐门线上娱乐| 大发888娱乐场下载官方| 澳门百家乐娱乐城怎么样| 百家乐官网赌博技巧论坛| 兴文县| 大发888破解老虎机| 狮威百家乐赌场娱乐网规则| 百家乐视频交流| 买百家乐官网程序| 百家乐官网下注技术| 梭哈棋牌游戏大厅| 狮威百家乐娱乐城| 百家乐3珠路法| 百家乐怎么玩呀|