如何在 Azure 上的对象检测 API 的分布式训练作业(TF 作业)中设置数据访问
How to set up data access in a distributed training job (TF Job) for Object Detection API on Azure
一段时间以来,我一直在尝试为 Azure
上的 TensorFlow Object Detection API 设置 分布式 训练。我对如何将我的数据准确地设置到作业中有点困惑。
以前,我曾经使用 AI-Platform 在 gcloud
上轻松完成这项工作。我只需要:
gcloud ai-platform jobs submit training $JOB_NAME \
--runtime-version $VERSION \
--job-dir=$JOB_DIR \
--packages $OBJ_DET,$SLIM,$PYCOCOTOOLS \
--module-name object_detection.model_main \
--region us-central1 \
--config $CONF/config.yaml \
-- \
--model_dir=$MODEL_DIR \
--pipeline_config_path=$PIPELINE_PATH
其中config.yaml包含集群配置,JOB_DIR、MODEL_DIR、PIPELINE_PATH均指向各自的bucket存储位置(gs://*)。我的训练数据过去也存储在存储桶中,位置在我的 pipeline.config.
中指定
现在在 Azure 上,我似乎没有直接的方法可以 运行 分布式训练作业。我已经使用 AKS 部署了一个 GPU 加速的 Kubernetes 集群,然后安装了 NVIDIA 驱动程序。我还部署了 Kubeflow,并对对象检测进行了 docker 化 API.
我的数据以 tfrecords 的形式存在于 Azure blob 存储容器中。我正在查看的 Kubeflow examples/documentation (TFJob, AzureEndtoEnd) 分配持久卷,这看起来不错,但我不明白我的 job/training-code 将如何访问我的 tfrecords。
(我一直想知道是否可以在 Azure 端到端管道的 preprocessing part 中做一些事情;在那里我可以编写一些 python 代码行来使用azure-storage-blob
python 库。这仍然是推测,我还没有尝试过。)
因此,如果您对这个难题有任何帮助,我们将不胜感激。如果有人指出任何有用的最新资源,我也将不胜感激。这是我看过的其他两个资源:
-
这似乎是一个很好的例子,但其中的某些部分已经过时了。 tf/k8s 不再存在,已移至 kubeflow;因此,舵图也不可用。
https://github.com/kubeflow/examples/tree/master/object_detection
这是来自 Kubeflow 存储库的直接示例,但它似乎也已过时。好像是依赖ksonnet,已经停产
好吧,我自己解决了这个问题。事实证明,您可以在 storage class
之上定义 persistent volume claim
。存储class可以指定为Azure File Share,这样就方便多了。
sc.yaml:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: <NAME>
provisioner: kubernetes.io/azure-file
mountOptions:
- dir_mode=0777
- file_mode=0777
- uid=0
- gid=0
- mfsymlinks
- cache=strict
parameters:
storageAccount: <STORAGE_ACC_NAME>
pvc.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: <NAME>
spec:
accessModes:
- ReadWriteMany
storageClassName: <NAME>
resources:
requests:
storage: 20Gi
然后可以通过以下方式创建和声明持久卷:
kubectl apply -f sc.yaml
kubectl apply -f pvc.yaml
在此之后,一个共享出现在指定的存储帐户中,您可以简单地利用 Azure 文件共享的系统将数据无缝上传到其中(比如可能使用 azcopy 从您的本地计算机或现有的 share/container).
一段时间以来,我一直在尝试为 Azure
上的 TensorFlow Object Detection API 设置 分布式 训练。我对如何将我的数据准确地设置到作业中有点困惑。
以前,我曾经使用 AI-Platform 在 gcloud
上轻松完成这项工作。我只需要:
gcloud ai-platform jobs submit training $JOB_NAME \
--runtime-version $VERSION \
--job-dir=$JOB_DIR \
--packages $OBJ_DET,$SLIM,$PYCOCOTOOLS \
--module-name object_detection.model_main \
--region us-central1 \
--config $CONF/config.yaml \
-- \
--model_dir=$MODEL_DIR \
--pipeline_config_path=$PIPELINE_PATH
其中config.yaml包含集群配置,JOB_DIR、MODEL_DIR、PIPELINE_PATH均指向各自的bucket存储位置(gs://*)。我的训练数据过去也存储在存储桶中,位置在我的 pipeline.config.
中指定现在在 Azure 上,我似乎没有直接的方法可以 运行 分布式训练作业。我已经使用 AKS 部署了一个 GPU 加速的 Kubernetes 集群,然后安装了 NVIDIA 驱动程序。我还部署了 Kubeflow,并对对象检测进行了 docker 化 API.
我的数据以 tfrecords 的形式存在于 Azure blob 存储容器中。我正在查看的 Kubeflow examples/documentation (TFJob, AzureEndtoEnd) 分配持久卷,这看起来不错,但我不明白我的 job/training-code 将如何访问我的 tfrecords。
(我一直想知道是否可以在 Azure 端到端管道的 preprocessing part 中做一些事情;在那里我可以编写一些 python 代码行来使用azure-storage-blob
python 库。这仍然是推测,我还没有尝试过。)
因此,如果您对这个难题有任何帮助,我们将不胜感激。如果有人指出任何有用的最新资源,我也将不胜感激。这是我看过的其他两个资源:
-
这似乎是一个很好的例子,但其中的某些部分已经过时了。 tf/k8s 不再存在,已移至 kubeflow;因此,舵图也不可用。
https://github.com/kubeflow/examples/tree/master/object_detection
这是来自 Kubeflow 存储库的直接示例,但它似乎也已过时。好像是依赖ksonnet,已经停产
好吧,我自己解决了这个问题。事实证明,您可以在 storage class
之上定义 persistent volume claim
。存储class可以指定为Azure File Share,这样就方便多了。
sc.yaml:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: <NAME>
provisioner: kubernetes.io/azure-file
mountOptions:
- dir_mode=0777
- file_mode=0777
- uid=0
- gid=0
- mfsymlinks
- cache=strict
parameters:
storageAccount: <STORAGE_ACC_NAME>
pvc.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: <NAME>
spec:
accessModes:
- ReadWriteMany
storageClassName: <NAME>
resources:
requests:
storage: 20Gi
然后可以通过以下方式创建和声明持久卷:
kubectl apply -f sc.yaml
kubectl apply -f pvc.yaml
在此之后,一个共享出现在指定的存储帐户中,您可以简单地利用 Azure 文件共享的系统将数据无缝上传到其中(比如可能使用 azcopy 从您的本地计算机或现有的 share/container).