版本迁移工具

    WARNING: 版本自动迁移工具并不能处理所有的情况,在使用本工具后,您仍然需要手工来进行检查并做相应的调整。

    版本迁移工具可以通过pip的方式安装,方式如下:

    paddle_upgrade_tool 可以使用下面的方式,快速使用:

    1. $ paddle_upgrade_tool --inpath /path/to/model.py

    这将在命令行中,以diff的形式,展示model.py从Paddle 1.x转换为Paddle 2.0的变化。如果您确认上述变化没有问题,只需要再执行:

    1. $ paddle_upgrade_tool --inpath /path/to/model.py --write

    就会原地改写model.py,将上述变化改写到您的源文件中。 注意:我们会默认备份源文件,到~/.paddle_upgrade_tool/下。

    参数说明如下:

    • –inpath 输入文件路径,可以为单个文件或文件夹。

    • –write 是否原地修改输入的文件,默认值False,表示不修改。如果为True,表示对文件进行原地修改。添加此参数也表示对文件进行原地修改。

    • –no-log-file 可选,是否需要输出日志文件,默认值为False,即输出日志文件。

    • –log-filepath 可选,输出日志的路径,默认值为report.log,输出日志文件的路径。

    • –no-confirm 可选,输入文件夹时,是否逐文件确认原地写入,只在--write为True时有效,默认值为False,表示需要逐文件确认。

    • –parallel 可选,控制转换文件的并发数,当 no-confirm 为True时不生效,默认值:None

    • –log-level 可选,log级别,可为[‘DEBUG’,‘INFO’,‘WARNING’,‘ERROR’] 默认值:INFO

    • –refactor 可选,debug时使用。

    • –print-match 可选,debug时使用。

    开始

    在使用paddle_upgrade_tool前,需要确保您已经安装了Paddle 2.0版本。

    1. print (paddle.__version__)
    1. 2.0.0
    1. Cloning into 'models'...
    2. remote: Enumerating objects: 8, done.
    3. remote: Counting objects: 100% (8/8), done.
    4. remote: Compressing objects: 100% (8/8), done.
    5. remote: Total 35011 (delta 1), reused 0 (delta 0), pack-reused 35003
    6. Resolving deltas: 100% (23291/23291), done.

    查看帮助文档

    您可以直接通过下面的方式,查看帮助文档。

    1. $ paddle_upgrade_tool -h
    1. usage: paddle_upgrade_tool [-h] [--log-level {DEBUG,INFO,WARNING,ERROR}]
    2. [--no-log-file] [--log-filepath LOG_FILEPATH] -i
    3. INPATH [-b [BACKUP]] [-w] [--no-confirm]
    4. [-p PARALLEL]
    5. [-r {refactor_import,norm_api_alias,args_to_kwargs,refactor_kwargs,api_rename,refactor_with,post_refactor}]
    6. [--print-match]
    7. optional arguments:
    8. -h, --help show this help message and exit
    9. --log-level {DEBUG,INFO,WARNING,ERROR}
    10. set log level, default is INFO
    11. --no-log-file don't log to file
    12. set log file path, default is "report.log"
    13. -i INPATH, --inpath INPATH
    14. the file or directory path you want to upgrade.
    15. backup directory, default is the
    16. "~/.paddle_upgrade_tool/".
    17. -w, --write modify files in-place.
    18. --no-confirm write files in-place without confirm, ignored without
    19. --write.
    20. -p PARALLEL, --parallel PARALLEL
    21. specify the maximum number of concurrent processes to
    22. use when refactoring, ignored with --no-confirm.
    23. -r {refactor_import,norm_api_alias,args_to_kwargs,refactor_kwargs,api_rename,refactor_with,post_refactor}, --refactor {refactor_import,norm_api_alias,args_to_kwargs,refactor_kwargs,api_rename,refactor_with,post_refactor}
    24. this is a debug option. Specify refactor you want to
    25. run. If none, all refactors will be run.
    26. --print-match this is a debug option. Print matched code and node
    27. for each file.

    Paddle 1.x的例子

    这里是一个基于Paddle 1.x实现的一个mnist分类,部分内容如下:

    1. $ head -n 198 models/dygraph/mnist/train.py | tail -n 20

    使用paddle_upgrade_tool进行转化

    paddle_upgrade_tool支持单文件的转化,您可以通过下方的命令直接转化单独的文件。

    1. $ paddle_upgrade_tool --inpath models/dygraph/mnist/train.py

    注意,对于参数的删除及一些特殊情况,我们都会打印WARNING信息,需要您仔细核对相关内容。 如果您觉得上述信息没有问题,可以直接对文件进行原地修改,方式如下:

    1. $ paddle_upgrade_tool --inpath models/dygraph/mnist/train.py --write

    此时,命令行会弹出下方的提示:

    1. "models/dygraph/mnist/train.py" will be modified in-place, and it has been backed up to "~/.paddle_upgrade_tool/train.py_backup_2020_09_09_20_35_15_037821". Do you want to continue? [Y/n]:

    输入y 后即开始执行代码迁移。为了高效完成迁移,我们这里采用了原地写入的方式。此外,为了防止特殊情况,我们会备份转换前的代码到 目录下,如果需要,您可以在备份目录下找到转换前的代码。

    代码迁移完成后,会生成一个report.log文件,记录了迁移的详情。内容如下:

    1. $ cat report.log

    完成迁移后,代码就从Paddle 1.x迁移到了Paddle 2.0,您就可以在Paddle 2.0下进行相关的开发。