
# 算子包开发规范
#### Python算子包目录规范
假设算子包名称为video_clip.tar，算子包解压后目录结构：
```
+--- video_clip # 与tar包名称保证一致
| +--- program_package # python算子目录
| | +--- install.sh # 安装脚本，可选
| | +--- process.py # 算子代码，必填
```
#### process.py文件开发规范
算子包必须包含一个名为process.py脚本，根据算子配置文件中**auto-data-loading**字段值分为两种开发模式。
#### 模式一（auto-data-loading为true）
适用场景：除了以下三类场景，推荐使用该模式。
1. 输入数据集为多模态数据集场景：例如图片+文本，视频+文本等由两种及以上模态组合的数据集。
2. 输出数据集模态不在以下范围内：文本、图片、视频、音频。
3. 需要将整个数据集作为输入的场景：例如去重类算子。
process.py开发规范如下所示，process.py文件包含三个类：
1.PreProcess：算子预处理相关逻辑（选填）。
算子调用GPU/NPU做模型推理之前的、在CPU中计算的部分。拆分算子预处理逻辑有利于CPU计算与GPU/NPU计算的解耦，提高GPU/NPU利用率。
2**.** Process：算子推理相关逻辑 **（必填）**。
建议只包含模型的加载及推理部分，将预处理和后处理编写在PreProcess及PostProcess中。
3.PostProcess: 算子后处理相关逻辑 （可选）。
如算子在推理完成后，仍然有较重的、在CPU中计算的后处理逻辑，也建议将这部分逻辑拆分，编写在PostProcess中。
算子框架的调用顺序为preproces-\>process-\>postprocess。
```
import pandas as pd
import ma_utils as utils
logger = utils.FileLogger.get_logger()
class PreProcess():
def __init__(self, args):
"""
:param args: 算子参数，包含算子的业务参数以及默认参数obs_input_path（输入obs路径）和obs_output_path(输出obs路径)
"""
pass
def __call__(self, input: pd.DataFrame) -> pd.DataFrame:
"""
:param input:输入参数
文本模态-JSONL/CSV文件：
框架提取JSONL/CSV的样本内容传递给算子，每个JSONL/CSV文件调用一次算子,DataFrame的字段名与JSONL/CSV文件中的定义一致
文本模态-其它文件：
框架获取数据集文件列表传递给算子，每个文件调用一次算子。DataFrame的字段名：file_path（输入数据在算子本地的完整路径
（算子框架会将数据集下载到算子本地目录中））和file_name（数据文件的文件名称）
图片/视频/音频-原始文件：
框架获取数据集文件列表传递给算子，每个文件调用一次算子，DataFrame的字段名：file_path（输入数据在算子本地的完整路径
（算子框架会将数据集下载到算子本地目录中））和file_name（数据文件的文件名称）
图片/视频/音频-Parquet文件：
框架提取Parquet的样本内容传递给算子，每个Parquet文件调用一次算子,DataFrame的字段名与Parquet文件中的定义一致，
其中有两个系统预定义字段:file_path（输入数据在算子本地的完整路径（算子框架会将数据集下载到算子本地目录中））
和file_name（数据文件的文件名称（为文件的相对路径)）
:return:输出参数，算子输出数据样本列表DataFrame，由框架做后续处理
"""
pass
class Process():
def __init__(self, args):
"""
:param args: 算子参数，包含算子的业务参数以及默认参数obs_input_path（输入obs路径）和obs_output_path(输出obs路径)
"""
pass
def __call__(self, input: pd.DataFrame) -> pd.DataFrame:
"""
:param input:输入参数
文本模态-JSONL/CSV文件：
框架提取JSONL/CSV的样本内容传递给算子，每个JSONL/CSV文件调用一次算子,DataFrame的字段名与JSONL/CSV文件中的定义一致
文本模态-其它文件：
框架获取数据集文件列表传递给算子，每个文件调用一次算子。DataFrame的字段名：file_path（输入数据在算子本地的完整路径
（算子框架会将数据集下载到算子本地目录中））和file_name（数据文件的文件名称）
图片/视频/音频-原始文件：
框架获取数据集文件列表传递给算子，每个文件调用一次算子，DataFrame的字段名：file_path（输入数据在算子本地的完整路径
（算子框架会将数据集下载到算子本地目录中））和file_name（数据文件的文件名称）
图片/视频/音频-Parquet文件：
框架提取Parquet的样本内容传递给算子，每个Parquet文件调用一次算子,DataFrame的字段名与Parquet文件中的定义一致，
其中有两个系统预定义字段:file_path（输入数据在算子本地的完整路径（算子框架会将数据集下载到算子本地目录中））
和file_name（数据文件的文件名称（为文件的相对路径））
:return:输出参数，算子输出数据样本列表DataFrame，由框架做后续处理
"""
pass
class PostProcess():
def __init__(self, args):
"""
:param args: 算子参数，包含算子的业务参数以及默认参数obs_input_path（输入obs路径）和obs_output_path(输出obs路径)
"""
pass
def __call__(self, input: pd.DataFrame) -> pd.DataFrame:
"""
:param input:输入参数
文本模态-JSONL/CSV文件：
框架提取JSONL/CSV的样本内容传递给算子，每个JSONL/CSV文件调用一次算子,DataFrame的字段名与JSONL/CSV文件中的定义一致
文本模态-其它文件：
框架获取数据集文件列表传递给算子，每个文件调用一次算子。DataFrame的字段名：file_path（输入数据在算子本地的完整路径
（算子框架会将数据集下载到算子本地目录中））和file_name（数据文件的文件名称）
图片/视频/音频-原始文件：
框架获取数据集文件列表传递给算子，每个文件调用一次算子，DataFrame的字段名：file_path（输入数据在算子本地的完整路径
（算子框架会将数据集下载到算子本地目录中））和file_name（数据文件的文件名称）
图片/视频/音频-Parquet文件：
框架提取Parquet的样本内容传递给算子，每个Parquet文件调用一次算子,DataFrame的字段名与Parquet文件中的定义一致，
其中有两个系统预定义字段:file_path（输入数据在算子本地的完整路径（算子框架会将数据集下载到算子本地目录中））
和file_name（数据文件的文件名称（为文件的相对路径））
:return:输出参数，算子输出数据样本列表DataFrame，由框架做后续处理
"""
pass
```
#### 模式二（auto-data-loading为false）：
适用于以下三类场景：
1. 输入数据集为多模态数据集场景：例如图片+文本，视频+文本等由两种及以上模态组合的数据集；
2. 输出数据集模态不在以下范围内：文本、图片、视频、音频；

3. 需要将整个数据集作为输入的场景：例如去重类算子。
process.py开发规范如下所示，process.py文件包含三个类：
1.PreProcess：算子预处理相关逻辑（选填）
算子调用GPU/NPU做模型推理之前的、在CPU中计算的部分。拆分算子预处理逻辑有利于CPU计算与GPU/NPU计算的解耦，提高GPU/NPU利用率。
2.Process：算子推理相关逻辑 **（必填）**
建议只包含模型的加载及推理部分，将预处理和后处理编写在PreProcess及PostProcess中。
3.PostProcess: 算子后处理相关逻辑 （可选）
如算子在推理完成后，仍然有较重的、在CPU中计算的后处理逻辑，也建议将这部分逻辑拆分，编写在PostProcess中。
算子框架的调用顺序为preproces-\>process-\>postprocess。
```
import pandas as pd
class Process():
def __init__(self, args):
"""
:param args: 算子参数，包含算子的业务参数以及默认参数obs_input_path（输入obs路径）和obs_output_path(输出obs路径)
"""
pass
def __call__(self, input: pd.DataFrame):
"""
:param input 输入参数，在模式二的情况下，input为空的DataFrame
:return: 无返回值
"""
pass
```
#### 算子基础镜像预置依赖清单
**算子**基础镜像预置的依赖包以及版本号如下表所示：
表1自定义基础镜像预置依赖清单 
| 依赖包名                                     | 版本号                       |
|:---|:---|
| absl-py                                  | 2.1.0                     |
| accelerate                               | 1.0.1                     |
| aclruntime                               | 0.0.2                     |
| addict                                   | 2.4.0                     |
| aiohappyeyeballs                         | 2.4.3                     |
| aiohttp                                  | 3.11.1                    |
| aiosignal                                | 1.3.1                     |
| ais-bench                                | 0.0.2                     |
| akg                                      | 2.2                       |
| albumentations                           | 1.3.1                     |
| antlr4-python3-runtime                   | 4.9.3                     |
| apex                                     | 0.1.dev20241029+ascend    |
| ascend-faultdiag                         | 6.0.0                     |
| ascend-training-accuracy-tools           | 1.0                       |
| ascendebug                               | 0.1.0                     |
| astroid                                  | 3.0.3                     |
| asttokens                                | 2.4.1                     |
| async-timeout                            | 5.0.1                     |
| attrs                                    | 23.2.0                    |
| audioread                                | 3.0.1                     |
| auto-tune                                | 0.1.0                     |
| av                                       | 12.0.0                    |
| blinker                                  | 1.9.0                     |
| blobfile                                 | 3.0.0                     |
| blosc2                                   | 2.5.1                     |
| boto3                                    | 1.23.10                   |
| botocore                                 | 1.26.10                   |
| certifi                                  | 2024.12.14                |
| cffi                                     | 1.16.0                    |
| charset-normalizer                       | 3.4.1                     |
| click                                    | 8.1.7                     |
| click-aliases                            | 1.0.5                     |
| cloudpickle                              | 3.1.0                     |
| coloredlogs                              | 15.0.1                    |
| contourpy                                | 1.3.0                     |
| coverage                                 | 7.3.0                     |
| crc32c                                   | 2.7.1                     |
| cycler                                   | 0.12.1                    |
| Cython                                   | 3.0.2                     |
| dask                                     | 2024.2.1                  |
| dataflow                                 | 0.0.1                     |
| datasets                                 | 3.0.1                     |
| debugpy                                  | 1.8.8                     |
| decorator                                | 4.4.2                     |
| decord                                   | 0.6.0                     |
| dill                                     | 0.3.8                     |
| easydict                                 | 1.12                      |
| einops                                   | 0.8.0                     |
| entrypoints                              | 0.4                       |
| esdk-obs-python                          | 3.23.12                   |
| et-xmlfile                               | 2.0.0                     |
| exceptiongroup                           | 1.2.2                     |
| executing                                | 2.1.0                     |
| filelock                                 | 3.16.1                    |
| flask                                    | 2.3.3                     |
| flatbuffers                              | 24.12.23                  |
| fonttools                                | 4.55.0                    |
| frozenlist                               | 1.5.0                     |
| fsspec                                   | 2024.6.1                  |
| fuzzywuzzy                               | 0.18.0                    |
| gnureadline                              | 8.2.10                    |
| gpytorch                                 | 1.12                      |
| greenlet                                 | 3.1.1                     |
| grpcio                                   | 1.60.0                    |
| grpcio-tools                             | 1.60.0                    |
| gunicorn                                 | 21.2.0                    |
| h5py                                     | 3.9.0                     |
| hccl                                     | 0.1.0                     |
| hccl-parser                              | 0.1                       |
| huaweicloud-sdk-python-modelarts-dataset | 0.1.5                     |
| huggingface-hub                          | 0.26.2                    |
| humanfriendly                            | 10.0                      |
| idna                                     | 3.10                      |
| ijson                                    | 3.3.0                     |
| imageio                                  | 2.36.1                    |
| imageio-ffmpeg                           | 0.5.1                     |
| importlib-metadata                       | 8.5.0                     |
| importlib-resources                      | 6.4.5                     |
| iniconfig                                | 2.0.0                     |
| iopath                                   | 0.1.10                    |
| ipykernel                                | 6.7.0                     |
| ipython                                  | 8.18.1                    |
| isort                                    | 5.13.2                    |
| itsdangerous                             | 2.2.0                     |
| jaxtyping                                | 0.2.19                    |
| jedi                                     | 0.19.2                    |
| jieba                                    | 0.42.1                    |
| jinja2                                   | 3.1.4                     |
| jmespath                                 | 1.0.1                     |
| joblib                                   | 1.4.2                     |
| jsonlines                                | 4.0.0                     |
| jupyter-client                           | 7.4.9                     |
| jupyter-core                             | 5.7.2                     |
| keras                                    | 3.2.1                     |
| kiwisolver                               | 1.4.5                     |
| lazy-import                              | 0.2.2                     |
| lazy-loader                              | 0.4                       |
| levenshtein                              | 0.26.0                    |
| libclang                                 | 18.1.1                    |
| libcst                                   | 1.2.0                     |
| librosa                                  | 0.10.2.post1              |
| linear-operator                          | 0.5.3                     |
| llm-datadist                             | 0.0.1                     |
| llvmlite                                 | 0.41.1                    |
| locket                                   | 1.0.0                     |
| lxml                                     | 5.1.0                     |
| Markdown                                 | 3.7                       |
| markdown-it-py                           | 3.0.0                     |
| MarkupSafe                               | 3.0.2                     |
| matplotlib                               | 3.7.3                     |
| matplotlib-inline                        | 0.1.7                     |
| mccabe                                   | 0.7.0                     |
| mdurl                                    | 0.1.2                     |
| mindspore-lite                           | 2.4.0                     |
| mindstudio-probe                         | 1.0.2                     |
| mindx-elastic                            | 0.0.1                     |
| ml-dtypes                                | 0.5.0                     |
| mmcv                                     | 2.0.1                     |
| mmengine                                 | 0.10.5                    |
| modelarts-pytorch-model-server           | 1.0.6                     |
| moviepy                                  | 2.1.2                     |
| moxing-framework                         | 2.2.10                    |
| mpi4py                                   | 3.1.6                     |
| mpmath                                   | 1.3.0                     |
| msgpack                                  | 1.1.0                     |
| msit                                     | 7.0.0rc630                |
| msit-benchmark                           | 7.0.0rc2                  |
| msit-compare                             | 7.0.0rc2                  |
| msit-llm                                 | 7.0.0rc2                  |
| msit-surgeon                             | 7.0.0rc2                  |
| msprof-analyze                           | 1.2.0                     |
| multidict                                | 6.1.0                     |
| multiprocess                             | 0.70.16                   |
| mypy-extensions                          | 1.0.0                     |
| msobjdump                                | 0.1.0                     |
| namex                                    | 0.0.8                     |
| ndindex                                  | 1.9.2                     |
| nest-asyncio                             | 1.6.0                     |
| netifaces                                | 0.11.0.post20240306102544 |
| networkx                                 | 3.2.1                     |
| numba                                    | 0.58.1                    |
| numexpr                                  | 2.8.6                     |
| numpy                                    | 1.26.4                    |
| omegaconf                                | 2.3.0                     |
| onnx                                     | 1.17.0                    |
| onnxconverter-common                     | 1.14.0                    |
| onnxruntime                              | 1.18.0                    |
| op-compile-tool                          | 0.1.0                     |
| op-gen                                   | 0.1                       |
| op-test-frame                            | 0.1                       |
| opc-tool                                 | 0.1.0                     |
| opencv-python                            | 4.9.0.80                  |
| opencv-python-headless                   | 4.8.1.78                  |
| openpyxl                                 | 3.1.5                     |
| optree                                   | 0.13.1                    |
| orjson                                   | 3.10.7                    |
| packaging                                | 24.2                      |
| pandas                                   | 1.3.5                     |
| parso                                    | 0.8.4                     |
| partd                                    | 1.4.2                     |
| pathlib2                                 | 2.3.7.post1               |
| peft                                     | 0.7.1                     |
| pexpect                                  | 4.9.0                     |
| pillow                                   | 10.4.0                    |
| pip                                      | 21.0.1                    |
| platformdirs                             | 4.3.6                     |
| pluggy                                   | 1.5.0                     |
| ply                                      | 3.11                      |
| pooch                                    | 1.8.2                     |
| portalocker                              | 2.10.1                    |
| prettytable                              | 3.12.0                    |
| proglog                                  | 0.1.10                    |
| prometheus-client                        | 0.14.1                    |
| prompt-toolkit                           | 3.0.48                    |
| propcache                                | 0.2.0                     |
| protobuf                                 | 3.20.2                    |
| psutil                                   | 6.0.0                     |
| ptyprocess                               | 0.7.0                     |
| pure-eval                                | 0.2.3                     |
| py-cpuinfo                               | 9.0.0                     |
| pyarrow                                  | 18.0.0                    |
| pybind11                                 | 2.13.6                    |
| pyclipper                                | 1.3.0.post6               |
| pycocotools                              | 2.0.7                     |
| pycparser                                | 2.22                      |
| pycryptodome                             | 3.21.0                    |
| pycryptodomex                            | 3.21.0                    |
| pygments                                 | 2.18.0                    |
| pylint                                   | 3.0.2                     |
| pynndescent                              | 0.5.13                    |
| pyparsing                                | 3.2.0                     |
| pypng                                    | 0.20220715.0              |
| pytest                                   | 7.4.3                     |
| python-dateutil                          | 2.9.0.post0               |
| python-dotenv                            | 1.0.1                     |
| pytz                                     | 2024.2                    |
| PyWavelets                               | 1.4.1                     |
| PyYAML                                   | 6.0.1                     |
| pyzmq                                    | 26.2.0                    |
| pydub                                    | 0.25.1                    |
| qudida                                   | 0.0.4                     |
| rapidfuzz                                | 3.10.1                    |
| redis                                    | 5.1.1                     |
| regex                                    | 2024.9.11                 |
| requests                                 | 2.32.2                    |
| rich                                     | 13.9.4                    |
| rouge-metric                             | 1.0.1                     |
| s3transfer                               | 0.5.2                     |
| safetensors                              | 0.4.5                     |
| schedule-search                          | 0.0.1                     |
| scikit-image                             | 0.22.0                    |
| scikit-learn                             | 1.5.1                     |
| scipy                                    | 1.10.1                    |
| sentencepiece                            | 0.2.0                     |
| setuptools                               | 75.8.0                    |
| shapely                                  | 2.0.3                     |
| show-kernel-debug-data                   | 0.1.0                     |
| shyaml                                   | 0.6.2                     |
| six                                      | 1.16.0                    |
| skl2onnx                                 | 1.17.0                    |
| soundfile                                | 0.12.1                    |
| soxr                                     | 0.5.0.post1               |
| SQLAlchemy                               | 2.0.36                    |
| stack-data                               | 0.6.3                     |
| sympy                                    | 1.13.0                    |
| setuptools                               | 57.5.0                    |
| soundfile                                | 0.13.1                    |
| tables                                   | 3.9.2                     |
| tabulate                                 | 0.9.0                     |
| tailor                                   | 0.3.4                     |
| te                                       | 0.4.0                     |
| tensorboard                              | 2.18.0                    |
| tensorboard-data-server                  | 0.7.2                     |
| termcolor                                | 2.5.0                     |
| terminaltables                           | 3.1.10                    |
| tfrecord                                 | 1.14.5                    |
| threadpoolctl                            | 3.5.0                     |
| tifffile                                 | 2024.8.30                 |
| tiktoken                                 | 0.7.0                     |
| timm                                     | 1.0.9                     |
| tokenizers                               | 0.20.3                    |
| tomli                                    | 2.1.0                     |
| tomlkit                                  | 0.13.2                    |
| toolz                                    | 1.0.0                     |
| torch                                    | 2.1.0                     |
| torch-npu                                | 2.1.0                     |
| torchvision                              | 0.16.0                    |
| tornado                                  | 6.4.1                     |
| tqdm                                     | 4.66.3                    |
| traitlets                                | 5.14.3                    |
| transformers                             | 4.45.0                    |
| transformers-stream-generator            | 0.0.5                     |
| typeguard                                | 4.4.1                     |
| typing-extensions                        | 4.8.0                     |
| typing-inspect                           | 0.9.0                     |
| tzdata                                   | 2024.2                    |
| tenacity                                 | 9.1.2                     |
| umap-learn                               | 0.5.6                     |
| urllib3                                  | 1.26.7                    |
| wcwidth                                  | 0.2.13                    |
| werkzeug                                 | 3.0.3                     |
| wheel                                    | 0.45.1                    |
| XlsxWriter                               | 3.2.0                     |
| xmltodict                                | 0.13.0                    |
| xxhash                                   | 3.5.0                     |
| yacs                                     | 0.1.8                     |
| yapf                                     | 0.43.0                    |
| yarl                                     | 1.17.1                    |
| ydata-profiling                          | 4.16.1                    |
| zhdate                                   | 0.1                       |
| zipp                                     | 3.21.0                    |
| zstandard                                | 0.22.0                    |
   
