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

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,5000CU*H 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;

  • 配置读数据表组件

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):
    """将数据结果写入Mount的OSS路径上(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)
  • 运行测试

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)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
目录
相关文章
|
7月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
Python 与机器学习:开启智能时代的大门
【2月更文挑战第6天】在当今数字化时代,Python作为一种高度灵活且功能强大的编程语言,与机器学习技术的结合为我们带来了前所未有的智能化解决方案。本文将介绍Python在机器学习领域的应用,并探讨其如何开启智能时代的大门。
|
5月前
|
机器学习/深度学习 算法
现代深度学习框架构建问题之tinyDL中机器学习的通用组件与深度学习如何解决
现代深度学习框架构建问题之tinyDL中机器学习的通用组件与深度学习如何解决
98 2
|
6月前
|
机器学习/深度学习 算法 Python
介绍文本分类的基本概念、常用方法以及如何在Python中使用机器学习库进行文本分类
【6月更文挑战第13天】文本分类是机器学习在数字化时代的关键应用,涉及文本预处理、特征提取和模型训练等步骤。常见方法包括基于规则、关键词和机器学习,其中机器学习(如朴素贝叶斯、SVM、深度学习)是主流。在Python中,可使用scikit-learn进行文本分类,例如通过TF-IDF和朴素贝叶斯对新闻数据集进行处理和预测。随着技术发展,未来将深入探索深度学习和多模态数据在文本分类中的应用。
125 2
|
7月前
|
机器学习/深度学习 PyTorch TensorFlow
【Python机器学习专栏】Python环境下的机器学习库概览
【4月更文挑战第30天】本文介绍了Python在机器学习中的重要性及几个主流库:NumPy用于数值计算,支持高效的数组操作;Pandas提供数据帧和序列,便利数据处理与分析;Matplotlib是数据可视化的有力工具;Scikit-learn包含多种机器学习算法,易于使用;TensorFlow和Keras是深度学习框架,Keras适合初学者;PyTorch则以其动态计算图和调试工具受到青睐。这些库助力机器学习研究与实践。
114 2
|
7月前
|
机器学习/深度学习 人工智能 运维
人工智能平台PAI 操作报错合集之请问Alink的算法中的序列异常检测组件,是对数据进行分组后分别在每个组中执行异常检测,而不是将数据看作时序数据进行异常检测吧
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。
|
7月前
|
机器学习/深度学习 数据采集 算法
深度解析Python中的机器学习库:Scikit-learn
深度解析Python中的机器学习库:Scikit-learn
157 0
|
7月前
|
机器学习/深度学习 数据采集 算法
Python中的机器学习入门:从数据预处理到模型评估
Python中的机器学习入门:从数据预处理到模型评估
351 35
|
7月前
|
机器学习/深度学习 数据可视化 算法
【python】Python大豆特征数据分析 [机器学习版一](代码+论文)【独一无二】
【python】Python大豆特征数据分析 [机器学习版一](代码+论文)【独一无二】
111 1
|
7月前
|
机器学习/深度学习 Serverless Python
Python机器学习线性模型
Python机器学习线性模型
92 1
|
7月前
|
机器学习/深度学习 数据采集 算法
Python技术应用案例——基于机器学习的信用评分模型
【2月更文挑战第11天】机器学习作为当下最热门的技术之一,已经在各个领域获得了广泛的应用。本文将介绍一个基于Python机器学习算法的信用评分模型,通过对数据集的处理和模型训练,实现对客户信用评级的自动化判定,提高了银行的工作效率和准确性。
589 4

热门文章

最新文章