问题标签 [google-ai-platform]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
google-ai-platform - 脚本 rio 安装在 '/root/.local/bin' 中,它不在 PATH 上
我在使用“gcloud ai-platform jobs submit training”在 Google AI Platform 中训练模型时得到了这种温暖。我的理解是路径在此处无关紧要,因为安装发生在云中。谢谢您的帮助。
python - 预测失败:检查输入时出错:预期dense_input 具有形状(2898,)但得到的数组具有形状(1,)
我正在使用以下脚本 predictor.py 以便从托管在 GCP AI Platform 中的 Keras 模型中获取预测。
但是我得到
问题似乎是由于我在尝试进行实际预测时输入数据的维度,在行输出 = self._model.predict([vectors]) 中。该模型需要一个形状为 (2898, ) 的向量
我觉得这很奇怪......因为当我打印矢量的形状和尺寸时,我得到以下信息
所以尺寸和形状都很好,它应该真的可以工作......
此外,我进行了测试以获取本地存储的模型的预测并且它工作正常。这是测试文件:
authentication - Google AI Predict API:网站匿名身份验证
阅读完这些问答后,
我仍然不知道如何为不需要任何登录或 OAuth 屏幕的 AI Platform Predict API 启用简单身份验证。
我的场景如下:我们有一个静态网站,允许用户输入一些数据,网站(客户端)通过 API 将数据发送到模型进行预测,当结果返回时,网站将它们显示给用户。我们不希望用户必须以任何方式登录或表明自己的身份。只需输入一些数据,按下按钮,即可获得结果。
但是,就我所能搜索的而言,没有办法做到这一点(在我看来,关于身份验证的文档令人困惑,有多个重叠的文章,很难确定在特定情况下适用什么);您必须使用某种 OAuth 使用户使用 Google 帐户登录。
真的没有办法让网站本身经过身份验证,而不是对个人用户进行身份验证吗?例如,使用 API 密钥或服务帐户密钥?
如果 OAuth 是唯一的方法,那是否意味着想要使用该网站的用户必须拥有 Google 帐户?以及如何启用它:我应该创建一个 OAuth 客户端 ID,还是它是 OAuth 同意屏幕?
keras - 提前停止的 Keras 训练:当数据分布时它是如何工作的?
在 Keras (TF 2.4.1) 中,我正在 Google AI Platform 上训练模型。该作业在具有 1 个 master 和 1 个 worker 的集群上运行。每种机器类型都是complex_model_m_gpu,包括四个 NVIDIA Tesla K80 GPU。我的工作配置为根据我在每个时期计算的指标 (recall@k) 提前停止。当我在训练完成后查看日志时,我可以看到我的指标在每个时期被计算两次,并且随后的测试以确定指标是否有所改进是在“平行轨道”上进行的,每个轨道不知道另一个。例如,在 epoch 1 我得到两个数字:0.13306 和 0.12903。稍后在 epoch 3,我得到 0.17 和 0.11;0.17 与 0.13306 和 0.11 与 0.12903 进行比较(见下图,从下到上阅读)
为什么是两个数字?这就像 master 和 worker 分别计算指标一样。有没有办法只获得全局度量并仅确定这个全局数字的改进?
顺便说一句,当我在 Tensorboard 中查看我的标量图时,我的图是混乱的。是因为我在具有多个设备的机器上的每个时期都得到多个数字吗?
编辑:我在一台机器(1 台主机,没有工人)上尝试了同样的方法,这次我只看到一个数字,我的张量板图不再混乱。我刚刚意识到 master 和 worker 配置可能需要在我的代码中有所不同(一个 tf.distribute.MultiWorkerMirroredStrategy 而不是 MirroredStrategy)。我必须对此进行调查。参考:https ://www.tensorflow.org/tutorials/distribute/multi_worker_with_keras
google-ai-platform - GCP AI Platform Pipelines - KFP - 使用托管存储 - cloudsqlproxy 问题
我在使用“使用托管存储”设置 GCP AI Platform Pipelines - Kubeflow Pipelines v1.4.1 时遇到问题 没有任何配置不允许我(KFP 服务上的错误)使用“使用托管存储”,但让我们专注于描述的特定一个以下。
我的设置是:
- 自定义网络/子网中版本为“1.17.15-gke.800”的专用集群并启用工作负载身份
- 与 GKE 相同的自定义网络/子网中的私有 mysql 8.0
- 地面站
- “使用托管存储”,其中指定了所有必需的信息:GCS 名称、数据库的连接名称、用户、密码和数据库前缀
- 使用的工作负载身份(为了简化所有 KSA(K8s 服务帐户)被映射到具有所有者角色的单个 Google 服务帐户)
请注意,在没有选项“使用托管存储”的情况下,使用 GKE 和 KFP 进行设置可以正常工作,但如果使用“使用托管存储”,它会失败:
- 毫升管道:
- 地位:
- Pod 错误:CrashLoopBackOff
- 没有最低可用性
- 日志:
- 元数据-grpc-部署:
- 地位:
- Pod 错误:CrashLoopBackOff
- 没有最低可用性
- 日志:
- cloudsqlproxy & mysql(相同的日志):
- 状态:好的
- 日志:
cloudsqlproxy 服务/pod 中似乎存在问题,无法建立与数据库的连接。这是此功能中的错误还是配置错误?
gcloud - 如何访问 google ai 平台(统一)上的模型工件?
我希望能够从模型中加载数据,但不必使用构建模型的容器交付数据文件,我使用该命令将模型上传到平台:
因此,如果在:gs://BUCKET_NAME/DIR_WHERE_DATA_IS 中存在一个名为 foo.bar 的文件,我希望我能够从 docker 构建的代码中读取它,就好像它是本地的一样,对吗?因为在尝试部署模型时,我找不到那些文件(比如:gs://BUCKET_NAME/DIR_WHERE_DATA_IS 中的“foo.bar”)
google-cloud-platform - 协调工作流程的更便宜的替代方案
我目前正在将 ML 模型投入生产,并正在研究应该依靠哪种工具来协调整个过程:
- 从 BQ 获取数据。
- 做一些特征工程和通用数据预处理
- 创建训练/测试拆分。
- 以 .csv 格式转储数据(在 gs 存储桶中)
- 开始训练作业并保存模型工件
在单独的阶段模型将用于:
- 从取自 BQ 表的输入中检索批量预测。
- 在不同的 BQ 表中插入上面计算的预测。
现在,我完全明白,编排这样的工作流程将是 Cloud Composer 的最佳选择,但该项目是针对非营利组织的,每月 381 欧元的定价对他们来说并非微不足道。
因此,我不得不考虑以下选项:
将所有内容打包到训练任务中
一种选择可能是不通过将所有内容打包到 AI 平台培训任务中来分解培训工作流程。
使用 Cloud Functions 启动/停止 Composer
我在想一些事情:
- 使用 Cloud Function 启动 Composer 实例
- 找到从另一个云功能启动 Airflow 工作流程的方法
- 工作流结束后发送发布/订阅消息
- 使用前面提到的 pub/sub 消息来触发另一个云函数,它将停止 Composer 实例。
在小型 VM 中自托管 Airflow
这显然需要更多的研究才能让它发挥作用。特别是因为我不知道如何在 Nginx 中实现 oauth。
将所有内容 Dockerize 并使用 CloudRun 进行培训
这可能看起来像:
- 在 Docker 容器中打包训练作业(具有不同的训练/服务任务入口点)
- 使用 Cloud Scheduler(或 Cloud Function,我仍然需要考虑这个)触发 Cloudrun 并执行所有需要的任务。
AFAIK Cloudrun 在运行时仍然有 15 分钟的硬上限,所以这个选项毕竟可能不可行......
我应该如何解决这个问题?我不确定我是否忽略了比上面列出的选项更简单的东西。
python - 预测失败:sklearn 预测期间出现异常:“HistGradientBoostingClassifier”对象没有属性“n_features_”
我试图在我部署在 Google Cloud AI Platform 上的模型上的云函数中调用 predict 方法,我收到这个错误,告诉我HistGradientBoostingClassifier
没有属性n_features_
。
我看到,当HistGradientBoostingClassifier
在 gradient_boosting.py 的第 1100 行调用predict(self, X)
它然后调用的方法self.predict_proba(X)
(第 1114 行),该方法调用_raw_predict
(第 1130 行)并在此函数内self.n_features_
被访问(第 646 行)。_n_features
在训练数据集 X 的拟合方法中的第 143 行BaseHistGradientBoosting
分配HistGradientBoostingClassifier
.
我通过 python API 调用 predict 方法:service.projects().predict(name=name, body={'instances': instances}).execute()
HistGradientBoostingClassifier 不会有这个属性,或者我的训练集有问题,以至于当我第一次创建模型和版本时它没有被传递到 fit 方法中:
ml.projects().models().create(parent=project_id_model, body=model_request_dict).execute()ml.projects().models().versions().create(parent=project_id_version, body=version_request_dict).execute()?
这是云函数日志中的完整错误:
发送请求的完整云功能:
创建/部署模型/版本的云功能:
google-cloud-platform - 如何在统一云 AI 平台上创建用于分布式训练的 config.yaml 文件
我希望使用 Google Cloud 的新服务 - 统一 AI 平台来训练模型。为此,我使用config.yaml
如下所示:
但是对于分布式训练,我无法理解如何workerPoolSpec
在这个文件中传递多个 s。提供的示例yaml 文件没有考虑我可以提供多个workerPoolSpec
s 的情况。
该示例的文档还说“您可以指定多个工作程序池规范以创建具有多个工作程序池的自定义作业”。
在这方面的任何帮助将不胜感激。