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

How to package sub-folder for gcloud ml?

我正在尝试将 我的 项目上传到 google 云 ml-engine 进行训练。我已按照 "getting started" 指南,在相关位置替换为我自己的文件。

我设法使用

在本地进行训练
gcloud ml-engine local train --module-name="my-model.task" --package-path=my-model/ -- ./my_model/model_params_google.json

是的,我在模块名称中有破折号:(。我还制作了一个符号 link 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 文件夹没有 packaged/uploaded 代码,所以在云端,当我在 task.py 中说 from .src.model import model_fn 时,它失败了。

我打包的命令是(在文件夹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文件夹呢?

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

您可以通过调用来检查您的结果:

python setup.py sdist

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

通过将 setup.py 向上移动一个目录并重复,您会看到 task.py 已包含在内,就像 src 中的所有内容一样。