标签: gcp-ai-platform-training

如何让 Google Cloud AI Platform 在训练期间检测 `tf.summary.scalar` 调用?

(注意:我也在这里问过这个问题)

问题

我一直在尝试让 Google Cloud 的 AI 平台显示在 AI 平台上训练的 Keras 模型的准确性。我配置了超参数调整,hptuning_config.yaml它工作正常。但是,我无法让 AI 平台tf.summary.scalar在训练期间接听电话。

文档

我一直在关注以下文档页面:

1.超参数调优概述

2.使用超参数调优

根据[1]

AI Platform Training 如何获取您的指标 您可能会注意到,本文档中没有关于将您的超参数指标传递给 AI Platform Training 训练服务的说明。这是因为该服务会监控由您的训练应用程序生成的 TensorFlow 摘要事件并检索指标。”

根据[2],生成此类 Tensorflow 摘要事件的一种方法是创建一个回调类,如下所示:

class MyMetricCallback(tf.keras.callbacks.Callback):

    def on_epoch_end(self, epoch, logs=None):
        tf.summary.scalar('metric1', logs['RootMeanSquaredError'], epoch)
Run Code Online (Sandbox Code Playgroud)

我的代码

所以在我的代码中我包括:

# hptuning_config.yaml

trainingInput:
  hyperparameters:
    goal: MAXIMIZE
    maxTrials: 4
    maxParallelTrials: 2
    hyperparameterMetricTag: val_accuracy
    params:
    - parameterName: learning_rate
      type: DOUBLE
      minValue: 0.001
      maxValue: 0.01
      scaleType: UNIT_LOG_SCALE …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform keras tensorflow google-cloud-ml gcp-ai-platform-training

7
推荐指数
1
解决办法
356
查看次数

如何在 AI Platform 上的自定义 Docker 映像中挂载 GCS 存储桶?

我正在使用 Google 的 AI 平台使用自定义 Docker 映像训练机器学习模型。要在不修改的情况下运行现有代码,我想在容器内安装一个 GCS 存储桶。

我认为实现这一点的一种方法是安装gcloud到身份验证并gcsfuse安装在容器中。我的 Dockerfile 看起来像这样:

FROM nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04

WORKDIR /root

# Install system packages.
RUN apt-get update
RUN apt-get install -y curl
# ...

# Install gcsfuse.
RUN echo "deb http://packages.cloud.google.com/apt gcsfuse-bionic main" | tee /etc/apt/sources.list.d/gcsfuse.list
RUN curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
RUN apt-get update
RUN apt-get install -y gcsfuse

# Install gcloud.
RUN apt-get install -y apt-transport-https
RUN apt-get install -y ca-certificates
RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform gcsfuse nvidia-docker ubuntu-18.04 gcp-ai-platform-training

5
推荐指数
1
解决办法
3363
查看次数

gcloud 项目所有者权限被拒绝

所以我试图在谷歌云的人工智能平台上运行一个训练作业,用于通过命令行用张量流编写的图像分类器:

gcloud ai-platform jobs submit training my_job \
          --module-name trainer.final_task \
          --staging-bucket gs://project_bucket \
          --package-path trainer/ \
Run Code Online (Sandbox Code Playgroud)

但我不断收到错误:(gcloud.ai-platform.jobs.submit.training) User [myemail@gmail.com] does not have permission to access project [my_project] (or it may not exist): Permission denied on 'locations/value' (or it may not exist).

我不明白这是怎么可能的,因为我在 gcloud 上拥有该项目(使用该电子邮件地址),甚至在 IAM 策略绑定上明确链接到它。有谁之前经历过这个吗?

额外信息:

  • 我以个人身份使用 gcloud,不涉及任何组织。因此,IAM 策略绑定中链接的唯一成员是我和 gcloud 服务帐户。

  • gcloud ai-platform local train当使用相同参数进行本地训练(使用 )时,该代码可以完美运行。

google-cloud-platform gcloud google-cloud-iam gcp-ai-platform-training

5
推荐指数
1
解决办法
5429
查看次数

GCP AI Platform 作业卡住了

我正在 AI Platform 上运行一个作业,它运行了一个多小时,没有任何进展、没有结果、没有日志(只有少数日志显示它正在运行)

这是我使用的地区、机器类型和 gpu:

  "region": "us-central1",
  "runtimeVersion": "2.2",
  "pythonVersion": "3.7",
  "masterConfig": {
    "acceleratorConfig": {
      "count": "8",
      "type": "NVIDIA_TESLA_K80"
    }
  }
Run Code Online (Sandbox Code Playgroud)

AI Platform 工作 AI Platform 工作

这项工作只有少数日志 这项工作只有少数日志

我正在训练的模型很大并且使用了大量内存。这项工作只是挂在那里,没有任何进展、日志或错误。但我注意到它在 GCP 上消耗了 12.81 ML 单位。通常,如果 GPU 内存不足,它会抛出“OOM/resourceExhausted 错误”。没有日志,我不知道那里出了什么问题。

我用较小的输入尺寸运行了不同的工作,它在 12 分钟内成功完成:

成功的工作 成功的工作

此外,我将 tf.MirroredStrategy 用于训练过程,以便它可以跨 GPU 分布。

对此有何想法?

google-cloud-platform tensorflow tensorflow2.0 gcp-ai-platform-training google-ai-platform

5
推荐指数
0
解决办法
190
查看次数

Tensorflow - 解释 tf.estimator.ProfilerHook“_Send”操作

我有一个在 Google AI 平台上训练的深度 CNN/RNN。我使用tf.distribute.MirroredStrategy. 我最近将运行时版本从 1.13 升级到 1.15,我的训练速度比以前慢了 2 倍多。我读到tf.estimator.ProfilerHook可以用来识别性能瓶颈。因此,我收集了分析信息并将其呈现在chrome://tracing. 我懂了

分析截图

训练步骤在这些操作上花费整整 1 秒_Send。这是什么?我找不到有关该操作的任何文档,也找不到它为什么出现在我的图表中。这是什么意思?

tensorflow google-cloud-ml gcp-ai-platform-training

5
推荐指数
0
解决办法
141
查看次数

使用对象检测 api 进行的训练未在 AI Platform 中的 GPU 上运行

我正在尝试在 Tensorflow 2 对象检测 api 中运行一些模型的训练。

我正在使用这个命令:

gcloud ai-platform jobs submit training segmentation_maskrcnn_`date +%m_%d_%Y_%H_%M_%S` \
    --runtime-version 2.1 \
    --python-version 3.7 \
    --job-dir=gs://${MODEL_DIR} \
    --package-path ./object_detection \
    --module-name object_detection.model_main_tf2 \
    --region us-central1 \
    --scale-tier CUSTOM \
    --master-machine-type n1-highcpu-32 \
    --master-accelerator count=4,type=nvidia-tesla-p100 \
    -- \
    --model_dir=gs://${MODEL_DIR} \
    --pipeline_config_path=gs://${PIPELINE_CONFIG_PATH}
Run Code Online (Sandbox Code Playgroud)

训练作业已成功提交,但当我在 AI 平台上查看提交的作业时,我发现它没有使用 GPU! 在此输入图像描述

另外,在查看我的训练作业日志时,我注意到在某些情况下它无法打开 cuda。它会这样说:

Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda/extras/CUPTI/lib64:/usr/local/cuda/lib64:/usr/local/nvidia/lib64
Run Code Online (Sandbox Code Playgroud)

几个月前我正在使用 AI 平台进行训练,并且很成功。不知道现在有什么变化!事实上,对于我自己的设置来说,没有任何改变。

作为记录,我现在正在训练 Mask RCNN。几个月前,我训练了 Faster RCNN …

object-detection tensorflow object-detection-api gcp-ai-platform-training google-ai-platform

5
推荐指数
1
解决办法
399
查看次数

有没有办法在不轮询 REST API 的情况下收到 Google AI Platform 训练作业中状态变化的通知?

现在,我通过轮询作业 REST API 来监控我在 Google AI Platform(以前称为 ml 引擎)上提交的作业。我不喜欢这个解决方案有几个原因:

  1. 如果状态更改之间的间隔小于监视轮询率,则状态更改的感知通常会延迟或完全错过
  2. 大量不必要的网络流量
  3. 大量不必要的函数调用

我希望在我的培训工作完成后立即收到通知。如果有某种方法可以在作业状态更改时分配挂钩或回调以运行,那就太好了。

我还考虑过在 AI Platform 上运行的训练任务 python 包中直接添加对云函数的调用。但是,我认为这些函数调用不会发生在训练作业意外关闭的情况下,例如当作业被 GCP 取消或强制结束时。

有没有更好的方法来解决这个问题?

google-cloud-platform google-cloud-ml gcp-ai-platform-training

2
推荐指数
1
解决办法
468
查看次数

如何在 Google Cloud AI Platform 中使用 Base64 服务 Tensorflow2 图像分割模型

我可以使用以下代码成功保存 TF2 图像分割模型并将其部署到 AI Platform:

@tf.function(input_signature=[tf.TensorSpec(shape=(None), dtype=tf.string)])
def serving(input_image):

    # Convert bytes of jpeg input to float32 tensor for model
    def _input_to_feature(image_bytes):
        img = tf.image.decode_jpeg(image_bytes, channels=3)
        img = tf.image.convert_image_dtype(img, tf.float32) / 255.0
        img = tf.image.resize_with_pad(img, 256, 256)
        return img
    img = tf.map_fn(_input_to_feature, input_image, dtype=tf.float32)

    # Predict
    pred = model(img)

    def _pred_to_image(pred):
        pred = tf.cast(pred * 255, dtype=tf.uint8)

        img_str = tf.image.encode_png(pred, compression=-1, name=None)
        return img_str

    img_str = tf.map_fn(_pred_to_image, pred, dtype=tf.string)

    return img_str


tf.saved_model.save(model, export_dir=checkpoint_dir+'/saved_model', signatures=serving)
Run Code Online (Sandbox Code Playgroud)

但是,我在发送这样的请求时收到此错误:

img_str = base64.b64encode(open('sample_372.jpg', "rb").read()).decode()
response …
Run Code Online (Sandbox Code Playgroud)

google-cloud-platform tensorflow-serving tensorflow2.0 gcp-ai-platform-training

1
推荐指数
1
解决办法
476
查看次数