Python gcloud ml引擎本地预测运行时错误:在.pyc文件中存在错误的幻数

Python gcloud ml引擎本地预测运行时错误:在.pyc文件中存在错误的幻数,python,tensorflow,google-cloud-platform,gcloud,google-cloud-ml,Python,Tensorflow,Google Cloud Platform,Gcloud,Google Cloud Ml,我的目标是在google cloud ml引擎上进行预测 我在linux ubuntu 16.04LT上安装了gcloud sdk,如下所示。 我已经有了一个经过机器学习训练的模型。 我正在使用python版本AnacondaPython 3.5 我运行: gcloud ml-engine local predict --model-dir={MY_MODEL_DIR} --json-instances={MY_INPUT_JSON_INSTANCE} 我收到消息:错误: (gcloud.ml

我的目标是在google cloud ml引擎上进行预测

我在linux ubuntu 16.04LT上安装了gcloud sdk,如下所示。 我已经有了一个经过机器学习训练的模型。 我正在使用python版本AnacondaPython 3.5

我运行:

gcloud ml-engine local predict --model-dir={MY_MODEL_DIR} --json-instances={MY_INPUT_JSON_INSTANCE}
我收到消息:错误:

(gcloud.ml engine.local.predict)运行时错误:.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**

事实上,我自己发布这个问题是为了帮助有同样问题的人,因为我找不到一个简单简洁的答案

还有其他的解决办法,在我看来甚至比我的更好,但这正是我所能解决的

我的解决方案是google cloud sdk不能与python 3配合使用,至少在我的配置中是这样。要解决:

  • 使用python 2安装anaconda虚拟环境(在我的例子中是2.7.14)
  • 激活环境
  • 再次执行gcloud命令
  • 如果您的导出ml模型和输入都正常,那么这将起作用

    这是一个简单的问题,但给我带来了很大的痛苦,仅仅是因为我无法轻松找到这个先决条件,或者我只是错过了它


    我希望能帮助一些人。

    实际上,它与python3一起工作,你只需要删除google cloud文件夹中的pyc文件,这样预测调用就可以用python3编译它们

    为了知道pyc文件的位置,我在预测调用中启用了标志--verbosity debug

    gcloud ml-engine local predict --model-dir=${MODEL_LOCATION} --json-instances=data/new-data2.json --verbosity debug
    
    trackback将为您提供有关gcloud ml引擎文件路径的信息,在我的计算机中:

    /usr/local/Caskroom/google-cloud-sdk/latest/google-cloud-sdk/lib/googlecloudsdk/command_lib/ml_engine/
    

    转到该目录并删除pyc文件。

    在google SDK中查找并删除所有pyc文件。它们是用错误的python环境编译的。下次需要时,它们将自动重新编译

    %%bash
    find "/tools/google-cloud-sdk/lib/" -name '*.pyc' -delete
    

    以下是在Ubuntu中修复此问题的步骤:

    1.导航到ml_引擎路径

    cd/usr/lib/googlecloudsdk/lib/googlecloudsdk/command_lib/ml_引擎

    2.删除以.pyc结尾的文件


    在笔记本电脑中运行以下单元格:

    %%bash
    sudo find "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/command_lib/ml_engine" -name '*.pyc' -delete
    

    上面的技巧是有效的,但我发现了另一个似乎是永久性的选项,那就是在Python3中使用GCPSDK

    例如,使用anaconda创建Python3环境,或者使用现有的Python3安装

    创建一个文件gcp-sdk.yaml:

    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
    
    然后创建环境:

    conda env create -f gcp-sdk.yaml 
    
    现在设置以下偶数变量,我不需要再删除*.pyc文件:

    os.environ['CLOUDSDK_PYTHON']='path_to_env/env_gcp_sdk/bin/python'
    os.environ['CLOUDSDK_GSUTIL_PYTHON']='path_to_env/env_gcp_sdk/bin/python'
    

    谢谢我被这条消息困扰了一段时间,在你的帮助下,我现在已经克服了它:)我使用Python3.6和虚拟环境。它工作得很好!非常感谢。有一个新命令:
    gcloud ai platform local predict--model dir=${model_LOCATION}--json instances=data/new-data.json--verbosity debug
    ,这可能会导致相同的行为和相同的解决方案应用。我认为,这个解决方案已被弃用。有人能证实吗?删除pyc文件的建议看起来更好,但这对我来说很有效