PAI Designer Python脚本V2组件使用异常临时解决方案

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
对象存储 OSS,20GB 3个月
交互式建模 PAI-DSW,每月250计算时 3个月
简介: PAI Designer(Studio 2.0)是基于云原生架构Pipeline Service(PAIFlow)的可视化建模工具, 提供可视化的机器学习开发环境,实现低门槛开发人工智能服务。同时,系统提供丰富且成熟的机器学习算法,覆盖商品推荐、金融风控及广告预测等场景,可以满足您不同方向的业务需求。PAI-Designer提供了自定义Python脚本的功能,您可以使用该组件运行自定义的Python函数,并且支持自定义安装依赖包。但是由于版本的更新Python脚本V2组件目前还有一些bug需要修复。本文为您演示使用Python脚本V2组件常见的一个异常及临时的处理方案,以供参考。

日志报错异常信息:TFJob dlc1qvkyrnwcpbxz is failed because 1 Worker replica(s) failed

1659685288009_904D42EE-7144-40b6-AADE-A976C63FCFEE.png

1.问题复现过程简单演示

  • 操作流程
  • DataWorks数据准备

    • 1.Dataworks中创建数据表

image.png


  • SQL脚本
create table if not exists bank_datapython
(
 age             BIGINT comment '年龄',
 job             STRING comment '工作类型',
 marital         STRING comment '婚否',
 education       STRING comment '教育程度',
 credit          STRING comment '是否有信用卡',
 housing         STRING comment '是否有房贷'

);

show tables;
INSERT into table bank_datapython values (18,"支持","否","高中","否","有");
select * from bank_datapython;
AI 代码解读

  • 配置读数据表组件

image.png


image.png


  • 配置Python脚本V2组件

image.png

  • main.py
import os
import argparse
import json
"""
Python V2 组件示例代码
"""
# 当前工作空间下的默认MaxCompute执行环境,包含MaxComputeProject的名称以及Endpoint.
# 需要当前的工作空间下有MaxCompute项目时,作业的执行环境才会注入。
# 示例: {"endpoint": "http://service.cn.maxcompute.aliyun-inc.com/api", "odpsProject": "lq_test_mc_project"}
ENV_JOB_MAX_COMPUTE_EXECUTION = "JOB_MAX_COMPUTE_EXECUTION"

def init_odps():
    """初始化一个ODPS实例,用于读写MaxCompute数据.

    具体API请参考PyODPS的文档: https://pyodps.readthedocs.io/
    """
    from odps import ODPS

    # 当前工作空间的默认MaxCompute项目信息.
    mc_execution = json.loads(os.environ[ENV_JOB_MAX_COMPUTE_EXECUTION])

    o = ODPS(
        access_id="XXXXXXXXX",
        secret_access_key="XXXXXXXXX",
        # 请根据Project所在的Region选择: https://help.aliyun.com/document_detail/34951.html
        endpoint=mc_execution["http://service.cn-shanghai.maxcompute.aliyun.com/api"],
        project=mc_execution["anPythonTest"],
    )
    return o

def parse_odps_url(table_uri):
    """解析输入的MaxCompute Table URI
    需要打开的MaxCompute表名,格式为odps://${your_projectname}/tables/${table_name}/${pt_1}/${pt_2}/
    示例:odps://test/tables/iris/pa=1/pb=1,其中pa=1/pb=1是一个多级partition。

    Returns:
        返回三元组(ProjectName, TableName, Partition)
    """
    from urllib import parse

    parsed = parse.urlparse(table_uri)
    project_name = parsed.hostname
    r = parsed.path.split("/", 2)
    table_name = r[2]
    if len(r) > 3:
        partition = r[3]
    else:
        partition = None
    return project_name, table_name, partition


def parse_args():
    """解析给到脚本的arguments."""
    parser = argparse.ArgumentParser(description="PythonV2 component script example.")

    # 从上游连线输入当前组件端口的输入,会通过arguments的方式传递给到执行的脚本

    # 1. 组件输入
    # - OSS的输入:
    # 来自上游组件的OSS输入,会被挂载到脚本执行的节点上, 然后挂载后的文件路径,会arguments的形式,传递给到运行的脚本。
    # 例如 "python main.py --input1 /ml/input/data/input1 "

    # - MaxComputeTable的输入:
    # MaxComputeTable的输入不支持挂载,对应的Table信息会以URI的形式,作为arguments传递给到运行脚本
    # 例如 "python main.py --input1 odps://some-project-name/tables/table
    # 对于ODPS URI形式输入,可以用示例的parse_odps_url函数解析出对应的元信息。
    parser.add_argument("--input1", type=str, default=None, help="Component input port 1.")
    parser.add_argument("--input2", type=str, default=None, help="Component input port 2.")
    parser.add_argument("--input3", type=str, default=None, help="Component input port 3.")
    parser.add_argument("--input4", type=str, default=None, help="Component input port 4.")

    # 组件输出
    # - OSS输出
    # 组件的输出端口1和输出端口2是两个OSS输出端口,可以用于下游的使用OSS路径作为输入的组件。
    # 配置组件输出任务输出路径,对应的输出目录会被挂载到 /ml/output/ 下。
    # 组件的输出端口 "OSS输出-1"和"OSS输出-2",分别对应子目录/ml/output/output1 和 ml/output/output2。

    # - MaxComputeTable的输出
    # 组件的输出端口3和输出端口4是MaxComputeTable输出.
    # 如果当前的工作空间配置了MaxComputeProject项目,则组件传递一个临时表URI给到脚本。
    # 例如 python main.py --output3 odps://<some-project-name>/tables/<output-table-name>
    # 用户的代码可以构建对应的表,写出数据到对应表,然后通过组件连线将表传递给到下游组件。
    parser.add_argument("--output1", type=str, default=None, help="Output OSS port 1.")
    parser.add_argument("--output2", type=str, default=None, help="Output OSS port 2.")
    parser.add_argument("--output3", type=str, default=None, help="Output MaxComputeTable 1.")
    parser.add_argument("--output4", type=str, default=None, help="Output MaxComputeTable 2.")

    args, _ = parser.parse_known_args()
    return args

def write_table_example(args):
    """示例:复制将PAI提供公共表的数据,作为当前组件的临时表输出:

    更多PyODPS请参考PyODPS文档: https://pyodps.readthedocs.io/
    """
    output_table_uri = args.output3

    o = init_odps()
    project_name, table_name, partition = parse_odps_url(output_table_uri)
    o.run_sql(f"create table {project_name}.{table_name} as select * from pai_online_project.heart_disease_prediction;")


def write_output1(args):
    """将数据结果写入MountOSS路径上(output1子目录),对应的结果可以通过连线传递到下游"""
    output_path = args.output1

    os.makedirs(output_path, exist_ok=True)
    p = os.path.join(output_path, "result.text")
    with open(p, "w") as f:
        f.write("TestAccuracy=0.88")

if __name__ == "__main__":
    args = parse_args()
    print("Input1={}".format(args.input1))
    print("Output1={}".format(args.output1))
    # write_table_example(args)
    # write_output1(args)
AI 代码解读
  • 运行测试

lQLPJxaP6iv93BLNAffNBj6wrIY_uxwpW9UC7NswHUCEAA_1598_503.png

2.问题临时解决方案

  • 这个一般是配置了相同的OSS Path (代码和任务输出路径)导致的bug,可以将代码和任务输出路径配置成不一样的临时性解决。

  • 代码和任务输出路径配置为两个不同路径

image.png


  • 再次运行测试

lQLPJxaP6UtIPG7NAkPNBMOway30EdwKja8C7NnAmYB1AA_1219_579.png

更多参考

Python脚本V2

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
目录
打赏
0
0
0
0
18
分享
相关文章
|
12天前
|
解决Python报错:DataFrame对象没有concat属性的多种方法(解决方案汇总)
总的来说,解决“DataFrame对象没有concat属性”的错误的关键是理解concat函数应该如何正确使用,以及Pandas库提供了哪些其他的数据连接方法。希望这些方法能帮助你解决问题。记住,编程就像是解谜游戏,每一个错误都是一个谜题,解决它们需要耐心和细心。
60 15
Python图像处理中的内存泄漏问题:原因、检测与解决方案
在Python图像处理中,内存泄漏是常见问题,尤其在处理大图像时。本文探讨了内存泄漏的原因(如大图像数据、循环引用、外部库使用等),并介绍了检测工具(如memory_profiler、objgraph、tracemalloc)和解决方法(如显式释放资源、避免循环引用、选择良好内存管理的库)。通过具体代码示例,帮助开发者有效应对内存泄漏挑战。
96 1
Python与Plotly:B站每周必看榜单的可视化解决方案
Python与Plotly:B站每周必看榜单的可视化解决方案
Python技术进阶:动态代理IP的跨境电商解决方案
Python技术进阶:动态代理IP的跨境电商解决方案
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
1196 3
前后端分离的进化:Python Web项目中的WebSocket实时通信解决方案
在现代Web开发领域,前后端分离已成为一种主流架构模式,它促进了开发效率、提升了应用的可维护性和可扩展性。随着实时数据交互需求的日益增长,WebSocket作为一种在单个长连接上进行全双工通讯的协议,成为了实现前后端实时通信的理想选择。在Python Web项目中,结合Flask框架与Flask-SocketIO库,我们可以轻松实现WebSocket的实时通信功能。
129 2
快速在linux上配置python3.x的环境以及可能报错的解决方案(python其它版本可同样方式安装)
这篇文章介绍了在Linux系统上配置Python 3.x环境的步骤,包括安装系统依赖、下载和解压Python源码、编译安装、修改环境变量,以及常见安装错误的解决方案。
747 1
|
6月前
|
python中3种获取cookie解决方案
python中3种获取cookie解决方案
51 0
|
6月前
|
解析Python中的全局解释器锁(GIL):影响、工作原理及解决方案
解析Python中的全局解释器锁(GIL):影响、工作原理及解决方案
101 0
Python中循环依赖问题及其解决方案
循环依赖是 Python 开发中需要特别注意的问题。通过重新设计模块结构、延迟导入、依赖注入、利用 Python 的动态特性以及代码重构等方法,可以有效地解决循环依赖问题。这些策略不仅有助于提高代码的可维护性和可读性,还能避免潜在的运行时错误。在实际开发中,开发者应该根据具体情况选择合适的解决方案。

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等