使用指导
生成算子
安装Index SDK后,需要依照本章节的指导,设置算子相关的环境变量,并生成算法所需要的算子。
Note
- AscendIndexFlat算法L2和IP距离支持在线算子转换,如果环境变量MX_INDEX_USE_ONLINEOP设置为1(设置命令:export MX_INDEX_USE_ONLINEOP=1),则会在线转换算子并调用,不需要按照本章节生成离线算子。使用在线算子需要用户在应用程序的最后显式调用(void)aclFinalize()(需要包含头文件:#include "acl/acl.h")。
- 对于不支持在线算子的算法,如果设置了环境变量MX_INDEX_USE_ONLINEOP=1,会导致程序运行失败。
-
进入安装目录“mxIndex-{version}”,目录及文件名称如表 Index SDK目录及文件名介绍所示。
cd mxIndex-{version}目录或文件名称 说明 device 包含IndexIL算法的动态库和头文件。 filelist.txt 软件包文件列表。 host 检索动态库,进行特征检索时,请链接此文件夹下的动态库。 include API头文件。 lib 检索动态库,链接到host/lib。 modelpath 算子om文件存放目录。编译好算子之后,可将om文件放置于此文件夹。(可选) ops 包含custom_opp_<arch>.run脚本,用于检索算法算子安装。 script 包含卸载脚本uninstall.sh,用于卸载Index SDK安装包。 tools 包含用于算子生成python脚本。 version.info 包含版本相关信息。 -
进入“ops”目录,编译算子前需要设置“ASCEND_HOME”、“ASCEND_VERSION”和“ASCEND_OPP_PATH”环境变量,默认分别为~/Ascend、~/ascend-toolkit/latest和~/Ascend/ascend-toolkit/latest/opp。
export ASCEND_HOME=~/Ascend export ASCEND_VERSION=~/Ascend/ascend-toolkit/latest export ASCEND_OPP_PATH=~/Ascend/ascend-toolkit/latest/opp- “ASCEND_HOME”表示CANN-toolkit软件安装后文件存储路径。
- “ASCEND_VERSION”表示当前使用的Ascend版本,如果ATC工具安装路径是“/usr/local/Ascend/ascend-toolkit/latest”则无需设置“ASCEND_HOME”和“ASCEND_VERSION”。
- “ASCEND_OPP_PATH”表示算子库根目录,用户需要该目录的写权限。
Note
“MAX_COMPILE_CORE_NUMBER”环境变量用于指定图编译时可用的CPU核数,在算子运行时使用,当前默认为“1”,用户无需设置。
-
根据实际系统架构执行对应脚本。
-
ARM架构:
./custom_opp_aarch64.run -
x86_64架构:
./custom_opp_x86_64.run
执行脚本命令时,支持同时输入可选参数,如表 custom_opp_{arch}.run参数说明所示。
参数名称 说明 --help | -h 查询帮助信息。 --info 查询包构建信息。 --list 查询文件列表。 --check 查询包完整性。 --quiet|-q 可选参数,表示静默安装。减少人机交互的信息的打印。 --nox11 废弃接口,无实际作用。 --noexec 解压软件包到当前目录,但不执行安装脚本。配套--extract=<path>使用,格式为:--noexec --extract=<path>。 --extract=<path> 解压软件包中文件到指定目录。可配套--noexec参数使用。 --tar arg1 [arg2 ...] 对软件包执行tar命令,使用tar后面的参数作为命令的参数。例如执行--tar xvf命令,解压run安装包的内容到当前目录。 Note
以下参数未展示在--help参数中,用户请勿直接使用。
- --xwin:使用xwin模式运行。
- --phase2:要求执行第二步动作。
-
-
进入“tools”目录,生成所需算子。生成算子之前,需要先确认已经安装CANN的相关依赖。
-
只生成使用的算法所需要的算子:先参考算法介绍章节,确认算法所需要生成的算子后,再参考自定义算子介绍章节,生成对应的算子。
-
批量生成所有算法的算子,方法如表 批量生成算子所示。
用法 python3 run_generate_model.py -m <mode> -t <npu_type> -p <pipeline> -pool <pool_size> 参数名称 <mode>:算法模式,<mode>支持ALL以及Flat,SQ8,IVFSQ8,INT8中的一种或多种,多种之间用逗号隔开,如:python3 run_generate_model.py -m Flat,IVFSQ8。默认全选,可以直接执行python3 run_generate_model.py。
<npu_type>:npu_type表示芯片名称。- 对于Atlas 推理系列产品,可在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,将查询到的“Name”最后一位数字删除,即是npu_type的取值。
- 对于Atlas 800I A2 推理服务器,可在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,查询到的“Name”即是npu_type的取值。
- 对于Atlas 800I A3 超节点服务器,可以通过npu-smi info -t board -i 0 -c 0命令进行查询,获取NPU Name信息,910_NPU Name即是npu_type的取值。
<pipeline>:是否使用多线程并行流水生成算子模型,默认为true。设置为true时,使用默认的pool_size的值为32。
<pool_size>:批量生成算子多进程调度的进程池大小。
--help | -h:查询帮助信息。说明 - 执行此命令,用户可以得到多组算子模型文件。执行命令前,用户需要更改当前目录下的para_table.xml文件,将所需的参数填入表中。
- 1 ≤ pool_size ≤ 32
Note
算子生成说明表格中的约束说明,代表业务中经常涉及的参数组合,使用其他参数运行异常请参见《CANN ATC离线模型编译工具用户指南》。
-
-
准备算子模型文件。
-
可以将算子模型文件目录配置为环境变量“MX_INDEX_MODELPATH”(环境变量支持以~开头的路径、相对路径和绝对路径,路径中不能包含软链接;使用该变量时将统一转化为绝对路径)。
mv op_models/* $PWD/../modelpath export MX_INDEX_MODELPATH=`realpath $PWD/../modelpath` -
如未使用环境变量进行配置,需将算子模型文件移动到当前目录的“modelpath”目录下。
算子生成后,请妥善保管相关om文件并确保文件不被篡改。
Note
生成算子时如果出现报错:Failed to import Python module,请参照NumPy的数据类型np.float_ 已被移除解决。
-
算法介绍
全量检索
全量检索(Brute-force Search)是指对底库中的所有向量逐一计算距离,返回与查询向量距离最近的TopK结果。全量检索不进行任何剪枝或近似处理,因此检索精度最高,但计算量与底库规模成正比,适用于对精度要求严格、底库规模适中的场景。
| 算法(API参考) | 算法使用场景 | 需要生成的算子 | 样例链接 |
|---|---|---|---|
| AscendIndexInt8Flat | 链接 | ||
| AscendIndexFlat | 链接 | ||
| AscendIndexSQ | 链接 | ||
| AscendIndexCluster | 链接 | ||
| IndexIL | 需要运行在Device上,安装部署复杂,暂不推荐使用 | 参考IndexILFlat | |
| AscendIndexILFlat | 链接 |
近似检索
近似检索(Approximate Nearest Neighbor Search)通过聚类、量化、图索引等方式对底库进行预处理或压缩,检索时仅计算部分向量距离,以牺牲少量精度换取显著的性能提升和内存节省。适用于亿级大库容、对时延敏感、可接受一定精度损失的场景。
| 算法(API参考) | 算法使用场景 | 需要生成的算子 | 样例链接 |
|---|---|---|---|
| AscendIndexIVFSP | 请参见IVFSP。 |
链接 | |
| AscendIndexIVFSQ | 链接 | ||
| AscendIndexIVFSQT | 链接 | ||
| AscendIndexBinaryFlat | 链接 | ||
| AscendIndexVStar | 请参见VSTAR。 |
链接 | |
| AscendIndexGreat | 请参见VSTAR。 |
链接 | |
| AscendIndexIVFFlat | 链接 | ||
| AscendIndexIVFPQ | 链接 | ||
| AscendIndexIVFRaBitQ | 链接 | ||
| AscendIndexCagra | 链接 |
属性过滤检索
属性过滤检索是指在向量检索的基础上,结合业务属性(如时间、空间、附加属性、自定义属性等)进行过滤,仅对满足属性条件的向量执行距离计算和排序,实现时空联合检索。适用于需要同时满足相似性和属性约束的场景。
| 算法(API参考) | 算法使用场景 | 需要生成的算子 | 样例链接 |
|---|---|---|---|
| AscendIndexTS | 链接 |
多Index批量检索
多Index批量检索允许在单个Device上同时管理多个Index实例,通过一次调用对多个Index执行检索,减少Host与Device之间的交互次数,提升多库并发检索的整体吞吐。
| 接口(API参考) | 接口使用场景 | 可以使用本接口的算法 | 样例链接 |
|---|---|---|---|
| Search | 单Device进行多个Index检索。 | 链接 | |
| Search | 单Device进行多个AscendIndex检索。 | 链接 | |
| Search | 单Device进行多个AscendIndexInt8检索。 | 链接 | |
| SearchWithFilter | 单Device进行多个Index带属性过滤(单filter)检索。 | 链接 | |
| SearchWithFilter | 单Device进行多个AscendIndex带属性过滤(单filter)检索。 | 链接 | |
| SearchWithFilter | 单Device进行多个Index带过滤属性(多filter)检索。 | 链接 | |
| SearchWithFilter | 单Device进行多个AscendIndex带过滤属性(多filter)检索。 | 链接 |
其他功能
| 算法(API参考) | 算法需求(性能、场景差异) | 如何调用 | 样例链接 |
|---|---|---|---|
| IReduction | IReduction是特征检索组件中降维方法的统一接口,目前支持PCAR和NN两种降维算法。 | 通过ReductionConfig初始化,调用CreateReduction创建降维对象,然后进行train和reduce。 | 链接 |
| AscendNNInference | 通过神经网络进行推理。 | 通过AscendNNInference创建NN降维对象,然后进行infer降维。 | 链接 |
| AscendCloner | Index SDK提供了将NPU上的检索Index资源拷贝到CPU侧Faiss的操作,拷贝过程发生在内存中,原始NPU的Index上加载的数据会被拷贝到CPU侧的内存中,方便用户在CPU上使用相同的底库执行检索。 | index_ascend_to_cpu将AscendIndex拷贝生成一个CPU上的Index,index_cpu_to_ascend将CPU上的Index拷贝生成一个AscendIndex。 | 无 |
自定义算子介绍
自定义算子简介
特征检索方案使用TIK算子开发实现特征距离计算逻辑,包含以下的自定义算子。
- Flat距离计算算子:得到特征底库数据和待检索的特征向量之间的距离(L2/IP)。
- SQ8距离计算算子:得到SQ量化的特征底库数据和待检索的未量化特征向量之间的距离(L2/IP)。
- IVFSQ8算子:得到IVFSQ8算法所需要的算子。
- INT8Flat距离计算算子:得到INT8量化的特征底库数据和待检索的INT8量化特征向量之间的距离(L2/COS)。
- IVFSQT算子:得到IVFSQT算法一二三级所需的距离算子。
- FlatAT算子:主要用于在IVF场景,减少train和add的耗时,其中“code_num”等于“nlist”。
- FlatInt8AT算子:优化在Atlas 推理系列产品下IVFSQT中train、add与update的耗时。
- AICPU算子:调度昇腾AI处理器的CPU完成排序等计算,充分利用硬件性能。
- BinaryFlat算子:得到二值化算法所需算子。
- Mask算子:得到时空库属性过滤算法所需的Mask算子。
- IVFSP算子:得到IVFSP算法所需的业务算子、AICPU算子,以及训练生成IVFSP码本时所需的训练算子。
- VStar算子:得到VStar算法所需的业务算子、AICPU算子。
- IVFFLAT:得到IVFFLAT算法一级二级所需的距离算子。
- IVFPQ算子:得到IVFPQ算法一级二级三级所需的距离算子。
- IVFRaBitQ算子: 得到IVFRaBitQ所需的算子。
- Cagra算子:得到Cagra图检索算法所需的算子。
算子生成说明
Flat
- AscendIndexFlat
- AscendIndexCluster
- IndexIL
- AscendIndexTS
- Search(单device进行多个Index检索)
- Search(单device进行多个AscendIndex检索)
SQ8
Note
INT8Flat和SQ8的区别主要在于:INT8由外部进行量化,Index的输入特征是INT8类型,SQ8由Index内部量化,Index的输入特征是Float32类型。
- AscendIndexSQ
- Search(单device进行多个Index检索)
- Search(单device进行多个AscendIndex检索)
- SearchWithFilter(FaissIndex单filter)
- SearchWithFilter(AscendIndex单filter)
- SearchWithFilter(FaissIndex多filter)
- SearchWithFilter(AscendIndex多filter)
IVFSQ8
INT8Flat
Note
INT8Flat和SQ8的区别主要在于:INT8由外部进行量化,Index的输入特征是INT8类型,SQ8由Index内部量化,Index的输入特征是Float32类型。
IVFSQT
Note
为了减少train和add的耗时,需要生成FlatAT算子。其中,Flat的<dim>需与IVFSQT的<dim_in>相同,Flat的<code_num>与IVFSQT的<coarse_centroid_num>一致。
FlatAT
Note
当前FlatAT算子配合IVF类型的算子使用,用来加速IVF类型算子的add、train等过程,不支持直接调用FlatAT算子。当前的add/train加速功能通过IVF中AscendIndexIVFConfig.useKmeansPP进行指定,此时仅支持训练规模在7,000,000以下的训练。
FlatInt8AT
AICPU
- AscendIndexInt8Flat
- AscendIndexFlat
- AscendIndexSQ
- AscendIndexCluster
- AscendIndexIVFSQ
- AscendIndexBinaryFlat
- AscendIndexTS
- AscendIndexIVFSQT
- AscendIndexIVFFlat
- AscendIndexIVFPQ
- AscendIndexIVFRaBitQ
BinaryFlat
python3 binary_flat_generate_model.py -d <dim> -q <query_type> -p <process_id> -pool <pool_size> |
|
<dim>:二值化特征向量维度,dim ∈ { 256, 512,1024 },默认值为“512”。 <query_type>:检索类型,默认为“uint8”,当AscendIndexBinaryFlat算法的search接口进行性能提升时,需要设置为“float”。 <process_id>:批量生成算子多进程调度的进程ID,默认值为“0”,无需设置。 |
|
例如对于Atlas 推理系列产品 生成256维 uint8类型算子:python3 binary_flat_generate_model.py -d 256。 |
Mask
IVFSP
IVFSP检索当前支持硬件形态“910B4”,涉及以下几种类型的模型文件生成:
- ivfsp_generate_model.py:IVFSP业务算子模型文件生成,具体请参见IVFSP业务算子模型文件生成。
- ivfsp_aicpu_generate_model.py:IVFSP AICPU算子模型文件生成,具体请参见IVFSP AICPU算子模型文件生成。
- ivfsp_generate_pyacl_model.py:IVFSP训练码本时需要的训练算子模型文件生成,具体请参见IVFSP训练算子模型文件生成。
python3 ivfsp_generate_model.py --cores <core_num> -d <dim> -nonzero_num <low_dim> -nlist <k> -handle_batch <handle_batch> -code_num <code_num> -p <process_id> --pool <pool_size> |
|
<core_num>:AI Core的个数,默认值为“8”,无需设置。 <low_dim>:特征向量压缩后非零维度个数,默认值为“32”。 <k>:簇聚类中心个数。与IVFSP训练算子模型文件生成中的<k>保持一致,默认值为“1024”。 <handle_batch>:检索时每次下发计算的候选桶数量,默认值为“32”。 <code_num>:检索时每次下发计算的每个桶的最大样本数量,若桶太大,程序会自动根据code_num将桶拆成多次算子下发计算距离。与IVFSP训练算子模型文件生成中的<codebook_batch_size>保持一致,默认值为“32768”。 <process_id>:批量生成算子多进程调度的进程ID,默认值为“0”,无需设置。 |
|
执行此命令,用户可以得到一组用于IVFSP检索时的AI Core算子模型文件,用户需要自行修改命令中的参数。例如对于Atlas 推理系列产品 生成256维,压缩后维度为32,聚类中心为1024,桶数量为32,样本数量为32768的算子:python3 ivfsp_generate_model.py -d 256 -nonzero_num 32 -nlist 1024 -handle_batch 32 -code_num 32768 |
|
|
python3 ivfsp_generate_pyacl_model.py --cores <core_num> -d <dim> -nonzero_num <low_dim> -nlist <k> -batch_size <batch_size> -code_num <codebook_batch_size> -p <process_id> |
|
<core_num>:AI Core的个数,默认值为“8”,无需设置。 <low_dim>:特征向量压缩后非零维度个数,默认值为“32”。 <k>:簇聚类中心个数。与IVFSP业务算子模型文件生成中的<k>保持一致,默认值为“1024”。 <batch_size>:训练时以batch_size大小执行训练,默认值为“32768”。 <codebook_batch_size>:训练时每次最大按codebook_batch_size样本数量操作码本,必须为2的幂次。与IVFSP业务算子模型文件生成中的<code_num>保持一致,默认值为“32768”。 |
|
执行此命令,用户可以得到一组用于IVFSP检索时的算子模型文件,用户需要自行修改命令中的参数。生成的IVFSP训练算子模型文件,保存在当前目录的子目录op_models_pyacl下。例如对于Atlas 推理系列产品 生成256维 压缩后维度为32,nlist聚类中心1024,查询数量为32768,样本数量为32768算子:python3 ivfsp_generate_pyacl_model.py -d 256 -nonzero_num 32 -nlist 1024 -batch_size 32768 -code_num 32768 |
|
|
VSTAR
VSTAR检索当前只支持Atlas 推理系列产品,涉及VSTAR业务算子模型文件(vstar_generate_models.py)生成,具体请参见VSTAR。
算子生成环境需要跟码本生成保持一致,具体请参见总体说明。
IVFFLAT
IVFPQ
IVFRaBitQ
排查 coarse centroid 上传或 L1 粗排异常时,可通过调试环境变量分阶段定位故障点(默认关闭,不影响性能)。环境变量说明见《附录》,操作步骤与日志解读见《常用操作 — IVFRaBitQ 运行时诊断》。
Cagra
Cagra构图脚本
环境配置
环境依赖库参见如下:
- joblib(version ≥ 1.3.0)
可通过pip install命令安装,命令执行参考如下。
pip install joblib
训练脚本执行
Cagra构图脚本 "graph_build.py" 用于构建CAGRA图检索算法所需的图文件(脚本位于安装目录下的"tools/train"文件夹中)。
VSTAR生成码本文件
总体说明
环境依赖库参见如下:
-
nnae(version >= 8.0.0, 8.5.0 及以后由 toolkit 包收编)
-
python(version >= 3.9)
-
torch(version >= 2.0.1)
-
torch_npu(version >= 2.0.1.post4)
-
numpy(version >= 1.26.4)
-
scikit-learn(version >= 1.4.1.post1)
-
tqdm(version >= 4.66.1)
torch、TorchNPU、numpy、scikit-learn和tqdm可通过pip install命令安装,执行命令参考如下。
pip install numpy tqdm scikit-learn torch_npu torch
CANN 8.5.0之前版本需要单独安装nnae。具体安装步骤如下:
-
下载nnae软件包。
-
执行如下命令,增加可执行权限。
chmod u+x ./Ascend-cann-nnae_{version}_linux-{arch}.run -
执行如下命令,进行安装。
./Ascend-cann-nnae_{version}_linux-{arch}.run --install -
按照安装提示信息设置环境变量。
source /{nnae_installation_path}/nnae/set_env.sh
-
若import torch,TorchNPU遇到下面的错误:
.../libgomp.so: cannot allocate memory in static TLS block请执行export LD_PRELOAD=.../libgomp.so(报错中出现的libgomp.so路径)
-
若安装numpy出现pip无法安装如下依赖时:
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behavior is the source of the following dependency conflicts. auto-tune 0.1.0 requires decorator, which is not installed. dataflow 0.0.1 requires jinja2, which is not installed. opc-tool 0.1.0 requires attrs, which is not installed. opc-tool 0.1.0 requires decorator, which is not installed. opc-tool 0.1.0 requires psutil, which is not installed. schedule-search 0.0.1 requires absl-py, which is not installed. schedule-search 0.0.1 requires decorator, which is not installed. te 0.4.0 requires attrs, which is not installed. te 0.4.0 requires cloudpickle, which is not installed. te 0.4.0 requires decorator, which is not installed. te 0.4.0 requires ml-dtypes, which is not installed. te 0.4.0 requires psutil, which is not installed. te 0.4.0 requires scipy, which is not installed. te 0.4.0 requires tornado, which is not installed.请执行以下命令。
pip install attrs cloudpickle decorator jinja2 ml-dtypes psutil scipy tornado absl-py -
若训练码本遇到以下问题:
OpenBLAS warning: precompiled NUM_THREADS exceeded, adding auxiliary array for thread metadata. Segmentation fault (core dumped)请执行:
export OPENBLAS_NUM_THREADS=1该环境变量可能影响性能,码本训练完成后,建议设置回预设值。
-
--useOfflineCompile选项详细说明:
在线算子编译耗时相比离线算子编译耗时较长。--useOfflineCompile选项用于控制是否使用离线算子编译,使用预先编译好的离线算子包执行。该方式需要用户提前安装单算子包。算子包安装指导如下:
-
下载算子软件包。
-
执行如下命令,增加可执行权限。
-
CANN 8.5.0之前版本
chmod u+x ./Ascend-cann-kernels-{chip_type}_{version}_linux-{arch}.run -
CANN 8.5.0及之后版本
chmod u+x ./Ascend-cann-{chip_type}-ops_{version}_linux-{arch}.run
-
-
执行如下命令,进行安装。
-
CANN 8.5.0之前版本
./Ascend-cann-kernels-{chip_type}_{version}_linux-{arch}.run --install -
CANN 8.5.0及之后版本
./Ascend-cann-{chip_type}-ops_{version}_linux-{arch}.run --install
-
-
按照安装提示信息设置环境变量。
-
CANN 8.5.0之前版本
source /{kernels_installation_path}/kernels/set_env.sh -
CANN 8.5.0及之后版本
source /usr/local/Ascend/cann/set_env.sh
-
-
码本训练脚本
训练涉及“vstar_train_codebook.py”脚本(训练脚本位于安装目录下的“tools/train”文件夹中),注意Python版本为3.9。
(可选)Python方式生成码本文件
IVFSP训练脚本
环境配置
环境依赖库参见如下:
- numpy(version > 1.16.0)
- tqdm(version ≥ 4.65.0)
- faiss-cpu(version = 1.10.0)
可通过pip install命令安装,命令执行参考如下。
pip install numpy tqdm faiss-cpu==1.10.0
执行训练脚本前,先执行如下命令设置环境变量。
source /usr/local/Ascend/ascend-toolkit/set_env.sh
训练脚本执行
Index SDK提供两种训练脚本方式:
- 使用IVFSP算法的trainCodeBook接口进行训练(推荐使用该方式)。
- 使用“ivfsp_train_codebook.py”脚本进行训练。训练脚本位于安装目录下的“tools/train”文件夹中,注意Python版本为3.9.11。为了用户执行方便,提供了“ivfsp_train_codebook_example.sh”样例脚本(脚本位于安装目录下的“tools/train”文件夹中),用户可在此文件上根据实际场景修改参数值,然后执行此脚本生成码本文件。
降维训练脚本
-
安装Python3.9(支持Python3.9、Python3.10和Python3.11,推荐使用Python3.9)。
-
安装Faiss 1.10.0。可通过pip install命令安装,命令执行参考如下。
pip install faiss-cpu==1.10.0 -
安装torch_cpu和TorchNPU。安装方法参见链接。请根据版本配套表,选择对应版本安装。
本章节涉及的脚本的默认存放路径为:“tools/train/reduction”。
-
训练模型。
python3 call_train.py --dataset_dir=Dataset_Dir --val_dataset_dir=./valid --generate_val=True --save_path=./modelsDr --dim=512 --npu=0 --ratio=4 --metric=L2 --mode=train --train_size=100000 --epochs=20 --train_batch_size=8192 --infer_batch_size=128 --learning_rate=0.0005 --log_stride=500 --construct_neighbors=100 --queries_validation=1000参数 说明 dataset_dir 数据集路径,类型为string,必须设置。目前实现默认读取base.npy,query.npy和gt.npy。若数据集为其他名称,可以自行实现数据集读取,并对该脚本get_train_data所在行做对应修改。例如。原代码为: # load dataset demo before training, modify here if you want to load your own dataset ##################################################################### learn, base = get_train_data(args.dataset_dir, args.train_size) #####################################################################
可修改为:# load dataset demo before training, modify here if you want to load your own dataset ##################################################################### # learn, base = get_train_data(args.dataset_dir, args.train_size) learn = np.fromfile(YOUR_LEARN_DATASET_DIR, dtype=np.float32).reshape((-1, YOUR_DATA_DIM)) base = np.fromfile(YOUR_BASE_DATASET_DIR, dtype=np.float32).reshape((-1, YOUR_DATA_DIM)) #####################################################################val_dataset_dir generate_val为True时有效,生成验证集的存放路径,类型为string,默认值为./validation/。 generate_val 是否生成验证集。首次训练请设置为True。类型为bool,默认为False。 save_path 模型存放路径。类型为string,必须设置。 dim 可选,数据集维度。取值范围:[96, 128, 200, 256, 512, 2048]。类型为int,默认值为512。 npu 训练所用的DeviceId,即设备号。类型为int。仅支持单卡训练,不指定时默认使用CPU训练。 ratio 可选,降维比例。取值范围:[2, 4, 8, 16]。类型为int,默认值为8。 metric 训练模型时的距离度量标准,可选L2或IP。类型为string,默认值为L2。 mode 可选,范围为[“train”,“infer”,“test”],但当前仅支持“train”,默认为“train”,无需修改。 train_size 训练集大小,取值范围小于整个数据集样本个数。用于读取数据集时随机采样部分数据进行训练。类型为int。若自行实现数据集读取,请根据train_size进行采样以防止训练速度过慢。默认值为100000,修改时要求该值大于0。 epochs 训练迭代轮数。类型为int。迭代次数设置过大,会显著增加训练时长。默认为30,修改时要求该值大于0。 train_batch_size 训练时的batch大小,默认为“8192”,类型为int。修改时要求该值大于0。 infer_batch_size 推理时的batch大小,默认为“128”。类型为int。修改时要求该值大于0。 learning_rate 学习率大小,默认为“0.0005”。类型为float。修改时要求该值大于0。 log_stride 训练日志打印间隔(step),默认为“500”。类型为int。修改时要求该值大于0。 construct_neighbors 构造训练集时所取的近邻的范围,用于构造降维所需的特殊训练集结构,默认为“100”。应根据数据集中每个人所对应的人脸数修改。类型为int。修改时要求该值大于0。 queries_validation 构造验证集时所需查询向量的数量,类型为int。默认为“1000”,修改时要求该值大于0。 --help | -h 查询帮助信息。 -
生成OM模型。
执行训练脚本前,先执行如下命令设置环境变量(根据CANN软件包的实际安装路径修改)。
source /usr/local/Ascend/ascend-toolkit/set_env.sh export LD_LIBRARY_PATH=/usr/local/Ascend/driver/lib64:/usr/local/Ascend/driver/lib64/common:/usr/local/Ascend/driver/lib64/driver:$LD_LIBRARY_PATH-
生成精度为32的om模型。
bash atc.sh {save_path} {om_name} {input_shape} -
生成精度为16的om模型
bash atc_16.sh {save_path} {om_name} {input_shape}
- {save_path}:必选,表示模型存储的路径。路径中文件名需要以".onnx"或".pb"结尾,否则脚本会获取环境变量"framework"、"input_format"等值,导致脚本执行异常。
- {om_name}:可选,表示生成OM模型的名字,默认与onnx模型名字相同。
- {input_shape}:可选,默认为onnx模型的输入维度,格式为actual_input_1:infer_batch_size,dim,建议使用默认值,不建议修改。
- bash atc.sh和bash atc_16.sh仅支持Atlas 推理系列产品。
-