本文展示如何使用Arena提交TensorFlow的單機訓練作業,並通過TensorBoard可視化查看訓練作業。
前提條件
已給叢集配置了Arena使用的PVC,並且PVC已填充本文使用的資料集,詳情請參見配置NAS共用儲存。
背景資訊
本文樣本從Git URL下載原始碼,資料集放在共用儲存系統(基於NAS的PV和PVC)中。樣本假設您已經獲得了一個名稱為training-data的PVC執行個體(一個共用儲存),裡面存在一個目錄tf_data,存放了樣本所使用的資料集。
操作步驟
執行以下命令檢查可用的GPU資源。
arena top node預期輸出:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated) cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx <none> ready 2 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx <none> ready 2 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx <none> ready 2 0 ----------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 0/6 (0%)由上可見,有3個包含GPU的節點可供運行訓練作業。
執行
arena submit tfjob/tf [--flag]命令即可提交TensorFlow作業。通過以下程式碼範例提交一個單機單卡的TensorFlow任務。
arena submit tf \ --name=tf-git \ --working-dir=/root \ --gpus=1 \ --image=kube-ai-registry.cn-shanghai.cr.aliyuncs.com/kube-ai/tensorflow:1.5.0-devel-gpu \ --sync-mode=git \ --sync-source=https://code.aliyun.com/xiaozhou/tensorflow-sample-code.git \ --data=training-data:/mnt \ --tensorboard \ --logdir=/mnt/tf_data/logs \ "python code/tensorflow-sample-code/tfjob/docker/mnist/main.py --log_dir /mnt/tf_data/logs --data_dir /mnt/tf_data/"預期輸出:
configmap/tf-git-tfjob created configmap/tf-git-tfjob labeled service/tf-git-tensorboard created deployment.apps/tf-git-tensorboard created tfjob.kubeflow.org/tf-git created INFO[0000] The Job tf-git has been submitted successfully INFO[0000] You can run `arena get tf-git --type tfjob` to check the job status參數解釋如下表。
參數
是否必選
解釋
預設值
--name
必選
指定提交的作業名字,全域唯一,不能重複。
無
--working-dir
可選
指定當前執行命令所在的目錄。
/root
--gpus
可選
指定作業Worker節點需要使用的GPU卡數。
0
--image
必選
指定訓練環境的鏡像地址。
無
--sync-mode
可選
同步代碼的模式,您可以指定git、rsync。本文使用Git模式。
無
--sync-source
可選
同步代碼的倉庫地址,需要和--sync-mode一起使用,本文樣本使用Git模式,該參數可以為任何github專案地址。阿里雲code專案地址等支援Git的代碼託管地址。專案代碼將會被下載到--working-dir下的code/目錄中。本文樣本即為:/root/code/tensorflow-sample-code。
無
--data
可選
掛載共用儲存卷PVC到運行環境中。它由兩部分組成,通過分號
:分割。冒號左側是您已經準備好的PVC名稱。您可以通過arena data list查看當前叢集可用的PVC列表;分號右側是您想將PVC的掛載到運行環境中的路徑,也是您訓練代碼要讀取資料的本地路徑。這樣通過掛載的方式,您的代碼就可以訪問PVC的資料。說明執行
arena data list查看本文樣本當前叢集可用的PVC列表。NAME ACCESSMODE DESCRIPTION OWNER AGE training-data ReadWriteMany 35m如果沒有可用的PVC,您可建立PVC。具體操作,請參見配置NAS共用儲存。
無
--tensorboard
可選
為訓練任務開啟一個TensorBoard服務,用作資料視覺效果,您可以結合--logdir指定TensorBoard要讀取的event路徑。不指定該參數,則不開啟TensorBoard服務。
無
--logdir
可選
需要結合--tensorboard一起使用,該參數表示TensorBoard需要讀取event資料的路徑。
/training_logs
重要如果您使用非公開Git程式碼程式庫,則可以使用以下命令。
arena submit tf \ ... --sync-mode=git \ --sync-source=https://code.aliyun.com/xiaozhou/tensorflow-sample-code.git \ --env=GIT_SYNC_USERNAME=yourname \ --env=GIT_SYNC_PASSWORD=yourpwd \ "python code/tensorflow-sample-code/tfjob/docker/mnist/main.pyarena命令使用git-sync同步原始碼。您可以設定在git-sync專案中定義的環境變數。
執行以下命令查看當前通過Arena提交的所有作業。
arena list預期輸出:
NAME STATUS TRAINER AGE NODE tf-git RUNNING TFJOB 20s 192.1xx.x.xx執行以下命令檢查作業所使用的GPU資源。
arena top job預期輸出:
NAME GPU(Requests) GPU(Allocated) STATUS TRAINER AGE NODE tf-git 1 1 RUNNING tfjob 1m 192.1xx.x.xx Total Allocated GPUs of Training Job: 1 Total Requested GPUs of Training Job: 1執行以下命令檢查叢集所使用的GPU資源。
arena top node預期輸出:
NAME IPADDRESS ROLE STATUS GPU(Total) GPU(Allocated) cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx master ready 0 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx <none> ready 2 1 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx <none> ready 2 0 cn-huhehaote.192.1xx.x.xx 192.1xx.x.xx <none> ready 2 0 ----------------------------------------------------------------------------------------- Allocated/Total GPUs In Cluster: 1/6 (16%)執行以下命令擷取作業詳情。
arena get tf-git預期輸出:
STATUS: SUCCEEDED NAMESPACE: default PRIORITY: N/A TRAINING DURATION: 1m NAME STATUS TRAINER AGE INSTANCE NODE tf-git SUCCEEDED TFJOB 18m tf-git-chief-0 192.16x.x.xx Your tensorboard will be available on: http://192.16x.x.xx:31619說明本文樣本因為開啟TensorBoard,在上述作業詳情中最後兩行,可以看到TensorBoard的Web訪問地址;如果沒有開啟TensorBoard,最後兩行資訊不存在。
通過瀏覽器查看TensorBoard。
在本地執行如下命令,將叢集中的TensorBoard映射到本地9090連接埠。
重要請注意kubectl port-forward建立的連接埠轉寄不具備生產層級的可靠性、安全性和擴充性,因此僅適用於開發和調試目的,不適合在生產環境使用。更多關於Kubernetes叢集內生產可用的網路方案的資訊,請參見Ingress概述。
kubectl port-forward svc/tf-git-tensorboard 9090:6006在瀏覽器中訪問
localhost:9090,即可查看TensorBoard。如下圖所示。
執行以下命令擷取作業日誌資訊。
arena logs tf-git預期輸出:
WARNING:tensorflow:From code/tensorflow-sample-code/tfjob/docker/mnist/main.py:120: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version. Instructions for updating: ... Accuracy at step 9970: 0.9834 Accuracy at step 9980: 0.9828 Accuracy at step 9990: 0.9816 Adding run metadata for 9999 Total Train-accuracy=0.9816您還可以通過命令
arena logs $job_name -f即時查看作業的日誌輸出,通過命令arena logs $job_name -t N查看尾部N行的日誌,以及通過arena logs --help查詢更多參數使用方式。查看尾部N行的日誌範例程式碼如下。
arena logs tf-git -t 5預期輸出:
Accuracy at step 9970: 0.9834 Accuracy at step 9980: 0.9828 Accuracy at step 9990: 0.9816 Adding run metadata for 9999 Total Train-accuracy=0.9816