Topik ini menggunakan dataset open source bernama Fashion-MNIST sebagai contoh untuk menjelaskan cara menggunakan set komponen AI cloud-native dalam menyelesaikan tugas-tugas berikut: menjalankan pekerjaan pembelajaran mendalam di kluster Container Service for Kubernetes (ACK), mengoptimalkan kinerja pelatihan terdistribusi, menyetel model, dan menerapkan model di kluster ACK.
Informasi latar belakang
Set komponen AI cloud-native mencakup komponen yang dapat diterapkan secara independen menggunakan Helm chart. Anda dapat memanfaatkan komponen-komponen ini untuk mempercepat proyek AI.
Set komponen AI cloud-native cocok untuk dua jenis peran: administrator dan pengembang.
Administrator mengelola pengguna dan izin, mengalokasikan sumber daya kluster, mengonfigurasi penyimpanan eksternal, mengelola dataset, serta memantau pemanfaatan sumber daya melalui dasbor.
Pengembang menggunakan sumber daya kluster dan mengirimkan pekerjaan. Pengembang dibuat oleh administrator dan harus diberi izin sebelum dapat melakukan pengembangan menggunakan alat seperti Arena atau Jupyter Notebook.
Prasyarat
Operasi berikut diselesaikan oleh administrator:
Kluster ACK dibuat. Untuk informasi lebih lanjut, lihat Buat Kluster ACK yang Dikelola.
Ukuran disk setiap node dalam kluster minimal 300 GB.
Jika Anda memerlukan percepatan data optimal, gunakan empat instance Elastic Compute Service (ECS) yang masing-masing menyediakan delapan GPU V100.
Jika Anda memerlukan kesadaran topologi optimal, gunakan dua instance ECS yang masing-masing menyediakan dua GPU V100.
Semua komponen yang termasuk dalam set komponen AI cloud-native diinstal di kluster. Untuk informasi lebih lanjut, lihat Terapkan Suite AI Cloud-Native.
AI Dashboard siap digunakan. Untuk informasi lebih lanjut, lihat Akses AI Dashboard.
Konsol Pengembang AI siap digunakan. Untuk informasi lebih lanjut, lihat Masuk ke Konsol Pengembang AI.
CatatanKonsol AI (termasuk AI Dashboard dan Konsol Pengembang AI) yang disediakan oleh Alibaba Cloud mulai diluncurkan secara bertahap melalui mekanisme daftar putih mulai 22 Januari 2025.
Penyebaran yang Ada: Jika Anda sudah menerapkan AI Dashboard atau Konsol Pengembang AI sebelum tanggal ini, penggunaan saat ini tidak akan terpengaruh.
Instalasi Baru: Pengguna yang tidak masuk daftar putih dapat menginstal dan mengonfigurasi Konsol AI melalui komunitas open-source. Untuk instruksi konfigurasi open-source rinci, lihat Konsol AI Open-source.
Dataset Fashion-MNIST diunduh dan diunggah ke Bucket Object Storage Service (OSS). Untuk informasi lebih lanjut tentang cara mengunggah model ke bucket OSS, lihat Unggah Objek.
Alamat, nama pengguna, dan kata sandi repositori Git yang menyimpan kode uji diperoleh.
Klien kubectl terhubung ke kluster. Untuk informasi lebih lanjut, lihat Dapatkan File kubeconfig Kluster dan Gunakan kubectl untuk Terhubung ke Kluster.
Arena diinstal. Untuk informasi lebih lanjut, lihat Konfigurasikan Klien Arena.
Lingkungan pengujian
Dalam contoh ini, model AI dikembangkan, dilatih, dipercepat, dikelola, dievaluasi, dan diterapkan menggunakan set komponen AI cloud-native dan dataset Fashion-MNIST open source.
Administrator harus menyelesaikan tugas berikut: Langkah 1: Buat Pengguna dan Alokasikan Sumber Daya dan Langkah 2: Buat Dataset. Tugas yang tersisa dapat diselesaikan oleh pengembang.
Pengembang perlu membuat terminal di Jupyter Notebook atau menggunakan jump server di kluster ACK untuk mengirimkan perintah Arena. Jupyter Notebook direkomendasikan untuk mengirimkan perintah Arena.
Tabel berikut menjelaskan node dalam kluster.
Nama Host | IP | Peran | Jumlah GPU | Jumlah vCPU | Memori |
cn-beijing.192.168.0.13 | 192.168.0.13 | Jump server | 1 | 8 | 30580004 KiB |
cn-beijing.192.168.0.16 | 192.168.0.16 | Worker | 1 | 8 | 30580004 KiB |
cn-beijing.192.168.0.17 | 192.168.0.17 | Worker | 1 | 8 | 30580004 KiB |
cn-beijing.192.168.0.240 | 192.168.0.240 | Worker | 1 | 8 | 30580004 KiB |
cn-beijing.192.168.0.239 | 192.168.0.239 | Worker | 1 | 8 | 30580004 KiB |
Tujuan eksperimen
Topik ini bertujuan untuk mencapai tujuan berikut:
Kelola dataset.
Gunakan Jupyter Notebook untuk membangun lingkungan pengembangan.
Kirimkan pekerjaan pelatihan mandiri.
Kirimkan pekerjaan pelatihan terdistribusi.
Gunakan Fluid untuk mempercepat pekerjaan pelatihan.
Gunakan penjadwal pekerjaan AI dari ACK untuk mempercepat pekerjaan pelatihan.
Kelola model.
Evaluasi model.
Terapkan layanan inferensi.
Langkah 1: Buat pengguna dan alokasikan sumber daya
Pengembang harus mendapatkan informasi dan sumber daya berikut dari administrator:
Nama pengguna dan kata sandi pengguna. Untuk informasi lebih lanjut tentang cara membuat pengguna, lihat Kelola Pengguna.
Kuota sumber daya. Untuk informasi lebih lanjut tentang cara mengalokasikan kuota sumber daya, lihat Kelola Grup Kuota Elastis.
Titik akhir Konsol Pengembang AI jika pengembang ingin mengirimkan pekerjaan menggunakan Konsol Pengembang AI. Untuk informasi lebih lanjut tentang cara mengakses Konsol Pengembang AI, lihat Masuk ke Konsol Pengembang AI.
CatatanKonsol AI (termasuk AI Dashboard dan Konsol Pengembang AI) yang disediakan oleh Alibaba Cloud mulai diluncurkan secara bertahap melalui mekanisme daftar putih mulai 22 Januari 2025.
Penyebaran yang Ada: Jika Anda sudah menerapkan AI Dashboard atau Konsol Pengembang AI sebelum tanggal ini, penggunaan saat ini tidak akan terpengaruh.
Instalasi Baru: Pengguna yang tidak masuk daftar putih dapat menginstal dan mengonfigurasi Konsol AI melalui komunitas open-source. Untuk instruksi konfigurasi open-source rinci, lihat Konsol AI Open-source.
File kubeconfig yang digunakan untuk masuk ke kluster jika pengembang ingin mengirimkan pekerjaan menggunakan Arena. Untuk informasi lebih lanjut tentang cara mendapatkan file kubeconfig yang digunakan untuk masuk ke kluster, lihat 3. Konfigurasikan File kubeconfig dan Hubungkan ke Kluster.
Langkah 2: Buat dataset
Administrator harus menyiapkan dataset. Dalam contoh ini, dataset Fashion-MNIST digunakan.
a: Add the Fashion-MNIST dataset
Gunakan template YAML berikut untuk membuat file bernama fashion-mnist.yaml:
Dalam contoh ini, volume persisten (PV) dan klaim volume persisten (PVC) dibuat untuk memasang bucket OSS yang menyimpan dataset Fashion-MNIST.
apiVersion: v1 kind: PersistentVolume metadata: name: fashion-demo-pv spec: accessModes: - ReadWriteMany capacity: storage: 10Gi csi: driver: ossplugin.csi.alibabacloud.com volumeAttributes: bucket: fashion-mnist otherOpts: "" url: oss-cn-beijing.aliyuncs.com akId: "AKID" akSecret: "AKSECRET" volumeHandle: fashion-demo-pv persistentVolumeReclaimPolicy: Retain storageClassName: oss volumeMode: Filesystem --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fashion-demo-pvc namespace: demo-ns spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi selector: matchLabels: alicloud-pvname: fashion-demo-pv storageClassName: oss volumeMode: Filesystem volumeName: fashion-demo-pvJalankan perintah berikut untuk membuat file fashion-mnist.yaml:
kubectl create -f fashion-mnist.yamlPeriksa status PV dan PVC yang dibuat.
Jalankan perintah berikut untuk memeriksa status PV yang dibuat:
kubectl get pv fashion-mnist-jackwgOutput yang Diharapkan:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE fashion-mnist-jackwg 10Gi RWX Retain Bound ns1/fashion-mnist-jackwg-pvc oss 8hJalankan perintah berikut untuk memeriksa status PVC yang dibuat:
kubectl get pvc fashion-mnist-jackwg-pvc -n ns1Output yang Diharapkan:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE fashion-mnist-jackwg-pvc Bound fashion-mnist-jackwg 10Gi RWX oss 8h
Output menunjukkan bahwa baik PV maupun PVC berada dalam status Terikat.
b: Accelerate the dataset
Administrator harus mempercepat dataset menggunakan AI Dashboard.
- Akses AI Dashboard sebagai administrator.
- Di panel navigasi kiri AI Dashboard, pilih .
Di halaman Dataset List, temukan dataset dan klik Accelerate di kolom Operator.
Gambar berikut menunjukkan dataset yang dipercepat.

Langkah 3: Kembangkan model
Bagian ini menjelaskan cara menggunakan Jupyter Notebook untuk membangun lingkungan pengembangan. Prosedur:
Opsional. Gunakan gambar kustom untuk membuat notebook Jupyter.
Gunakan notebook Jupyter untuk mengembangkan dan menguji model.
Gunakan notebook Jupyter untuk mengirimkan kode ke repositori Git.
Gunakan SDK Arena untuk mengirimkan pekerjaan pelatihan.
a (optional): Use a custom image to create a Jupyter notebook
Konsol Pengembang AI menyediakan berbagai versi gambar yang mendukung TensorFlow dan PyTorch untuk membuat notebook Jupyter. Anda juga dapat menggunakan gambar kustom untuk membuat notebook Jupyter.
Gunakan template Dockerfile berikut untuk membuat file bernama Dockerfile.
Untuk informasi lebih lanjut tentang batasan gambar kustom, lihat Buat dan Gunakan Notebook.
cat<<EOF >dockerfile FROM tensorflow/tensorflow:1.15.5-gpu USER root RUN pip install jupyter && \ pip install ipywidgets && \ jupyter nbextension enable --py widgetsnbextension && \ pip install jupyterlab && jupyter serverextension enable --py jupyterlab EXPOSE 8888 #USER jovyan CMD ["sh", "-c", "jupyter-lab --notebook-dir=/home/jovyan --ip=0.0.0.0 --no-browser --allow-root --port=8888 --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.allow_origin='*' --NotebookApp.base_url=${NB_PREFIX} --ServerApp.authenticate_prometheus=False"] EOFJalankan perintah berikut untuk membangun gambar dari Dockerfile:
docker build -f dockerfile .Output yang Diharapkan:
Sending build context to Docker daemon 9.216kB Step 1/5 : FROM tensorflow/tensorflow:1.15.5-gpu ---> 73be11373498 Step 2/5 : USER root ---> Using cache ---> 7ee21dc7e42e Step 3/5 : RUN pip install jupyter && pip install ipywidgets && jupyter nbextension enable --py widgetsnbextension && pip install jupyterlab && jupyter serverextension enable --py jupyterlab ---> Using cache ---> 23bc51c5e16d Step 4/5 : EXPOSE 8888 ---> Using cache ---> 76a55822ddae Step 5/5 : CMD ["sh", "-c", "jupyter-lab --notebook-dir=/home/jovyan --ip=0.0.0.0 --no-browser --allow-root --port=8888 --NotebookApp.token='' --NotebookApp.password='' --NotebookApp.allow_origin='*' --NotebookApp.base_url=${NB_PREFIX} --ServerApp.authenticate_prometheus=False"] ---> Using cache ---> 3692f04626d5 Successfully built 3692f04626d5Jalankan perintah berikut untuk mendorong gambar ke repositori gambar Docker Anda:
docker tag ${IMAGE_ID} registry-vpc.cn-beijing.aliyuncs.com/${DOCKER_REPO}/jupyter:fashion-mnist-20210802a docker push registry-vpc.cn-beijing.aliyuncs.com/${DOCKER_REPO}/jupyter:fashion-mnist-20210802aBuat Secret yang digunakan untuk menarik gambar dari repositori gambar Docker:
Untuk informasi lebih lanjut, lihat Buat Secret Berdasarkan Kredensial Docker yang Ada.
kubectl create secret docker-registry regcred \ --docker-server=<Your registry server> \ --docker-username=<Username> \ --docker-password=<Password> \ --docker-email=<Your email address>Buat notebook Jupyter di Konsol Pengembang AI.
Untuk informasi lebih lanjut, lihat Buat dan Gunakan Notebook.
Gambar berikut menunjukkan parameter untuk membuat notebook Jupyter.

b: Use the Jupyter notebook to develop and test a model
- Masuk ke Konsol Pengembang AI
- Di panel navigasi kiri Konsol Pengembang AI, klikNotebook.
Di halaman Notebook, klik notebook Jupyter yang berada dalam status Running.
Buat peluncur CLI dan verifikasi bahwa dataset telah dipasang.
pwd /root/data ls -alhOutput yang Diharapkan:
total 30M drwx------ 1 root root 0 Jan 1 1970 . drwx------ 1 root root 4.0K Aug 2 04:15 .. drwxr-xr-x 1 root root 0 Aug 1 14:16 saved_model -rw-r----- 1 root root 4.3M Aug 1 01:53 t10k-images-idx3-ubyte.gz -rw-r----- 1 root root 5.1K Aug 1 01:53 t10k-labels-idx1-ubyte.gz -rw-r----- 1 root root 26M Aug 1 01:54 train-images-idx3-ubyte.gz -rw-r----- 1 root root 29K Aug 1 01:53 train-labels-idx1-ubyte.gzBuat notebook Jupyter yang digunakan untuk melatih model berdasarkan dataset Fashion-MNIST. Blok kode berikut digunakan untuk menginisialisasi notebook:
#!/usr/bin/python # -*- coding: UTF-8 -*- import os import gzip import numpy as np import tensorflow as tf from tensorflow import keras print('Versi TensorFlow: {}'.format(tf.__version__)) dataset_path = "/root/data/" model_path = "./model/" model_version = "v1" def load_data(): files = [ 'train-labels-idx1-ubyte.gz', 'train-images-idx3-ubyte.gz', 't10k-labels-idx1-ubyte.gz', 't10k-images-idx3-ubyte.gz' ] paths = [] for fname in files: paths.append(os.path.join(dataset_path, fname)) with gzip.open(paths[0], 'rb') as labelpath: y_train = np.frombuffer(labelpath.read(), np.uint8, offset=8) with gzip.open(paths[1], 'rb') as imgpath: x_train = np.frombuffer(imgpath.read(), np.uint8, offset=16).reshape(len(y_train), 28, 28) with gzip.open(paths[2], 'rb') as labelpath: y_test = np.frombuffer(labelpath.read(), np.uint8, offset=8) with gzip.open(paths[3], 'rb') as imgpath: x_test = np.frombuffer(imgpath.read(), np.uint8, offset=16).reshape(len(y_test), 28, 28) return (x_train, y_train),(x_test, y_test) def train(): (train_images, train_labels), (test_images, test_labels) = load_data() # skala nilai ke 0.0 hingga 1.0 train_images = train_images / 255.0 test_images = test_images / 255.0 # ubah bentuk untuk memberi makan ke dalam model train_images = train_images.reshape(train_images.shape[0], 28, 28, 1) test_images = test_images.reshape(test_images.shape[0], 28, 28, 1) class_names = ['T-shirt/top', 'Celana', 'Pullover', 'Gaun', 'Jaket', 'Sandal', 'Kemeja', 'Sneaker', 'Tas', 'Sepatu Boot Ankle'] print('\ntrain_images.shape: {}, dari {}'.format(train_images.shape, train_images.dtype)) print('test_images.shape: {}, dari {}'.format(test_images.shape, test_images.dtype)) model = keras.Sequential([ keras.layers.Conv2D(input_shape=(28,28,1), filters=8, kernel_size=3, strides=2, activation='relu', name='Conv1'), keras.layers.Flatten(), keras.layers.Dense(10, activation=tf.nn.softmax, name='Softmax') ]) model.summary() testing = False epochs = 5 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) logdir = "/training_logs" tensorboard_callback = keras.callbacks.TensorBoard(log_dir=logdir) model.fit(train_images, train_labels, epochs=epochs, callbacks=[tensorboard_callback], ) test_loss, test_acc = model.evaluate(test_images, test_labels) print('\nAkurasi pengujian: {}'.format(test_acc)) export_path = os.path.join(model_path, model_version) print('export_path = {}\n'.format(export_path)) tf.keras.models.save_model( model, export_path, overwrite=True, include_optimizer=True, save_format=None, signatures=None, options=None ) print('\nModel berhasil disimpan') if __name__ == '__main__': train()PentingGanti dataset_path dan model_path dengan jalur dataset dan model. Ini memungkinkan notebook mengakses dataset yang dipasang ke kluster.
Klik ikon
pada notebook.Output yang Diharapkan:
Versi TensorFlow: 1.15.5 train_images.shape: (60000, 28, 28, 1), dari float64 test_images.shape: (10000, 28, 28, 1), dari float64 Model: "sequential_2" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= Conv1 (Conv2D) (None, 13, 13, 8) 80 _________________________________________________________________ flatten_2 (Flatten) (None, 1352) 0 _________________________________________________________________ Softmax (Dense) (None, 10) 13530 ================================================================= Total params: 13,610 Trainable params: 13,610 Non-trainable params: 0 _________________________________________________________________ Train on 60000 samples Epoch 1/5 60000/60000 [==============================] - 3s 57us/sample - loss: 0.5452 - acc: 0.8102 Epoch 2/5 60000/60000 [==============================] - 3s 52us/sample - loss: 0.4103 - acc: 0.8555 Epoch 3/5 60000/60000 [==============================] - 3s 55us/sample - loss: 0.3750 - acc: 0.8681 Epoch 4/5 60000/60000 [==============================] - 3s 55us/sample - loss: 0.3524 - acc: 0.8757 Epoch 5/5 60000/60000 [==============================] - 3s 53us/sample - loss: 0.3368 - acc: 0.8798 10000/10000 [==============================] - 0s 37us/sample - loss: 0.3770 - acc: 0.8673 Akurasi pengujian: 0.8672999739646912 export_path = ./model/v1 Model berhasil disimpan
c: Use the Jupyter notebook to submit code to a Git repository
Setelah notebook dibuat, Anda dapat menggunakan notebook untuk mengirimkan kode ke repositori Git.
Jalankan perintah berikut untuk menginstal Git:
apt-get update apt-get install gitJalankan perintah berikut untuk menginisialisasi Git dan menyimpan nama pengguna dan kata sandi ke notebook:
git config --global credential.helper store git pull ${YOUR_GIT_REPO}Jalankan perintah berikut untuk mendorong kode ke repositori Git:
git push origin fashion-testOutput yang Diharapkan:
Total 0 (delta 0), reused 0 (delta 0) To codeup.aliyun.com:60b4cf5c66bba1c04b442e49/tensorflow-fashion-mnist-sample.git * [new branch] fashion-test -> fashion-test
d: Use the Arena SDK to submit a training job
Instal dependensi untuk SDK Arena.
!pip install coloredlogsGunakan kode berikut untuk membuat file Python untuk inisialisasi:
import os import sys import time from arenasdk.client.client import ArenaClient from arenasdk.enums.types import * from arenasdk.exceptions.arena_exception import * from arenasdk.training.tensorflow_job_builder import * from arenasdk.logger.logger import LoggerBuilder def main(): print("mulai menguji arena-python-sdk") client = ArenaClient("","demo-ns","info","arena-system") # Pekerjaan pelatihan dikirim ke namespace demo-ns. print("ArenaClient berhasil dibuat.") print("mulai membuat tfjob") job_name = "arena-sdk-distributed-test" job_type = TrainingJobType.TFTrainingJob try: # bangun pekerjaan pelatihan job = TensorflowJobBuilder().with_name(job_name)\ .witch_workers(1)\ .with_gpus(1)\ .witch_worker_image("tensorflow/tensorflow:1.5.0-devel-gpu")\ .witch_ps_image("tensorflow/tensorflow:1.5.0-devel")\ .witch_ps_count(1)\ .with_datas({"fashion-demo-pvc":"/data"})\ .enable_tensorboard()\ .with_sync_mode("git")\ .with_sync_source("https://codeup.aliyun.com/60b4cf5c66bba1c04b442e49/tensorflow-fashion-mnist-sample.git")\ # Alamat repositori Git. .with_envs({\ "GIT_SYNC_USERNAME":"USERNAME", \ # Nama pengguna repositori Git. "GIT_SYNC_PASSWORD":"PASSWORD",\ # Kata sandi repositori Git. "TEST_TMPDIR":"/",\ })\ .with_command("python code/tensorflow-fashion-mnist-sample/tf-distributed-mnist.py").build() # jika pekerjaan pelatihan belum ada, buatlah if client.training().get(job_name, job_type): print("pekerjaan {} telah dibuat, hapus".format(job_name)) client.training().delete(job_name, job_type) time.sleep(3) output = client.training().submit(job) print(output) count = 0 # tunggu pekerjaan pelatihan menjadi berjalan while True: if count > 160: raise Exception("timeout menunggu pekerjaan menjadi berjalan") jobInfo = client.training().get(job_name,job_type) if jobInfo.get_status() == TrainingJobStatus.TrainingJobPending: print("status pekerjaan adalah PENDING, menunggu...") count = count + 1 time.sleep(5) continue print("status saat ini adalah {} dari pekerjaan {}".format(jobInfo.get_status().value,job_name)) break # dapatkan log pekerjaan pelatihan logger = LoggerBuilder().with_accepter(sys.stdout).with_follow().with_since("5m") #jobInfo.get_instances()[0].get_logs(logger) # tampilkan informasi pekerjaan pelatihan print(str(jobInfo)) # hapus pekerjaan pelatihan #client.training().delete(job_name, job_type) except ArenaException as e: print(e) main()namespace: Dalam contoh ini, pekerjaan pelatihan dikirim ke namespace demo-ns.with_sync_source: Alamat repositori Git.with_envs: Nama pengguna dan kata sandi repositori Git.
Klik ikon
pada notebook.Output yang Diharapkan:
2021-11-02/08:57:28 DEBUG util.py[line:19] - execute command: [arena get --namespace=demo-ns --arena-namespace=arena-system --loglevel=info arena-sdk-distributed-test --type=tfjob -o json] 2021-11-02/08:57:28 DEBUG util.py[line:19] - execute command: [arena submit --namespace=demo-ns --arena-namespace=arena-system --loglevel=info tfjob --name=arena-sdk-distributed-test --workers=1 --gpus=1 --worker-image=tensorflow/tensorflow:1.5.0-devel-gpu --ps-image=tensorflow/tensorflow:1.5.0-devel --ps=1 --data=fashion-demo-pvc:/data --tensorboard --sync-mode=git --sync-source=https://codeup.aliyun.com/60b4cf5c66bba1c04b442e49/tensorflow-fashion-mnist-sample.git --env=GIT_SYNC_USERNAME=kubeai --env=GIT_SYNC_PASSWORD=kubeai@ACK123 --env=TEST_TMPDIR=/ python code/tensorflow-fashion-mnist-sample/tf-distributed-mnist.py] start to test arena-python-sdk create ArenaClient succeed. start to create tfjob 2021-11-02/08:57:29 DEBUG util.py[line:19] - execute command: [arena get --namespace=demo-ns --arena-namespace=arena-system --loglevel=info arena-sdk-distributed-test --type=tfjob -o json] service/arena-sdk-distributed-test-tensorboard created deployment.apps/arena-sdk-distributed-test-tensorboard created tfjob.kubeflow.org/arena-sdk-distributed-test created job status is PENDING,waiting... 2021-11-02/09:00:34 DEBUG util.py[line:19] - execute command: [arena get --namespace=demo-ns --arena-namespace=arena-system --loglevel=info arena-sdk-distributed-test --type=tfjob -o json] current status is RUNNING of job arena-sdk-distributed-test { "allocated_gpus": 1, "chief_name": "arena-sdk-distributed-test-worker-0", "duration": "185s", "instances": [ { "age": "13s", "gpu_metrics": [], "is_chief": false, "name": "arena-sdk-distributed-test-ps-0", "node_ip": "192.168.5.8", "node_name": "cn-beijing.192.168.5.8", "owner": "arena-sdk-distributed-test", "owner_type": "tfjob", "request_gpus": 0, "status": "Running" }, { "age": "13s", "gpu_metrics": [], "is_chief": true, "name": "arena-sdk-distributed-test-worker-0", "node_ip": "192.168.5.8", "node_name": "cn-beijing.192.168.5.8", "owner": "arena-sdk-distributed-test", "owner_type": "tfjob", "request_gpus": 1, "status": "Running" } ], "name": "arena-sdk-distributed-test", "namespace": "demo-ns", "priority": "N/A", "request_gpus": 1, "tensorboard": "http://192.168.5.6:31068", "type": "tfjob" }
Langkah 4: Latih model
Referensi contoh berikut untuk mengirimkan pekerjaan pelatihan TensorFlow mandiri, pekerjaan pelatihan TensorFlow terdistribusi, pekerjaan pelatihan yang dipercepat oleh Fluid, dan pekerjaan pelatihan terdistribusi yang dipercepat oleh penjadwal pekerjaan AI dari ACK.
Example 1: Submit a standalone TensorFlow training job
Setelah Anda mengembangkan model menggunakan notebook dan menyimpan model, Anda dapat menggunakan Arena atau Konsol Pengembang AI untuk mengirimkan pekerjaan pelatihan.
Metode 1: Gunakan Arena untuk mengirimkan pekerjaan pelatihan TensorFlow mandiri
arena \
submit \
tfjob \
-n ns1 \
--name=fashion-mnist-arena \
--data=fashion-mnist-jackwg-pvc:/root/data/ \
--env=DATASET_PATH=/root/data/ \
--env=MODEL_PATH=/root/saved_model \
--env=MODEL_VERSION=1 \
--env=GIT_SYNC_USERNAME=<GIT_USERNAME> \
--env=GIT_SYNC_PASSWORD=<GIT_PASSWORD> \
--sync-mode=git \
--sync-source=https://codeup.aliyun.com/60b4cf5c66bba1c04b442e49/tensorflow-fashion-mnist-sample.git \
--image="tensorflow/tensorflow:2.2.2-gpu" \
"python /root/code/tensorflow-fashion-mnist-sample/train.py --log_dir=/training_logs"Metode 2: Gunakan Konsol Pengembang AI untuk mengirimkan pekerjaan pelatihan TensorFlow mandiri
Konfigurasikan sumber data. Untuk informasi lebih lanjut, lihat Konfigurasikan Dataset.

Tabel berikut menjelaskan beberapa parameter.
Parameter
Contoh
Diperlukan
Name
fashion-demo
Ya
Namespace
demo-ns
Ya
PersistentVolumeClaim
fashion-demo-pvc
Ya
Local Directory
/root/data
Tidak
Konfigurasikan kode sumber. Untuk informasi lebih lanjut, lihat Konfigurasikan Repositori Kode Sumber.

Parameter
Contoh
Diperlukan
Name
fashion-git
Ya
Git Repository
https://codeup.aliyun.com/60b4cf5c66bba1c04b442e49/tensorflow-fashion-mnist-sample.git
Ya
Default Branch
master
Tidak
Local Directory
/root/
Tidak
Git user
Nama pengguna repositori Git pribadi Anda.
Tidak
Git secret
Kata sandi repositori Git pribadi Anda.
Tidak
Kirim pekerjaan pelatihan TensorFlow mandiri. Untuk informasi lebih lanjut, lihat Kirim Pekerjaan Pelatihan TensorFlow.
Setelah Anda mengonfigurasi parameter pekerjaan, klik Submit. Pekerjaan pelatihan muncul dalam daftar pekerjaan. Gambar berikut menjelaskan parameter pekerjaan.

Parameter
Deskripsi
Job Name
Dalam contoh ini, fashion-tf-ui digunakan.
Job Type
Dalam contoh ini, TF Stand-alone dipilih.
Namespace
Dalam contoh ini, demo-ns dipilih. Anda harus memilih namespace tempat dataset berada.
Data Configuration
Dalam contoh ini, fashion-demo dipilih. Anda harus memilih sumber data yang Anda konfigurasikan di Langkah 1.
Code Configuration
Dalam contoh ini, fashion-git dipilih. Anda harus memilih kode sumber yang Anda konfigurasikan di Langkah 2.
Code branch
Dalam contoh ini, master ditentukan.
Execution Command
Dalam contoh ini, perintah berikut ditentukan:
"export DATASET_PATH=/root/data/ &&export MODEL_PATH=/root/saved_model &&export MODEL_VERSION=1 &&python /root/code/tensorflow-fashion-mnist-sample/train.py".Private Git
Untuk menggunakan repositori Git pribadi, Anda harus terlebih dahulu menentukan nama pengguna dan kata sandi repositori Git pribadi tersebut.
Instances Count
Nilai default: 1.
Image
Dalam contoh ini,
tensorflow/tensorflow:2.2.2-gpuditentukan.Image Pull Secrets
Untuk menarik gambar dari repositori gambar pribadi, Anda harus terlebih dahulu membuat Secret.
CPU (Cores)
Nilai default: 4.
Memory (GB)
Nilai default: 8.
Untuk informasi lebih lanjut tentang perintah Arena, lihat Gunakan Arena untuk Mengirimkan Pekerjaan Pelatihan TensorFlow.
Setelah Anda mengirimkan pekerjaan, periksa log pekerjaan.
Di panel navigasi kiri Konsol Pengembang AI, klik Job List.
Di halaman Job List, klik nama pekerjaan yang Anda kirimkan.
Di halaman detail, klik tab Instances. Temukan instans yang ingin Anda lihat dan klik Log di kolom Operator.
Contoh:
train_images.shape: (60000, 28, 28, 1), dari float64 test_images.shape: (10000, 28, 28, 1), dari float64 Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= Conv1 (Conv2D) (None, 13, 13, 8) 80 _________________________________________________________________ flatten (Flatten) (None, 1352) 0 _________________________________________________________________ Softmax (Dense) (None, 10) 13530 ================================================================= Total params: 13,610 Trainable params: 13,610 Non-trainable params: 0 _________________________________________________________________ Epoch 1/5 2021-08-01 14:21:17.532237: E tensorflow/core/profiler/internal/gpu/cupti_tracer.cc:1430] function cupti_interface_->EnableCallback( 0 , subscriber_, CUPTI_CB_DOMAIN_DRIVER_API, cbid)failed with error CUPTI_ERROR_INVALID_PARAMETER 2021-08-01 14:21:17.532390: I tensorflow/core/profiler/internal/gpu/device_tracer.cc:216] GpuTracer telah mengumpulkan 0 callback api events dan 0 activity events. 2021-08-01 14:21:17.533535: I tensorflow/core/profiler/rpc/client/save_profile.cc:168] Membuat direktori: /training_logs/train/plugins/profile/2021_08_01_14_21_17 2021-08-01 14:21:17.533928: I tensorflow/core/profiler/rpc/client/save_profile.cc:174] Dumped gzipped tool data for trace.json.gz to /training_logs/train/plugins/profile/2021_08_01_14_21_17/fashion-mnist-arena-chief-0.trace.json.gz 2021-08-01 14:21:17.534251: I tensorflow/core/profiler/utils/event_span.cc:288] Pembuatan step-events membutuhkan waktu 0 ms 2021-08-01 14:21:17.534961: I tensorflow/python/profiler/internal/profiler_wrapper.cc:87] Membuat direktori: /training_logs/train/plugins/profile/2021_08_01_14_21_17Dumped tool data for overview_page.pb to /training_logs/train/plugins/profile/2021_08_01_14_21_17/fashion-mnist-arena-chief-0.overview_page.pb Dumped tool data for input_pipeline.pb to /training_logs/train/plugins/profile/2021_08_01_14_21_17/fashion-mnist-arena-chief-0.input_pipeline.pb Dumped tool data for tensorflow_stats.pb to /training_logs/train/plugins/profile/2021_08_01_14_21_17/fashion-mnist-arena-chief-0.tensorflow_stats.pb Dumped tool data for kernel_stats.pb to /training_logs/train/plugins/profile/2021_08_01_14_21_17/fashion-mnist-arena-chief-0.kernel_stats.pb 1875/1875 [==============================] - 3s 2ms/step - loss: 0.5399 - accuracy: 0.8116 Epoch 2/5 1875/1875 [==============================] - 3s 2ms/step - loss: 0.4076 - accuracy: 0.8573 Epoch 3/5 1875/1875 [==============================] - 3s 2ms/step - loss: 0.3727 - accuracy: 0.8694 Epoch 4/5 1875/1875 [==============================] - 3s 2ms/step - loss: 0.3512 - accuracy: 0.8769 Epoch 5/5 1875/1875 [==============================] - 3s 2ms/step - loss: 0.3351 - accuracy: 0.8816 313/313 [==============================] - 0s 1ms/step - loss: 0.3595 - accuracy: 0.8733 2021-08-01 14:21:34.820089: W tensorflow/python/util/util.cc:329] Set saat ini tidak dianggap sebagai urutan, tetapi ini mungkin berubah di masa mendatang, jadi pertimbangkan untuk menghindari penggunaannya. WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/resource_variable_ops.py:1817: calling BaseResourceVariable.__init__ (from tensorflow.python.ops.resource_variable_ops) dengan constraint sudah tidak digunakan lagi dan akan dihapus di versi mendatang. Instruksi untuk pembaruan: Jika menggunakan Keras, lewatkan argumen *_constraint ke lapisan. Akurasi pengujian: 0.8733000159263611 export_path = /root/saved_model/1 Model berhasil disimpan
Lihat data pada TensorBoard.
Anda dapat menggunakan perintah kubectl port-forward untuk memetakan port lokal ke Layanan TensorBoard. Anda juga dapat melakukan operasi berikut untuk membangun koneksi antara MaxCompute dan VPC.
Jalankan perintah berikut untuk memeriksa alamat IP Layanan TensorBoard:
kubectl get svc -n demo-nsOutput yang Diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE tf-dist-arena-tensorboard NodePort 172.16.XX.XX <none> 6006:32226/TCP 80mJalankan perintah berikut untuk memetakan port lokal ke Layanan TensorBoard:
kubectl port-forward svc/tf-dist-arena-tensorboard -n demo-ns 6006:6006Output yang Diharapkan:
Forwarding from 127.0.0.1:6006 -> 6006 Forwarding from [::1]:6006 -> 6006 Handling connection for 6006 Handling connection for 6006Masukkan
http://localhost:6006/ke bilah alamat browser Anda untuk melihat data pada TensorBoard.
Example 2: Submit a distributed TensorFlow training job
Metode 1: Gunakan Arena untuk mengirimkan pekerjaan pelatihan TensorFlow terdistribusi
Jalankan perintah berikut untuk mengirimkan pekerjaan pelatihan TensorFlow terdistribusi menggunakan Arena:
arena submit tf \ -n demo-ns \ --name=tf-dist-arena \ --working-dir=/root/ \ --data fashion-mnist-pvc:/data \ --env=TEST_TMPDIR=/ \ --env=GIT_SYNC_USERNAME=kubeai \ --env=GIT_SYNC_PASSWORD=kubeai@ACK123 \ --env=GIT_SYNC_BRANCH=master \ --gpus=1 \ --workers=2 \ --worker-image=tensorflow/tensorflow:1.5.0-devel-gpu \ --sync-mode=git \ --sync-source=https://codeup.aliyun.com/60b4cf5c66bba1c04b442e49/tensorflow-fashion-mnist-sample.git \ --ps=1 \ --ps-image=tensorflow/tensorflow:1.5.0-devel \ --tensorboard \ "python code/tensorflow-fashion-mnist-sample/tf-distributed-mnist.py --log_dir=/training_logs"Jalankan perintah berikut untuk memeriksa alamat IP Layanan TensorBoard:
kubectl get svc -n demo-nsOutput yang Diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE tf-dist-arena-tensorboard NodePort 172.16.204.248 <none> 6006:32226/TCP 80mJalankan perintah berikut untuk memetakan port lokal ke Layanan TensorBoard.
Untuk melihat TensorBoard, gunakan perintah kubectl port-forward untuk memetakan port lokal ke Layanan TensorBoard.
kubectl port-forward svc/tf-dist-arena-tensorboard -n demo-ns 6006:6006Output yang Diharapkan:
Forwarding from 127.0.0.1:6006 -> 6006 Forwarding from [::1]:6006 -> 6006 Handling connection for 6006 Handling connection for 6006Masukkan
http://localhost:6006/ke bilah alamat browser Anda untuk melihat data pada TensorBoard.
Metode 2: Gunakan Konsol Pengembang AI untuk mengirimkan pekerjaan pelatihan TensorFlow terdistribusi
Konfigurasikan sumber data. Untuk informasi lebih lanjut, lihat Konfigurasikan Dataset.
Dalam contoh ini, konfigurasi sumber data sama dengan yang digunakan di Langkah 1.
Konfigurasikan kode sumber. Untuk informasi lebih lanjut, lihat Konfigurasikan Repositori Kode Sumber.
Dalam contoh ini, konfigurasi kode sumber sama dengan yang digunakan di Langkah 2.
Kirim pekerjaan pelatihan TensorFlow terdistribusi. Untuk informasi lebih lanjut, lihat Kirim Pekerjaan Pelatihan TensorFlow.
Setelah Anda mengonfigurasi parameter pekerjaan, klik Submit. Pekerjaan pelatihan muncul dalam daftar pekerjaan. Gambar berikut menjelaskan parameter pekerjaan.

Parameter
Deskripsi
Job Name
Dalam contoh ini, fashion-ps-ui digunakan.
Job Type
Dalam contoh ini, TF Distributed dipilih.
Namespace
Dalam contoh ini, demo-ns dipilih. Anda harus memilih namespace tempat dataset berada.
Data Configuration
Dalam contoh ini, fashion-demo dipilih. Anda harus memilih sumber data yang Anda konfigurasikan di Langkah 1.
Code Configuration
Dalam contoh ini, fashion-git dipilih. Anda harus memilih kode sumber yang Anda konfigurasikan di Langkah 2.
Execution Command
Dalam contoh ini, perintah berikut ditentukan:
"export TEST_TMPDIR=/root/ && python code/tensorflow-fashion-mnist-sample/tf-distributed-mnist.py --log_dir=/training_logs".Image
Pada tab Worker di bagian Resources, atur Image ke
tensorflow/tensorflow:1.5.0-devel-gpu.Pada tab PS di bagian Resources, atur Image ke
tensorflow/tensorflow:1.5.0-devel.
Untuk informasi lebih lanjut tentang perintah Arena, lihat Gunakan Arena untuk Mengirimkan Pekerjaan Pelatihan TensorFlow.
Lihat data pada TensorBoard. Untuk informasi lebih lanjut, lihat Langkah 2 hingga Langkah 4 di Method 1: Use Arena to submit a distributed TensorFlow training job.
Example 3: Submit a Fluid-accelerated training job
Dalam contoh ini, dataset dipercepat pada AI Dashboard dan pekerjaan pelatihan yang menggunakan dataset yang dipercepat dikirimkan. Hasilnya menunjukkan bahwa waktu yang diperlukan untuk menyelesaikan pekerjaan pelatihan berkurang. Prosedur:
Administrator mempercepat dataset pada AI Dashboard.
Pengembang menggunakan Arena untuk mengirimkan pekerjaan pelatihan yang menggunakan dataset yang dipercepat.
Gunakan Arena untuk memeriksa waktu yang diperlukan untuk menyelesaikan pekerjaan pelatihan.
Percepat dataset.
Jika Anda telah mempercepat fashion-demo-pvc di Langkah 2: Buat Dataset, lewati langkah ini. Untuk informasi lebih lanjut tentang cara mempercepat dataset, lihat Kelola Dataset.
Kirim pekerjaan pelatihan yang menggunakan dataset yang dipercepat.
Pengembang mengirimkan pekerjaan pelatihan yang menggunakan dataset yang dipercepat ke namespace demo-ns. Konfigurasi pekerjaan yang menggunakan dataset yang dipercepat dan konfigurasi pekerjaan yang menggunakan dataset biasa berbeda dalam pengaturan parameter berikut:
--data: VPC yang dipercepat, yaitufashion-demo-pvc-accdalam contoh ini.--env=DATASET_PATH: jalur pemasangan PVC dataset, yaitu /root/data/ dalam--datadalam contoh ini, dan nama PVC, yaitu fashion-demo-pvc-acc dalam contoh ini.
arena \ submit \ tfjob \ -n demo-ns \ --name=fashion-mnist-fluid \ --data=fashion-demo-pvc-acc:/root/data/ \ --env=DATASET_PATH=/root/data/fashion-demo-pvc-acc \ --env=MODEL_PATH=/root/saved_model \ --env=MODEL_VERSION=1 \ --env=GIT_SYNC_USERNAME=${GIT_USERNAME} \ --env=GIT_SYNC_PASSWORD=${GIT_PASSWORD} \ --sync-mode=git \ --sync-source=https://codeup.aliyun.com/60b4cf5c66bba1c04b442e49/tensorflow-fashion-mnist-sample.git \ --image="tensorflow/tensorflow:2.2.2-gpu" \ "python /root/code/tensorflow-fashion-mnist-sample/train.py --log_dir=/training_logs"Jalankan perintah berikut untuk membandingkan waktu yang diperlukan untuk menyelesaikan dua pekerjaan pelatihan:
arena list -n demo-nsOutput yang Diharapkan:
NAME STATUS TRAINER DURATION GPU(Requested) GPU(Allocated) NODE fashion-mnist-fluid SUCCEEDED TFJOB 33s 0 N/A 192.168.5.7 fashion-mnist-arena SUCCEEDED TFJOB 3m 0 N/A 192.168.5.8Output perintah arena list menunjukkan bahwa 33 detik diperlukan untuk menyelesaikan pekerjaan pelatihan yang dipercepat oleh Fluid, sedangkan 3 menit diperlukan untuk menyelesaikan pekerjaan pelatihan yang menggunakan dataset biasa. Kedua pekerjaan berjalan dengan kode yang sama dan pada node yang sama.
Example 4: Use the AI job scheduler of ACK to accelerate a distributed training job
ACK menyediakan penjadwal pekerjaan AI yang dioptimalkan untuk komputasi AI dan big data. Penjadwal pekerjaan AI mendukung penjadwalan gang, penjadwalan kapasitas, dan penjadwalan dengan kesadaran topologi. Dalam contoh ini, digunakan pekerjaan pelatihan yang memiliki penjadwalan GPU dengan kesadaran topologi diaktifkan.
Untuk memastikan kinerja tinggi beban kerja AI, penjadwal pekerjaan AI memilih solusi penjadwalan optimal berdasarkan informasi topologi tentang sumber daya heterogen pada node. Informasi tersebut mencakup bagaimana GPU berkomunikasi satu sama lain menggunakan NVLink dan PCIe Switches, serta topologi akses memori non-seragam (NUMA) dari CPU. Untuk informasi lebih lanjut tentang penjadwalan GPU dengan kesadaran topologi, lihat Penjadwalan dengan Kesadaran Topologi GPU. Untuk informasi lebih lanjut tentang penjadwalan CPU dengan kesadaran topologi, lihat Aktifkan Penjadwalan CPU dengan Kesadaran Topologi.
Lakukan langkah-langkah berikut untuk mengirimkan pekerjaan pelatihan yang memiliki penjadwalan GPU dengan kesadaran topologi diaktifkan dan pekerjaan pelatihan yang memiliki penjadwalan GPU dengan kesadaran topologi dinonaktifkan. Kemudian, bandingkan waktu yang diperlukan untuk menyelesaikan pekerjaan tersebut.
Jalankan perintah berikut untuk mengirimkan pekerjaan pelatihan yang memiliki penjadwalan GPU dengan kesadaran topologi dinonaktifkan:
arena submit mpi \ --name=tensorflow-4-vgg16 \ --gpus=1 \ --workers=4 \ --image=registry.cn-hangzhou.aliyuncs.com/kubernetes-image-hub/tensorflow-benchmark:tf2.3.0-py3.7-cuda10.1 \ "mpirun --allow-run-as-root -np "4" -bind-to none -map-by slot -x NCCL_DEBUG=INFO -x NCCL_SOCKET_IFNAME=eth0 -x LD_LIBRARY_PATH -x PATH --mca pml ob1 --mca btl_tcp_if_include eth0 --mca oob_tcp_if_include eth0 --mca orte_keep_fqdn_hostnames t --mca btl ^openib python /tensorflow/benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --model=vgg16 --batch_size=64 --variable_update=horovod"Kirimkan pekerjaan pelatihan yang memiliki penjadwalan GPU dengan kesadaran topologi diaktifkan.
Anda harus menambahkan label ke node tempat Anda ingin menjalankan pekerjaan. Dalam contoh ini, node cn-beijing.192.168.XX.XX digunakan. Ganti node dengan node sebenarnya yang digunakan.
kubectl label node cn-beijing.192.168.XX.XX ack.node.gpu.schedule=topology --overwriteJalankan perintah berikut untuk mengirimkan pekerjaan pelatihan yang dikonfigurasi dengan
--gputopology=true, yang digunakan untuk mengaktifkan penjadwalan GPU dengan kesadaran topologi.arena submit mpi \ --name=tensorflow-topo-4-vgg16 \ --gpus=1 \ --workers=4 \ --gputopology=true \ --image=registry.cn-hangzhou.aliyuncs.com/kubernetes-image-hub/tensorflow-benchmark:tf2.3.0-py3.7-cuda10.1 \ "mpirun --allow-run-as-root -np "4" -bind-to none -map-by slot -x NCCL_DEBUG=INFO -x NCCL_SOCKET_IFNAME=eth0 -x LD_LIBRARY_PATH -x PATH --mca pml ob1 --mca btl_tcp_if_include eth0 --mca oob_tcp_if_include eth0 --mca orte_keep_fqdn_hostnames t --mca btl ^openib python /tensorflow/benchmarks/scripts/tf_cnn_benchmarks/tf_cnn_benchmarks.py --model=vgg16 --batch_size=64 --variable_update=horovodBandingkan waktu yang diperlukan untuk menyelesaikan pekerjaan pelatihan.
Jalankan perintah berikut untuk membandingkan waktu yang diperlukan untuk menyelesaikan dua pekerjaan pelatihan:
arena list -n demo-nsOutput yang Diharapkan:
NAME STATUS TRAINER DURATION GPU(Requested) GPU(Allocated) NODE tensorflow-topo-4-vgg16 SUCCEEDED MPIJOB 44s 4 N/A 192.168.4.XX1 tensorflow-4-vgg16-image-warned SUCCEEDED MPIJOB 2m 4 N/A 192.168.4.XX0Jalankan perintah berikut untuk memeriksa total waktu pemrosesan GPU dari pekerjaan pelatihan yang memiliki penjadwalan GPU dengan kesadaran topologi dinonaktifkan:
arena logs tensorflow-topo-4-vgg16 -n demo-nsOutput yang Diharapkan:
100 images/sec: 251.7 +/- 0.1 (jitter = 1.2) 7.262 ---------------------------------------------------------------- total images/sec: 1006.44Jalankan perintah berikut untuk memeriksa total waktu pemrosesan GPU dari pekerjaan pelatihan yang memiliki penjadwalan GPU dengan kesadaran topologi diaktifkan:
arena logs tensorflow-4-vgg16-image-warned -n demo-nsOutput yang Diharapkan:
100 images/sec: +/- 0.2 (jitter = 1.5) 7.261 ---------------------------------------------------------------- total images/sec: 225.50
Tabel berikut menunjukkan hasil dari kedua pekerjaan.
Pekerjaan Pelatihan | Waktu Pemrosesan per GPU (ns) | Total Waktu Pemrosesan GPU (ns) | Durasi (s) |
Penjadwalan GPU dengan kesadaran topologi diaktifkan | 56.4 | 225.50 | 44 |
Penjadwalan GPU dengan kesadaran topologi dinonaktifkan | 251.7 | 1006.44 | 120 |
Setelah penjadwalan GPU dengan kesadaran topologi diaktifkan pada node, penjadwalan GPU reguler tidak dapat diaktifkan. Untuk melanjutkan penjadwalan GPU reguler, jalankan perintah berikut untuk memodifikasi label node:
kubectl label node cn-beijing.192.168.XX.XX0 ack.node.gpu.schedule=default --overwriteLangkah 5: Kelola model
- Masuk ke Konsol Pengembang AI
- Di panel navigasi kiri Konsol Pengembang AI, klik Model Manage.
Pada halaman Model Manage, klik Create Model.
Dalam kotak dialog Create, atur Model Name, Model Version, dan Job Name.
Dalam contoh ini, Nama Model diatur ke fsahion-mnist-demo, Versi Model diatur ke v1, dan Nama Pekerjaan diatur ke tf-single.
Klik OK. Model muncul di halaman.

Jika Anda ingin mengevaluasi model, klik New Model Evaluate di kolom Operasi.
Langkah 6: Evaluasi model
Setelah Anda menginstal set komponen cloud-native, Anda dapat menggunakan Arena atau Konsol Pengembang AI untuk mengirimkan pekerjaan evaluasi. Dalam contoh ini, pekerjaan evaluasi dikirimkan untuk mengevaluasi checkpoint model yang dilatih berdasarkan dataset Fashion-MNIST. Prosedur:
Gunakan Arena untuk mengirimkan pekerjaan pelatihan yang mengekspor checkpoint.
Gunakan Arena untuk mengirimkan pekerjaan evaluasi.
Gunakan Konsol Pengembang AI untuk membandingkan hasil evaluasi model yang berbeda.
Kirimkan pekerjaan pelatihan yang mengekspor checkpoint.
Jalankan perintah berikut untuk menggunakan Arena mengirimkan pekerjaan pelatihan yang mengekspor checkpoint ke fashion-demo-pvc:
arena \ submit \ tfjob \ -n demo-ns \ # Anda dapat mengubah namespace sesuai kebutuhan bisnis Anda. --name=fashion-mnist-arena-ckpt \ --data=fashion-demo-pvc:/root/data/ \ --env=DATASET_PATH=/root/data/ \ --env=MODEL_PATH=/root/data/saved_model \ --env=MODEL_VERSION=1 \ --env=GIT_SYNC_USERNAME=${GIT_USERNAME} \ # Nama pengguna repositori Git Anda. --env=GIT_SYNC_PASSWORD=${GIT_PASSWORD} \ # Kata sandi repositori Git Anda. --env=OUTPUT_CHECKPOINT=1 \ --sync-mode=git \ --sync-source=https://codeup.aliyun.com/60b4cf5c66bba1c04b442e49/tensorflow-fashion-mnist-sample.git \ --image="tensorflow/tensorflow:2.2.2-gpu" \ "python /root/code/tensorflow-fashion-mnist-sample/train.py --log_dir=/training_logs"Kirimkan pekerjaan evaluasi.
Bangun gambar yang digunakan untuk menerapkan pekerjaan.
Dapatkan kode untuk evaluasi model. Jalankan perintah berikut di direktori kubeai-sdk untuk membuat dan mendorong gambar:
docker build . -t ${DOCKER_REGISTRY}:fashion-mnist docker push ${DOCKER_REGISTRY}:fashion-mnistJalankan perintah berikut untuk memeriksa Layanan yang memberikan akses ke MySQL:
kubectl get svc -n kube-ai ack-mysqlOutput yang Diharapkan:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ack-mysql ClusterIP 172.16.XX.XX <none> 3306/TCP 28hJalankan perintah berikut untuk mengirimkan pekerjaan evaluasi menggunakan Arena:
arena evaluate model \ --namespace=demo-ns \ --loglevel=debug \ --name=evaluate-job \ --image=registry.cn-beijing.aliyuncs.com/kube-ai/kubeai-sdk-demo:fashion-minist \ --env=ENABLE_MYSQL=True \ --env=MYSQL_HOST=172.16.77.227 \ --env=MYSQL_PORT=3306 \ --env=MYSQL_USERNAME=kubeai \ --env=MYSQL_PASSWORD=kubeai@ACK \ --data=fashion-demo-pvc:/data \ --model-name=1 \ --model-path=/data/saved_model/ \ --dataset-path=/data/ \ --metrics-path=/data/output \ "python /kubeai/evaluate.py"CatatanAnda dapat memperoleh alamat IP dan port dari output pada langkah sebelumnya untuk mengakses MySQL.
Bandingkan hasil evaluasi.
Di panel navigasi kiri Konsol Pengembang AI, klik Model Manage.

Di bagian Job List, Anda dapat mengklik nama pekerjaan evaluasi untuk melihat metrik.

Anda juga dapat membandingkan metrik dari pekerjaan evaluasi yang berbeda.

Langkah 7: Terapkan model sebagai layanan
Setelah model dikembangkan dan dievaluasi, Anda dapat menerapkan model sebagai layanan. Langkah-langkah berikut menjelaskan cara menerapkan model sebelumnya sebagai layanan inferensi bernama tf-serving. Arena mendukung berbagai arsitektur layanan, seperti Triton dan Seldon. Untuk informasi lebih lanjut, lihat Panduan Arena Serve.
Dalam contoh ini, model yang dilatih di Langkah 4: Latih Model digunakan. Model disimpan dalam PVC fashion-minist-demo yang digunakan di Langkah 2: Buat Dataset. Jika Anda ingin menyimpan model ke jenis penyimpanan lain, Anda harus terlebih dahulu membuat PVC untuk jenis penyimpanan yang ingin Anda gunakan.
Jalankan perintah berikut untuk menggunakan Arena menerapkan model TensorFlow ke TensorFlow Serving:
arena serve tensorflow \ --loglevel=debug \ --namespace=demo-ns \ --name=fashion-mnist \ --model-name=1 \ --gpus=1 \ --image=tensorflow/serving:1.15.0-gpu \ --data=fashion-demo-pvc:/data \ --model-path=/data/saved_model/ \ --version-policy=latestJalankan perintah berikut untuk memeriksa nama layanan inferensi yang Anda terapkan:
arena serve list -n demo-nsOutput yang Diharapkan:
NAME TYPE VERSION DESIRED AVAILABLE ADDRESS PORTS GPU fashion-mnist Tensorflow 202111031203 1 1 172.16.XX.XX GRPC:8500,RESTFUL:8501 1Anda dapat menggunakan alamat IP dan port di kolom ADDRESS dan PORTS untuk mengirim permintaan ke layanan inferensi dari dalam kluster.
Buat notebook Jupyter di Jupyter dan gunakan notebook sebagai klien untuk mengirim permintaan HTTP ke layanan tf-serving.
Dalam contoh ini, notebook Jupyter yang dibuat di Langkah 3: Kembangkan Model digunakan.
Tentukan 172.16.XX.XX sebagai nilai bidang
server_ipdalam kode yang digunakan untuk menginisialisasi notebook. 172.16.XX.XX dikembalikan di kolom ADDRESS pada langkah sebelumnya.Tentukan 8501 sebagai nilai bidang
server_http_portdalam kode yang digunakan untuk menginisialisasi notebook. Port 8501 dikembalikan di kolom PORTS pada langkah sebelumnya dan digunakan untuk memanggil API RESTful.
Contoh:
import os import gzip import numpy as np # import matplotlib.pyplot as plt import random import requests import json server_ip = "172.16.XX.XX" server_http_port = 8501 dataset_dir = "/root/data/" def load_data(): files = [ 'train-labels-idx1-ubyte.gz', 'train-images-idx3-ubyte.gz', 't10k-labels-idx1-ubyte.gz', 't10k-images-idx3-ubyte.gz' ] paths = [] for fname in files: paths.append(os.path.join(dataset_dir, fname)) with gzip.open(paths[0], 'rb') as labelpath: y_train = np.frombuffer(labelpath.read(), np.uint8, offset=8) with gzip.open(paths[1], 'rb') as imgpath: x_train = np.frombuffer(imgpath.read(), np.uint8, offset=16).reshape(len(y_train), 28, 28) with gzip.open(paths[2], 'rb') as labelpath: y_test = np.frombuffer(labelpath.read(), np.uint8, offset=8) with gzip.open(paths[3], 'rb') as imgpath: x_test = np.frombuffer(imgpath.read(), np.uint8, offset=16).reshape(len(y_test), 28, 28) return (x_train, y_train),(x_test, y_test) def show(idx, title): plt.figure() plt.imshow(test_images[idx].reshape(28,28)) plt.axis('off') plt.title('\n\n{}'.format(title), fontdict={'size': 16}) class_names = ['T-shirt/top', 'Celana', 'Pullover', 'Gaun', 'Jaket', 'Sandal', 'Kemeja', 'Sneaker', 'Tas', 'Sepatu Boot Ankle'] (train_images, train_labels), (test_images, test_labels) = load_data() train_images = train_images / 255.0 test_images = test_images / 255.0 # ubah bentuk untuk memberi makan ke dalam model train_images = train_images.reshape(train_images.shape[0], 28, 28, 1) test_images = test_images.reshape(test_images.shape[0], 28, 28, 1) print('\ntrain_images.shape: {}, dari {}'.format(train_images.shape, train_images.dtype)) print('test_images.shape: {}, dari {}'.format(test_images.shape, test_images.dtype)) rando = random.randint(0,len(test_images)-1) #show(rando, 'Contoh Gambar: {}'.format(class_names[test_labels[rando]])) # !pip install -q requests # import requests # headers = {"content-type": "application/json"} # json_response = requests.post('http://localhost:8501/v1/models/fashion_model:predict', data=data, headers=headers) # predictions = json.loads(json_response.text)['predictions'] # show(0, 'Model mengira ini adalah {} (kelas {}), dan sebenarnya ini adalah {} (kelas {})'.format( # class_names[np.argmax(predictions[0])], np.argmax(predictions[0]), class_names[test_labels[0]], test_labels[0])) def request_model(data): headers = {"content-type": "application/json"} json_response = requests.post('http://{}:{}/v1/models/1:predict'.format(server_ip, server_http_port), data=data, headers=headers) print('=======response:', json_response, json_response.text) predictions = json.loads(json_response.text)['predictions'] print('Model mengira ini adalah {} (kelas {}), dan sebenarnya ini adalah {} (kelas {})'.format(class_names[np.argmax(predictions[0])], np.argmax(predictions[0]), class_names[test_labels[0]], test_labels[0])) #show(0, 'Model mengira ini adalah {} (kelas {}), dan sebenarnya ini adalah {} (kelas {})'.format( # class_names[np.argmax(predictions[0])], np.argmax(predictions[0]), class_names[test_labels[0]], test_labels[0])) # def request_model_version(data): # headers = {"content-type": "application/json"} # json_response = requests.post('http://{}:{}/v1/models/1/version/1:predict'.format(server_ip, server_http_port), data=data, headers=headers) # print('=======response:', json_response, json_response.text) # predictions = json.loads(json_response.text) # for i in range(0,3): # show(i, 'Model mengira ini adalah {} (kelas {}), dan sebenarnya ini adalah {} (kelas {})'.format( # class_names[np.argmax(predictions[i])], np.argmax(predictions[i]), class_names[test_labels[i]], test_labels[i])) data = json.dumps({"signature_name": "serving_default", "instances": test_images[0:3].tolist()}) print('Data: {} ... {}'.format(data[:50], data[len(data)-52:])) #request_model_version(data) request_model(data)Klik ikon
pada notebook. Output berikut dikembalikan:train_images.shape: (60000, 28, 28, 1), dari float64 test_images.shape: (10000, 28, 28, 1), dari float64 Data: {"signature_name": "serving_default", "instances": ... [0.0], [0.0], [0.0], [0.0], [0.0], [0.0]]]]} =======response: <Response [200]> { "predictions": [[7.42696e-07, 6.91237556e-09, 2.66364452e-07, 2.27735413e-07, 4.0373439e-07, 0.00490919966, 7.27086217e-06, 0.0316713452, 0.0010733594, 0.962337255], [0.00685342, 1.8516447e-08, 0.9266119, 2.42278338e-06, 0.0603800081, 4.01338771e-12, 0.00613868702, 4.26091073e-15, 1.35764185e-05, 3.38685469e-10] ] } Model mengira ini adalah Sepatu Boot Ankle (kelas 9), dan sebenarnya ini adalah Sepatu Boot Ankle (kelas 9)
FAQ
Bagaimana cara menginstal perangkat lunak yang sering digunakan di konsol notebook Jupyter?
Untuk menginstal perangkat lunak yang sering digunakan di konsol notebook Jupyter, jalankan perintah berikut:
apt-get install ${Software name}Bagaimana cara memperbaiki masalah karakter kacau di konsol notebook Jupyter?
Modifikasi file /etc/locale berdasarkan konten berikut dan kemudian buka kembali terminal.
LC_CTYPE="da_DK.UTF-8" LC_NUMERIC="da_DK.UTF-8" LC_TIME="da_DK.UTF-8" LC_COLLATE="da_DK.UTF-8" LC_MONETARY="da_DK.UTF-8" LC_MESSAGES="da_DK.UTF-8" LC_PAPER="da_DK.UTF-8" LC_NAME="da_DK.UTF-8" LC_ADDRESS="da_DK.UTF-8" LC_TELEPHONE="da_DK.UTF-8" LC_MEASUREMENT="da_DK.UTF-8" LC_IDENTIFICATION="da_DK.UTF-8" LC_ALL=