我正在尝试将我的项目上传到google cloud ml-engine进行培训。我遵循了“入门”指南,用相应的地方替换了我自己的文件。
我设法使用
进行本地培训gcloud ml-engine local train --module-name="my-model.task" --package-path=my-model/ -- ./my_model/model_params_google.json
是的,我在模块名称中有破折号:(。我还创建了一个符号链接my_module -> my-module
,以便我可以使用带下划线而不是破折号的名称。无论如何,我不认为这是问题,因为上面的命令在本地运行良好。
我的文件夹结构不符合推荐的文件夹结构,因为我在考虑ml-engine之前就有了这个项目。它看起来像这样:
my-model/
├── __init__.py
├── setup.py
├── task.py
├── model_params_google.json
├── src
│ ├── __init__.py
│ ├── data_handler.py
│ ├── elastic_helpers.py
│ ├── model.py
问题是src
文件夹没有打包/上传代码,因此在云端,当我在from .src.model import model_fn
中说task.py
时,它会失败。
我用于打包的命令是(在文件夹my-model/../
中):
gcloud ml-engine jobs submit training my_model_$(date +"%Y%m%d_%H%M%S") \
--staging-bucket gs://model-data \
--job-dir $OUTPUT_PATH \
--module-name="my_model.task" \
--package-path=my_model/ \
--region=$REGION \
--config config.yaml --runtime-version 1.8 \
-- \
tf_crnn/model_params_google.json --verbosity DEBUG
它打包my-model.0.0.0.tar.gz
而不包含my-model/src
的内容。我无法弄清楚为什么。我正在使用示例setup.py
:
from setuptools import find_packages
from setuptools import setup
REQUIRED_PACKAGES = ['tensorflow>=1.8']
setup(
name='my_model',
version='0.1',
install_requires=REQUIRED_PACKAGES,
packages=find_packages(),
include_package_data=True,
description='my first model'
)
所以,问题是,gcloud
为什么不打包src
文件夹?
答案 0 :(得分:2)
您需要将setup.py放在my-model
上方的目录中。
您可以通过调用以下方式检查结果:
python setup.py sdist
然后取消dist
目录中的tarball。按原样,您会看到task.py
未包含在tarball中。
通过将setup.py
一个目录移到更高位置并重复,您会看到包含task.py
,就像src中的所有内容一样。