如何为gcloud ml打包子文件夹?

时间:2018-06-18 14:42:28

标签: python packages google-cloud-ml

我正在尝试将我的项目上传到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-e​​ngine之前就有了这个项目。它看起来像这样:

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文件夹?

1 个答案:

答案 0 :(得分:2)

您需要将setup.py放在my-model上方的目录中。

您可以通过调用以下方式检查结果:

python setup.py sdist

然后取消dist目录中的tarball。按原样,您会看到task.py未包含在tarball中。

通过将setup.py一个目录移到更高位置并重复,您会看到包含task.py,就像src中的所有内容一样。