算子包开发规范
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 |