
# 创建算法包组件
#### 算法包组件使用场景
算法包组件适合处理复杂的场景，如承载算法模型的任务。在使用时，算法包组件将被配置为一个独立的服务，以供各组件进行访问。
#### 算法包组件使用规范
- 打包格式：算法包需要打包成tar包或tar.gz格式，不支持其他格式。解压后的目录结构不应包含第一层文件夹，应为以下结构： 软件包目录结构：
  ```
  - main.py 
  - dependency/
  - lib/                (可选：C/C++运行文件)
  - requirements.txt 
  - ...
  ```
  
- main.py文件：main.py文件为必选项，其中需要实现一个名为AlgoProcessor的类。这个类中的__init__函数可以实现模型初始化等操作，process函数则实现调用方法。包中引用代码应遵循标准，采用绝对路径。如软件包名为A，内部各模块引入时应为from A.xxx import xxx。 示例代码：
  ```
  #!/usr/bin/env python
  # -*- coding: utf-8 -*-
  from rest.process_base import ProcessBase  
  class AlgoProcessor(ProcessBase):   
       """
       Algorithm Processor
       """
       def __init__(self):       
       super(AlgoProcessor, self).__init__(url="")   
       def process(self, req):    
       rst = {'result': "success", 'suggestion': "pass"}      
       return rst, 200
  ```
  
- dependency文件夹：dependency文件夹为必选项，用于存放基础镜像中未包含或版本不一致的依赖包，可以是自己打的依赖包，也可以是开源依赖包。这些依赖包将配合requirements.txt一起安装。 示例代码：
  ```
  - simon-1.0.8-py3-none-any.whl
  ```
  
- lib文件夹：lib文件夹为可选项，用于存放在Linux环境下编译的C/C++代码的\*\*\*\*.so动态库，以及其他依赖包。 示例代码：
  ```
  - Width_Spread.so
  ```
  
- requirements.txt文件：requirements.txt文件为必选项，用于列出dependency文件夹中包含的依赖包。 示例代码：
  ```
  dependency/simon-1.0.8-py3-none-any.whl
  ```
  
- 其他代码文件：其他代码文件为可选项，可以自行组织存放并正确引用。
 
#### 创建算法包组件
1. 登录ModelArts Studio平台，进入所需空间。
2. 在左侧导航栏中选择"垂域应用开发 \> 应用组件 \> 组件管理"，在"自定义"页签，单击右上角"创建组件"，选择"算法组件包"算法类型，单击"确定"。
   图1算法包组件   
   ![](https://support.huaweicloud.com/usermanual-pangulm/zh-cn_image_0000002571047186.png) 
3. 进入"创建算法包组件"页，参考[表1]设置基础信息。
    表1创建算法包组件参数说明 
   | 参数名称   | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   |:---|:---|
   | 英文名称   | 组件的英文名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | 中文名称   | 组件的中文名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | 业务类型   | 用于区分算法包组件的业务场景。包括以下类型： 数据读写、数据预处理、数据后处理、特征加工、优化场景定义、机理模型、过程控制、图像组件、视频组件、其他。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 标签     | - 用于给组件绑定标签，支持绑定已有或者自定义的新标签，每个组件最多可绑定10个标签。  - 标签输入框支持创建新的标签和删除已有标签，单个空间最多可创建200个标签。 - 创建标签：输入框中输入标签名称并回车即可创建该标签。 图2创建标签 ![](https://support.huaweicloud.com/usermanual-pangulm/zh-cn_image_0000002601606367.png)   - 删除标签：下拉框单击指定标签的"X"号，单击"确认"，即可删除标签。 图3删除标签 ![](https://support.huaweicloud.com/usermanual-pangulm/zh-cn_image_0000002571206820.png) ![](https://support.huaweicloud.com/usermanual-pangulm/zh-cn_image_0000002571047184.png) 注意： 如果已有组件绑定该标签，删除操作会同步删除该组件与标签的绑定关系，且删除后不可找回，请谨慎操作。      |
   | 架构类型   | 算法支持的硬件架构类型： - ALL：算法支持x86和arm两种架构。  - X86：算法仅支持x86架构。  - ARM：算法仅支持arm架构。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 卡类型    | 算法包组件在进行部署时，支持的卡类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 是否区分架构 | 算法包是否区分架构。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 算法包    | 上传算法包。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
      
   图4创建算法包组件   
   ![](https://support.huaweicloud.com/usermanual-pangulm/zh-cn_image_0000002571206818.png) 
4. 基础信息设置完成后，参考[表2]设置属性参数。
   属性参数具备多种功能。例如，在编排静态应用时，通常需要组合多个组件来实现某一功能，不同的组件需要定义清楚输入、输出参数的引用关系，实现数据在不同的组件间流转。
    表2创建属性参数说明 
   | 参数名称  | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   |:---|:---|
   | 英文名称  | 参数的英文名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 中文名称  | 参数的中文名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 参数类型  | - 入参：在编排应用时，该节点的入参，支持三种方式，包括：界面填写、其他组件节点的输出参数作为当前节点的入参、画布参数传入。  - 出参：表示执行组件后生成的结果，出参可以被其他组件节点使用。  - 流式出参：nlp等场景下支持流式出参，支持出参以流式方式展示，使用时组件应该仅包含一个流式出参，并且不包含其他出参。  - 环境变量：在组件运行时可用的全局变量，可以用环境变量存储一些共享的配置信息。例如应用需要从数据库中获取待处理的数据，可以用环境变量存储数据库的位置信息、账密信息、API密钥等。   |
   | 数据类型  | 组件参数的数值类型。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | 业务类型  | 参数的业务类型。非必填参数，默认为空，支持模型和模型服务两种类型。 模型：用于在静态应用界通过"选择模型"，自动填充所选模型的obs地址； 模型服务：用于在静态应用界通过"选择服务"，自动填充所选模型服务的访问地址，实现组件服务调用所选模型服务。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 父参数   | 父参数通常用于配置复杂的结构体，可以使用一个已经添加的数据参数作为这个结构的父参数，即父参数必须是一个已经定义的组件参数。 配置复杂结构体使用，父参数只能是已经添加的数据类型为对象的组件参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 默认值   | 参数的默认值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 有效值   | 参数可以接受的合法取值范围。举例：整数：\[0,10\]，浮点数：\[0.1,10.1\]，枚举：A\|B\|C。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 是否必填  | 该参数是否为必填参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 是否敏感  | 设置参数是否为敏感参数，敏感参数将不允许在画布中填入，只能通过画布参数传入。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 是否为数组 | 该参数是否为数组类型。如果一个参数是数组类型，意味着它可以包含多个值。例如，一个名为"标签"的参数可以是一个字符串数组，其中包含多个标签名称。如果参数不是数组类型，那么它只能接受单个值。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
      
   
5. 参数填写完成后，单击"立即创建"。
6. 组件创建完成后，在算法包列表页面，单击操作列"编辑"可以对中文名称、参数、算法包等进行修改更新。其中，组件参数支持批量导入功能。如果一个组件参数比较多，并且这些参数在其他组件中已经创建，可以通过复制参数代码，并在需要导入参数的组件中通过"导入参数"功能填入代码，从而实现参数的批量导入。
   图5查看参数代码   
   ![](https://support.huaweicloud.com/usermanual-pangulm/zh-cn_image_0000002601606369.png)
   图6导入参数   
   ![](https://support.huaweicloud.com/usermanual-pangulm/zh-cn_image_0000002601606365.png) 
7. 组件开发完成后，单击"保存并生效"后，该组件可用于[部署算法包组件](https://support.huaweicloud.com/usermanual-pangulm/pangulm_04_0142.html)和[创建静态应用](https://support.huaweicloud.com/usermanual-pangulm/pangulm_04_0143.html)中使用。
8. 在组件列表页面，可基于名称、标签对组件进行筛选。
   图7组件列表
   ![](https://support.huaweicloud.com/usermanual-pangulm/zh-cn_image_0000002601726331.png)
   
 
