算子包开发规范
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)
适用场景:除了以下三类场景,推荐使用该模式。
- 输入数据集为多模态数据集场景:例如图片+文本,视频+文本等由两种及以上模态组合的数据集。
- 输出数据集模态不在以下范围内:文本、图片、视频、音频。
- 需要将整个数据集作为输入的场景:例如去重类算。
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):
适用于以下三类场景:
- 输入数据集为多模态数据集场景:例如图片+文本,视频+文本等由两种及以上模态组合的数据集;
- 输出数据集模态不在以下范围内:文本、图片、视频、音频;
- 需要将整个数据集作为输入的场景:例如去重类算子。
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
算子基础镜像预置依赖清单
算子基础镜像预置的依赖包以及版本号如下表所示:
| 依赖包名 | 版本号 | 
|---|---|
| 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 | 
 
  