本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
GPU 训练
本节演示如何使用 Kubeflow 训练运算符和Deep Learning Containers 在 GPU 实例上训练
运行示例之前,请确保您的集群有 GU 节点。如果您的集群中没有 GPU 节点,请使用以下命令向集群添加节点组。请务必在 “加速计算” 类别中选择 Amazon EC2 实例node-type
)。
eksctl create nodegroup --cluster
$CLUSTER_NAME
--region$CLUSTER_REGION
\ --nodes2
--nodes-min1
--nodes-max3
--node-typep3.2xlarge
有关Deep Learning Containers 完整列表,请参阅Deep Learning Containers 映像。有关使用英特尔数学内核库 (MKL) 时配置设置的提示,请参阅AWSDeep Learning Containers 英特尔数学核心库 (MKL) 建议。
PyTorch GPU 训练
随之而AWS来的是你对 Kubeflow 的部署PyTorchJob
本教程展示了如何在单节点 GPU 实例 PyTorch 中训练模型。你将在你的容器中运行这个 PyTorch MNIST 示例
-
创建一个 PyTorchJob.
-
创建任务配置文件。
打开
vi
或vim
,然后复制并粘贴以下内容。将此文件另存为pytorch.yaml
。apiVersion: "kubeflow.org/v1" kind: PyTorchJob metadata: name:
pytorch-training
spec: pytorchReplicaSpecs: Worker: restartPolicy: OnFailure template: metadata: annotations: sidecar.istio.io/inject: "false" spec: containers: - name:pytorch
imagePullPolicy: Always image:763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-training:2.0.0-gpu-py310-cu118-ubuntu20.04-ec2
command: - "/bin/sh" - "-c" args: - "git clone https://github.com/pytorch/examples.git && python examples/mnist/main.py --no-cuda --epochs=1" env: - name: OMP_NUM_THREADS value: "36" - name: KMP_AFFINITY value: "granularity=fine,verbose,compact,1,0" - name: KMP_BLOCKTIME value: "1" resources: limits: nvidia.com/gpu: 1 -
使用部署 PyTorchJob 配置文件
kubectl
以开始训练。kubectl create -f pytorch.yaml -n ${NAMESPACE}
该任务创建了一个运行该容器的 Pod,该容器来自字段中引用的Deep Learning Container
spec.containers.image
s。它位于上面的容器名称下的 YAML 文件中pytorch
。 -
您应当看到如下输出。
pod/pytorch-training created
-
检查状态。
作业名称
pytorch-training
显示在状态中。这份工作可能需要一段时间才能到达一个Running
州。运行以下 watch 命令来监视作业的状态。kubectl get pods n ${NAMESPACE} -w
您应当看到如下输出。
NAME READY STATUS RESTARTS AGE pytorch-training 0/1 Running 8 19m
-
-
监视你的 PyTorchJob.
-
查看日志以查看训练进度。
kubectl logs pytorch-training-worker-0 -n ${NAMESPACE}
您应该可以看到类似于如下输出的内容。
Cloning into 'examples'... Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to ../data/MNIST/raw/train-images-idx3-ubyte.gz 9920512it [00:00, 40133996.38it/s] Extracting ../data/MNIST/raw/train-images-idx3-ubyte.gz to ../data/MNIST/raw Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to ../data/MNIST/raw/train-labels-idx1-ubyte.gz Extracting ../data/MNIST/raw/train-labels-idx1-ubyte.gz to ../data/MNIST/raw 32768it [00:00, 831315.84it/s] Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to ../data/MNIST/raw/t10k-images-idx3-ubyte.gz 1654784it [00:00, 13019129.43it/s] Extracting ../data/MNIST/raw/t10k-images-idx3-ubyte.gz to ../data/MNIST/raw Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz to ../data/MNIST/raw/t10k-labels-idx1-ubyte.gz 8192it [00:00, 337197.38it/s] Extracting ../data/MNIST/raw/t10k-labels-idx1-ubyte.gz to ../data/MNIST/raw Processing... Done! Train Epoch: 1 [0/60000 (0%)] Loss: 2.300039 Train Epoch: 1 [640/60000 (1%)] Loss: 2.213470 Train Epoch: 1 [1280/60000 (2%)] Loss: 2.170460 Train Epoch: 1 [1920/60000 (3%)] Loss: 2.076699 Train Epoch: 1 [2560/60000 (4%)] Loss: 1.868078 Train Epoch: 1 [3200/60000 (5%)] Loss: 1.414199 Train Epoch: 1 [3840/60000 (6%)] Loss: 1.000870
-
监控作业状态。
运行以下命令来刷新任务状态。当状态更改为时
Succeeded
,训练作业即告完成。watch -n 5 kubectl get pytorchjobs pytorch-training -n ${NAMESPACE}
-
清除有关在使用完集群后对其进行清理的信息,请参阅。
TensorFlow GPU 训练
你在 Kubeflow 上部署 TFJobAWS
本教程指导您在单节点 GPU 实例中使用 Keras 在 MNIST
-
创建一个 TFJob。
-
创建任务配置文件。
打开
vi
或vim
,然后复制并粘贴以下内容。将此文件另存为tf.yaml
。apiVersion: kubeflow.org/v1 kind: TFJob metadata: name:
tensorflow-training
spec: tfReplicaSpecs: Worker: restartPolicy: OnFailure template: metadata: annotations: sidecar.istio.io/inject: "false" spec: containers: - name:tensorflow
image:763104351884.dkr.ecr.us-east-1.amazonaws.com/tensorflow-training:2.12.0-gpu-py310-cu118-ubuntu20.04-ec2
command: ["/bin/sh","-c"] args: ["git clone https://github.com/keras-team/keras-io.git && python keras-io/examples/vision/mnist_convnet.py"] resources: limits: nvidia.com/gpu: 1 -
使用部署 TFJob 配置文件
kubectl
以开始训练。kubectl create -f tf.yaml ${NAMESPACE}
该任务创建了一个运行该容器的 Pod,该容器来自字段中引用的Deep Learning Container
spec.containers.image
s。它位于上面的容器名称下的 YAML 文件中tensorflow
。 -
您应当看到如下输出。
pod/tensorflow-training created
-
检查状态。
作业名称
tensorflow-training
显示在状态中。这份工作可能需要一段时间才能到达一个Running
州。运行以下 watch 命令来监视作业的状态。watch -n 5 kubectl get pods ${NAMESPACE}
您应当看到如下输出。
NAME READY STATUS RESTARTS AGE tensorflow-training 0/1 Running 8 19m
-
-
监控您的 Tob。
-
查看日志以查看训练进度。
kubectl logs tensorflow-training-worker-0 ${NAMESPACE}
您应该可以看到类似于如下输出的内容。
Cloning into 'keras'... Using TensorFlow backend. Downloading data from https://s3.amazonaws.com/img-datasets/mnist.npz 8192/11490434 [..............................] - ETA: 0s 6479872/11490434 [===============>..............] - ETA: 0s 8740864/11490434 [=====================>........] - ETA: 0s 11493376/11490434 [==============================] - 0s 0us/step x_train shape: (60000, 28, 28, 1) 60000 train samples 10000 test samples Train on 60000 samples, validate on 10000 samples Epoch 1/12 2019-03-19 01:52:33.863598: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX512F 2019-03-19 01:52:33.867616: I tensorflow/core/common_runtime/process_util.cc:69] Creating new thread pool with default inter op setting: 2. Tune using inter_op_parallelism_threads for best performance. 128/60000 [..............................] - ETA: 10:43 - loss: 2.3076 - acc: 0.0625 256/60000 [..............................] - ETA: 5:59 - loss: 2.2528 - acc: 0.1445 384/60000 [..............................] - ETA: 4:24 - loss: 2.2183 - acc: 0.1875 512/60000 [..............................] - ETA: 3:35 - loss: 2.1652 - acc: 0.1953 640/60000 [..............................] - ETA: 3:05 - loss: 2.1078 - acc: 0.2422 ...
-
监控作业状态。
运行以下命令来刷新任务状态。当状态更改为时
Succeeded
,训练作业即告完成。watch -n 5 kubectl get tfjobs tensorflow-training ${NAMESPACE}
-
清除有关在使用完集群后对其进行清理的信息,请参阅。