gcloud ml-engine local predict RuntimeError:.pyc文件中的错误幻数

时间:2018-02-16 10:09:45

标签: python tensorflow google-cloud-platform gcloud google-cloud-ml

我的目标是对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**

6 个答案:

答案 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一起使用,至少在我的配置中是这样。解决:

  1. 使用python 2安装anaconda虚拟环境(在我的情况下为2.7.14)
  2. 激活环境
  3. 再次执行gcloud命令
  4. 如果您的导出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