(注意:我也在这里问过这个问题)
我一直在尝试让 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
我正在使用 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
所以我试图在谷歌云的人工智能平台上运行一个训练作业,用于通过命令行用张量流编写的图像分类器:
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
我正在 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 工作
这项工作只有少数日志
我正在训练的模型很大并且使用了大量内存。这项工作只是挂在那里,没有任何进展、日志或错误。但我注意到它在 GCP 上消耗了 12.81 ML 单位。通常,如果 GPU 内存不足,它会抛出“OOM/resourceExhausted 错误”。没有日志,我不知道那里出了什么问题。
我用较小的输入尺寸运行了不同的工作,它在 12 分钟内成功完成:
成功的工作
此外,我将 tf.MirroredStrategy 用于训练过程,以便它可以跨 GPU 分布。
对此有何想法?
google-cloud-platform tensorflow tensorflow2.0 gcp-ai-platform-training google-ai-platform
我有一个在 Google AI 平台上训练的深度 CNN/RNN。我使用tf.distribute.MirroredStrategy
. 我最近将运行时版本从 1.13 升级到 1.15,我的训练速度比以前慢了 2 倍多。我读到tf.estimator.ProfilerHook
可以用来识别性能瓶颈。因此,我收集了分析信息并将其呈现在chrome://tracing
. 我懂了
训练步骤在这些操作上花费整整 1 秒_Send
。这是什么?我找不到有关该操作的任何文档,也找不到它为什么出现在我的图表中。这是什么意思?
我正在尝试在 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
现在,我通过轮询作业 REST API 来监控我在 Google AI Platform(以前称为 ml 引擎)上提交的作业。我不喜欢这个解决方案有几个原因:
我希望在我的培训工作完成后立即收到通知。如果有某种方法可以在作业状态更改时分配挂钩或回调以运行,那就太好了。
我还考虑过在 AI Platform 上运行的训练任务 python 包中直接添加对云函数的调用。但是,我认为这些函数调用不会发生在训练作业意外关闭的情况下,例如当作业被 GCP 取消或强制结束时。
有没有更好的方法来解决这个问题?
google-cloud-platform google-cloud-ml gcp-ai-platform-training
我可以使用以下代码成功保存 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