算子包开发规范
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):
适用于以下三类场景:
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
算子基础镜像预置依赖清单
算子基础镜像预置的依赖包以及版本号如下表所示:
依赖包名 |
版本号 |
---|---|
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 |