gcloud ml-engine local predict RuntimeError: Bad magic number in .pyc file
gcloud ml-engine local predict RuntimeError: Bad magic number in .pyc file
我的 objective 是在 google 云 ml 引擎上进行预测。
我在 Google instructions 之后的 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: Bad magic number in .pyc file
下面是所有堆栈跟踪:
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**
事实上我自己 post 这个问题是为了帮助有同样问题的人,因为我找不到一个简单简洁的答案。
还有其他解决方案,在我看来甚至比我的更好,但这就是为我解决的问题。
我的解决方案是 google cloud sdk 不适用于 python 3,至少在我的配置中是这样。求解:
- 安装 anaconda 虚拟环境 python 2(在我的例子中是 2.7.14)
- 激活环境
- 再次执行gcloud命令
如果您的导出 ml 模型和输入都正常,那将有效。
简单的问题,却给我造成了很大的痛苦,只是因为我无法轻易找到这个 pre-requirement 或者我只是错过了它。
希望对大家有帮助。
实际上它适用于python3,你只需要删除google个云文件夹中的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.Navigate 到 ml_engine 路径
cd /usr/lib/google-cloud-sdk/lib/googlecloudsdk/command_lib/ml_engine
2.Remove 个以 .pyc 结尾的文件
sudo rm -rf *.pyc
在笔记本中 运行 以下单元格:
%%bash
sudo find "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/command_lib/ml_engine" -name '*.pyc' -delete
上述技巧有效,但我发现了另一个似乎是永久性的选项,即使用 GCP SDK 和 python 3.
例如使用 anaconda 创建一个 python 3 env 或使用现有的 python 3 安装。
创建文件 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'
我的 objective 是在 google 云 ml 引擎上进行预测。
我在 Google instructions 之后的 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: Bad magic number in .pyc file
下面是所有堆栈跟踪:
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**
事实上我自己 post 这个问题是为了帮助有同样问题的人,因为我找不到一个简单简洁的答案。
还有其他解决方案,在我看来甚至比我的更好,但这就是为我解决的问题。
我的解决方案是 google cloud sdk 不适用于 python 3,至少在我的配置中是这样。求解:
- 安装 anaconda 虚拟环境 python 2(在我的例子中是 2.7.14)
- 激活环境
- 再次执行gcloud命令
如果您的导出 ml 模型和输入都正常,那将有效。
简单的问题,却给我造成了很大的痛苦,只是因为我无法轻易找到这个 pre-requirement 或者我只是错过了它。
希望对大家有帮助。
实际上它适用于python3,你只需要删除google个云文件夹中的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.Navigate 到 ml_engine 路径
cd /usr/lib/google-cloud-sdk/lib/googlecloudsdk/command_lib/ml_engine
2.Remove 个以 .pyc 结尾的文件
sudo rm -rf *.pyc
在笔记本中 运行 以下单元格:
%%bash
sudo find "/usr/lib/google-cloud-sdk/lib/googlecloudsdk/command_lib/ml_engine" -name '*.pyc' -delete
上述技巧有效,但我发现了另一个似乎是永久性的选项,即使用 GCP SDK 和 python 3.
例如使用 anaconda 创建一个 python 3 env 或使用现有的 python 3 安装。
创建文件 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'