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