我的目标是对Google cloud ml引擎进行预测。
我在{0}之后的linux ubuntu 16.04LT上安装了gcloud sdk。 我已经有一台机器学习训练模型。 我使用python版本anaconda python 3.5。
我跑:
gcloud ml-engine local predict --model-dir={MY_MODEL_DIR} --json-instances={MY_INPUT_JSON_INSTANCE}
我收到了消息:错误:
(gcloud.ml-engine.local.predict)RuntimeError:.pyc文件中的错误幻数
以下是所有堆栈跟踪:
DEBUG: (gcloud.ml-engine.local.predict) RuntimeError: Bad magic number in .pyc file
Traceback (most recent call last):
File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/calliope/cli.py", line 797, in Execute
resources = calliope_command.Run(cli=self, args=args)
File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/calliope/backend.py", line 757, in Run
resources = command_instance.Run(args)
File "/usr/lib/google-cloud-sdk/lib/surface/ml_engine/local/predict.py", line 65, in Run
args.text_instances)
File "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/command_lib/ml_engine/local_utils.py", line 89, in RunPredict
raise LocalPredictRuntimeError(err)
LocalPredictRuntimeError: RuntimeError: Bad magic number in .pyc file
ERROR: (gcloud.ml-engine.local.predict) RuntimeError: Bad magic number in .pyc file
Evaluation ended**
答案 0 :(得分:14)
实际上它适用于python3,你只需要删除google云文件夹中的pyc文件,这样预测调用就可以用python3编译它们。
要知道pyc文件的位置,我确实在预测调用中启用了标志 - verbosity debug :
gcloud ml-engine local predict --model-dir=${MODEL_LOCATION} --json-instances=data/new-data2.json --verbosity debug
引用将为您提供有关gcloud ml引擎文件路径的信息,在我的机器中是:
/usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/command_lib/ml_engine/
转到该目录并删除pyc文件。
答案 1 :(得分:6)
事实上,我自己发布这个问题是为了帮助有同样问题的人,因为我找不到简单明了的答案。
在我看来还有其他解决方案比我的更好,但这就是为我解决的问题。
我的解决方案是google cloud sdk不能与python 3一起使用,至少在我的配置中是这样。解决:
如果您的导出ml模型和输入正常,则可以正常工作。
简单的问题,但给我带来了很多痛苦,只是因为我无法轻易找到这个预先要求,或者我只是错过了它。
我希望能帮助别人。
答案 2 :(得分:0)
查找并删除google SDK中的所有pyc文件。它们是在错误的python环境下编译的。下次需要它们时,它们会自动重新编译。
%%bash
find "/tools/google-cloud-sdk/lib/" -name '*.pyc' -delete
答案 3 :(得分:0)
以下是在Ubuntu中解决此问题的步骤:
1。导航到ml_engine路径
cd / usr / lib / google-cloud-sdk / lib / googlecloudsdk / command_lib / ml_engine
2。删除以.pyc结尾的文件
sudo rm -rf * .pyc
答案 4 :(得分:0)
在Notebook中运行以下单元格:
%%bash
sudo find "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/command_lib/ml_engine" -name '*.pyc' -delete
答案 5 :(得分:0)
上述技巧有效,但我发现了另一个似乎是永久性的选项,即将GCP SDK与python 3结合使用。
例如,使用anaconda创建python 3 env或使用现有的python 3安装。
创建文件gcp-sdk.yaml:
let obj = {
0: [{
"id": "1",
"parentId": "root",
"path": "root",
"children": [{
"id": "2",
"parentId": "1",
"path": "1/2",
"children": [{
"id": "4",
"parentId": "2",
"path": "2/4"
}]
}, {
"id": "3",
"parentId": "1",
"path": "1/3"
}]
}]
};
console.log(getRoute(obj[0][0], true)); // Identify root
function getRoute(node, isRoot) {
return node != null
? (isRoot
? (node.path + '/')
: ''
) + node.id + (node.children
? '/' + getRoute(node.children[0], false)
: '')
: '';
}
然后创建环境:
name: env_gcp_sdk
channels:
- defaults
- conda-forge
dependencies:
# core packages
- python=3.7.5
- pip=20.0.2
- pip:
- google-cloud-storage
- google-cloud-bigquery
- google-cloud-kms
- google-cloud-pubsub
现在设置以下偶数变量,就我而言,我不再需要删除* .pyc文件:
conda env create -f gcp-sdk.yaml