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

