开发者社区 > 大数据与机器学习 > 人工智能平台PAI > 正文

机器学习PAI中easyrec 代码断点单步调试都是用啥方法啊?

机器学习PAI中easyrec 代码断点单步调试都是用啥方法啊,我看后端使用tensorflow2.10的版本,代码中也还是被指向了 tf.compat.v1的api下面了,好像不能使用tensorflow2.x的 debug开关?

展开
收起
真的很搞笑 2024-08-14 15:48:52 52 0
7 条回答
写回答
取消 提交回答
  • 深耕大数据和人工智能

    在机器学习PAI中,EasyRec是一个基于TensorFlow的推荐系统框架。对于代码断点单步调试,您可以使用以下方法:

    使用Python的pdb库:在您想要设置断点的代码行前插入import pdb; pdb.set_trace(),然后运行代码。当代码执行到这一行时,它将进入交互式调试模式,允许您逐行执行代码、查看变量值等。

    使用IDE的调试功能:如果您使用的是集成开发环境(IDE),如PyCharm、Visual Studio Code等,它们通常都提供了调试功能。您可以在代码中设置断点,然后使用IDE的调试器逐步执行代码、查看变量值等。

    使用TensorBoard:EasyRec支持使用TensorBoard进行可视化和调试。您可以在训练过程中记录日志,然后在TensorBoard中查看模型结构、训练指标等信息。要使用TensorBoard,请确保在运行EasyRec时启用了日志记录功能,并使用tensorboard --logdir=命令启动TensorBoard。

    使用Jupyter Notebook:如果您更喜欢交互式编程环境,可以使用Jupyter Notebook来编写和调试EasyRec代码。在Jupyter Notebook中,您可以使用%debug魔法命令在代码执行出错时进入调试模式。

    请注意,这些方法可能在不同的环境和配置下有所不同。具体操作请参考相关文档和教程。

    2024-10-21 08:55:51
    赞同 展开评论 打赏
  • export -> create_estimator -> EasyRecModel EasyRecModel 内部需要加载load_class from easy_rec.python.utils.load_class import get_register_class_meta 先把kafka相关的代码注释掉再调试吧。此回答整理自钉群“【EasyRec】推荐算法交流群”

    ——参考链接

    2024-10-19 08:15:34
    赞同 展开评论 打赏
  • 在机器学习PAI中对easyrec代码进行断点单步调试时,可以采取以下方法:

    一、断点调试
    设置断点:在代码编辑器的侧栏点击相应行号,即可在该行设置断点。当程序运行到设置断点的位置时,会自动暂停执行,以便开发者进行调试。
    查看状态:在断点处,开发者可以查看当前变量的值、调用栈等信息,以便分析程序状态。
    二、单步调试
    单步执行:使用快捷键F11进行单步调试,程序会逐步执行每一行代码。这有助于开发者仔细检查每一步是否符合预期,例如检查循环是否越界、赋值是否正确等。
    逐过程调试:使用快捷键F10进行逐过程调试,程序会执行当前代码块并跳过函数内部的实现。这适用于在不关心函数内部实现细节时,快速查看函数调用的结果。
    三、注意事项
    环境兼容性:由于PAI后端可能使用特定版本的TensorFlow(如tensorflow2.10),且代码中可能使用了tf.compat.v1的API,因此在进行调试时需要注意API的兼容性。确保所使用的调试工具和方法与当前的开发环境相匹配。
    调试工具选择:根据所使用的开发环境和编辑器,选择合适的调试工具。例如,在PAI的交互式建模环境(如PAI-DSW)中,可以直接使用编辑器提供的调试功能进行断点单步调试。
    调试信息记录:在调试过程中,建议记录关键变量的值和程序状态的变化,以便在出现问题时能够快速定位和解决。
    综上所述,通过在机器学习PAI中对easyrec代码进行断点单步调试,开发者可以逐步检查程序的执行过程,分析并解决问题。同时,需要注意环境兼容性、选择合适的调试工具以及记录调试信息。

    2024-10-17 13:04:10
    赞同 展开评论 打赏
  • 在阿里云机器学习PAI中进行模型开发时,调试代码主要是通过阿里云PAI提供的可视化编程环境。由于PAI-Studio的后端使用了TensorFlow 2.x,但可能在某些地方仍指向了tf.compat.v1模块,这是因为TensorFlow 2.x为保持向后兼容,部分旧代码可能仍引用了v1的API。
    在TensorFlow 2.x中,虽然默认的eager execution模式使得交互式调试更为方便,但直接的断点调试功能(如tfdbg模块)在tf.compat.v1下可能不可用。然而您仍然可以通过其他方法进行调试:
    使用tf.print():在关键位置插入tf.print()语句来打印中间结果,了解代码执行流程。
    日志记录:利用TensorFlow的tf.debugging模块,如tf.debugging.set_log_device_placement(True),结合日志记录来追踪运行时的设备分配和计算图执行。
    第三方调试工具:考虑使用像TensorBoard这样的可视化工具来检查中间变量和模型结构。

    2024-10-15 11:20:25
    赞同 展开评论 打赏
  • 在阿里云的PAI平台中进行EasyRec的断点和单步调试时,通常有以下几种方法可以帮助调试代码,特别是当EasyRec的后端是基于TensorFlow 2.10,而很多代码仍然使用tf.compat.v1的API时:

    1. 使用Python自带的pdb调试

    pdb 是Python自带的调试器,可以帮助在代码中设置断点、查看变量、逐步执行代码。常用的方式是在需要调试的位置插入如下代码:

    import pdb; pdb.set_trace()
    

    当代码执行到这一行时,程序会暂停,进入调试模式,允许你查看变量状态和执行下一步。对于兼容tf.compat.v1的代码,这种调试方式是通用的。

    2. 使用tf.compat.v1tf_debug模块

    虽然TensorFlow 2.x版本中推荐使用tf.debugging模块,但由于你的代码中使用了tf.compat.v1,可以继续使用tf.compat.v1的调试工具。例如,tf.compat.v1中的tf_debug模块可以通过tf.compat.v1引入:

    from tensorflow.python import debug as tf_debug
    

    然后在创建Session时,使用带有tf_debugSession来调试:

    sess = tf_debug.LocalCLIDebugWrapperSession(tf.compat.v1.Session())
    

    这种方法对于调试tf.compat.v1下的图模式代码(即基于Session的执行模型)会非常有用。

    3. 使用远程调试工具,如PyCharm等IDE

    如果你使用的开发环境是PyCharm,可以配置远程调试。具体方法是:

    • 在你的本地机器上设置好调试端口。
    • 在代码中插入调试断点。
    • 通过ssh端口转发,将PAI中的进程端口映射到本地机器。
    • 运行PyCharm中的Remote Debug,使其可以连接到运行中的程序。

    这需要一定的网络配置和端口转发权限,但可以带来更友好的调试体验。

    4. 使用日志打印(logging)

    在一些场景下,特别是在PAI这种云端环境中调试,直接用断点可能不是最优选,使用日志打印来记录程序执行过程是更常用的调试方式。你可以通过print()函数或logging库来输出关键变量的值、形状、以及TensorFlow图的执行过程。

    例如:

    import logging
    logging.basicConfig(level=logging.INFO)
    
    logging.info("Current value of x: %s", x)
    

    5. TensorFlow 2.x的调试工具:tf.debuggingtf.function的eager模式

    虽然你提到代码使用了tf.compat.v1,但如果你有机会在某些部分切换到TensorFlow 2.x的API,可以利用其eager execution模式进行调试。TensorFlow 2.x默认是eager模式,这样在执行操作时会立即返回结果,更加接近Python原生的调试体验。

    但是,当你在tf.compat.v1模式下,这些功能会受到限制,所以需要注意这个切换。

    image.png

    2024-10-15 09:17:11
    赞同 展开评论 打赏
  • 技术浪潮涌向前,学习脚步永绵绵。

    在阿里云机器学习平台 PAI 中使用 EasyRec 进行代码断点单步调试时,确实会遇到一些挑战,特别是当代码使用的是 TensorFlow 1.x 兼容模式(tf.compat.v1)。虽然 TensorFlow 2.x 提供了一些新的调试工具和特性,但在兼容模式下,这些新特性可能无法直接使用。不过,你仍然可以使用一些传统的方法来进行调试。
    1111.png

    方法一:使用 tfdbg (TensorFlow Debugger)

    tfdbg 是 TensorFlow 1.x 中的一个强大的调试工具,可以帮助你在运行时检查张量的值、形状等信息。尽管 TensorFlow 2.x 引入了新的调试工具如 tf.debugging.experimental.enable_dump_debug_info,但 tfdbg 仍然可以在兼容模式下使用。

    步骤:

    1. 安装 tfdbg

      • 确保你的环境中已经安装了 tensorflowtensorflow-datasets
    2. 导入 tfdbg

      • 在你的代码中导入 tfdbg 模块:
        import tensorflow as tf
        from tensorflow.python import debug as tf_debug
        
    3. 设置调试器

      • 在创建 tf.Session 后,将 Session 包装在 tfdbg.LocalCLIDebugWrapperSession 中:
        sess = tf.compat.v1.Session()
        sess = tf_debug.LocalCLIDebugWrapperSession(sess)
        
    4. 运行调试会话

      • 使用调试会话来运行你的模型,并在需要的地方设置断点。
        # 假设你有一个训练循环
        for step in range(num_steps):
            _, loss_value = sess.run([train_op, loss])
            print(f"Step {step}: Loss = {loss_value}")
        
    5. 启动调试 CLI

      • 当调试会话运行到断点时,会自动启动一个命令行界面,你可以在这里查看张量的信息并进行调试。

    方法二:使用 Python 的内置调试器 pdb

    如果你只需要简单的断点和单步调试功能,可以使用 Python 的内置调试器 pdb

    步骤:

    1. 导入 pdb

      • 在你的代码中导入 pdb 模块:
        import pdb
        
    2. 设置断点

      • 在你需要设置断点的地方插入 pdb.set_trace()
        def train_model():
            # 你的训练代码
            ...
            pdb.set_trace()  # 设置断点
            ...
        
    3. 运行代码

      • 运行你的代码,当执行到 pdb.set_trace() 时,程序会暂停并进入调试模式。
        python your_script.py
        
    4. 使用调试命令

      • 在调试模式下,你可以使用以下命令进行调试:
        • n (next):执行下一行代码。
        • s (step):进入函数调用。
        • c (continue):继续执行直到下一个断点或结束。
        • p <variable>:打印变量的值。
        • l (list):列出当前代码段。
        • q (quit):退出调试模式。

    方法三:使用 VSCode 或其他 IDE 的调试功能

    如果你使用的是 Visual Studio Code (VSCode) 或其他支持调试的 IDE,可以利用它们的调试功能来进行断点调试。

    步骤:

    1. 配置 launch.json

      • 在 VSCode 中,按 F5 或点击侧边栏的“运行”图标,选择“创建 launch.json 文件”。
      • 选择适合你项目的调试配置模板(例如 Python)。
      • 编辑生成的 launch.json 文件,确保它指向正确的入口脚本。例如:

        {
          "version": "0.2.0",
          "configurations": [
            {
              "name": "Python: Current File",
              "type": "python",
              "request": "launch",
              "program": "${file}",
              "console": "integratedTerminal"
            }
          ]
        }
        
    2. 设置断点

      • 打开你要调试的源代码文件。
      • 将鼠标移到你想要设置断点的代码行左侧的行号区域,你会看到一个小红点出现。
      • 单击这个小红点,它会变成一个实心的红点,表示断点已经设置成功。
    3. 启动调试会话

      • F5 或点击侧边栏的“运行”图标,然后点击绿色的“开始调试”按钮。
      • 你的代码会在调试模式下运行,并且当执行到断点时,程序会暂停,你可以使用调试工具栏进行单步调试、查看变量等操作。

    总结

    • 使用 tfdbg:适用于需要详细检查张量信息的情况。
    • 使用 pdb:适用于简单的断点和单步调试。
    • 使用 IDE 调试功能:适用于更直观的调试体验,特别是对于大型项目。

    根据你的具体需求和环境,选择最适合的方法来进行调试。希望这些方法能帮助你在 EasyRec 项目中有效地进行断点单步调试。

    2024-10-14 17:58:03
    赞同 展开评论 打赏
  • 使用TensorFlow Debugger(tfdbg):

    由于EasyRec后端使用的是TensorFlow 2.10版本,可以利用TensorFlow自带的调试器tfdbg来进行调试。tfdbg是TensorFlow的专用调试器,允许在训练和推理期间查看运行中的TensorFlow图的内部结构和状态。由于TensorFlow的计算图模式,使用通用调试程序(如Python的pdb)很难完成调试。
    在代码中,可以通过包装Session对象来启用tfdbg。例如:
    python
    import tensorflow as tf
    from tensorflow.python import debug as tf_dbg

    with tf.Session() as sess:
    sess = tf_dbg.LocalCLIDebugWrapperSession(sess)

    # 运行代码
    

    在调试模式下,可以使用tfdbg提供的命令行界面(CLI)来执行调试命令,如run、pt(print tensor)等,来检查和修改图的内部状态。

    image.png
    参考文档https://help.aliyun.com/zh/pai/user-guide/tensorflow-processor?spm=a2c4g.11186623.0.i3

    2024-10-14 16:25:51
    赞同 展开评论 打赏
滑动查看更多

人工智能平台 PAI(Platform for AI,原机器学习平台PAI)是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务,内置140+种优化算法,具备丰富的行业场景插件,为用户提供低门槛、高性能的云原生AI工程化能力。

相关产品

  • 人工智能平台 PAI
  • 热门讨论

    热门文章

    相关电子书

    更多
    大规模机器学习在蚂蚁+阿里的应用 立即下载
    阿里巴巴机器学习平台AI 立即下载
    微博机器学习平台架构和实践 立即下载