参考:Proxima CE全量参数说明

本文为您介绍Proxima CE在运行过程中所使用到的参数说明,包括可选参数和必选参数。

必选参数

参数名称

说明

doc_table

输入底库表(MaxCompute table),需要用户准备,作为检索候选集合。

重要

创建的表名不能使用半角点号.,这是MaxCompute的特殊字符,会导致MaxCompute表解析失败,引用其他工程的表名可以用project_name.table_name的方式。

doc_table_partition

底库表的MaxCompute分区。

query_table

输入查询表(MaxCompute table),需要用户准备,作为检索集合。

重要

创建的表名不能使用英文点号.,这是MaxCompute的特殊字符,会导致MaxCompute表解析失败,引用其他工程的表名可以用project_name.table_name的方式。

query_table_partition

查询表的MaxCompute分区。

output_table

输出表,不需要用户创建,指定表名即可,用于存储检索结果。

output_table_partition

输出表的MaxCompute分区。

data_type

指定输入数据表的数据类型,目前支持FLOAT/INT8/BINARY类型。

dimension

向量特征的维度,data_type为BINARY类型时,维度必须是32的整数倍。

可选参数

参数名称

说明

默认值

h (–help)

使用帮助。

topk

召回相似的结果个数,可以指定多个值10,20,30,最终结果表召回的结果个数取最大值。

200

pk_type

指明输入表的pk列是否为INT64类型,如果是,则值为INT64,否则为STRING类型,默认为STRING。当pk列的数据内容不是INT64类型时(例如STRING类型),Proxima CE内部处理时会建立临时输入表,将pk列映射为tmp_pkINT64类型),后续再通过MaxCompute表的 JOIN 操作得到最终结果,这种情况下在一亿个doc预计增加约半小时左右的耗时。

string

vector_separator

向量的分隔符,可以指定波浪号之外的其他分隔符,支持空格,空格为blank。分隔符是以字符串的形式识别的,因此只需要输入字符本身即可,不需要带单引号或双引号。例如','会被当成完整的字符串','而不是逗号,

~

binary_to_int

是否使用INT32来表示BINARY数据,该参数只对BINARY类型的数据有效,其它参数不支持,dimension仍然表示二值特征的维度。例如假设分割符是逗号,如果binary_to_intfalse,用户的输入类似于"1,1,1,1,1,1,....";如果binary_to_inttrue,用户的输入类似于"12345,13423,13325,....", 从N个0/1变为了N/32个整数,降低了索引大小。

false

job_mode

目前支持的模式为如下组合:

  • train:build:seek(默认)

  • build:seek

  • seek

  • train:build:seek:recall

  • build:seek:recall

  • seek:recall

train:build:seek

clean_build_volume

是否删除索引,build job 完成索引构建之后,会在MaxCompute的volume上写索引,seek job去加载该索引,执行完seek job之后,默认删除索引。

说明

当任务失败时,如果指定为 true,索引也会被清理。

true

algo_model

索引构建方法,目前基于proxima2.x内核主要主持如下六种索引构建方法hnsw/ssg/hc/gc/qc/linear,该参数决定了构造索引的builder和查询的searcher,对应关系如下:

  • hnsw:HnswBuilder/HnswSearcher

  • ssg: SsgBuilder/SsgSearcher

  • hc: ClusteringBuilder/ClusteringSearcher

  • gc: GcBuilder/GcSearcher

  • qc: QcBuilder/QcSearcher

  • linear: LinearBuilder/LinearSearcher(暴力检索)

hnsw

builder_params

索引构建的参数,默认为空。该参数与algo_model指定的索引类型需要对应,参数以单行JSON字符串提供,双引号不需要转义,中间不能有空格。例如{"proxima.hnsw.builder.efconstruction":400,"proxima.hnsw.builder.max_neighbor_count":100}就指定了hnsw构建方式的ef值与节点最大的邻居数,参数具体定义参考IndexBuilder 参数配置

searcher_params

索引查询的参数,默认为空。该参数与algo_model指定的索引类型需要对应,参数以单行JSON字符串提供,双引号不需要转义,中间不能有空格。例如{"proxima.hnsw.searcher.ef":400}就指定了hnsw查询的ef值,参数具体定义参考IndexSearcher 参数配置

converter

指定索引构建的converter名称。Index Converter是Proxima2.x对特征向量进行转换的模块,例如对特征进行降维half float转换,int8量化等。可独立使用,也可作为检索流程中一部分,详情参考Index Converter

converter_params

指定converter参数,参数以单行JSON字符串提供,双引号不需要转义,中间不能有空格。例如指定MipsConverter的参数{"proxima.mips.converter.m_value":4,"proxima.mips.converter.u_value":0.38196601,"proxima.mips.converter.forced_half_float":false,"proxima.mips.converter.spherical_injection":false}。详情请参考IndexConverter 参数配置

distance_method

特征距离计算公式,目前支持:

  • squared_euclidean(不开根号的欧式距离)

  • euclidean(欧式距离)

  • mips_squared_euclidean

  • inner_product(内积)

  • hamming(binary 类型使用)

  • manhattan(L1 distance)

  • chebyshev(切比雪夫距离)

  • canberra(堪培拉距离)

  • geo_distance(地理距离)

  • rogers_tanimoto(binary 类型使用)

  • russell_rao(binary 类型使用)

  • matching(binary 类型使用)

squared_euclidean

measure_params

指定距离(-distance_method)参数,参数以单行JSON字符串提供,双引号不需要转义,中间不能有空格。例如指定MipsSquaredEuclidean的参数{"proxima.mips_euclidean.measure.injection_type":0}。详情请参考IndexMeasure 参数配置

column_num

构建索引的列数,默认为0。

  • 系统根据doc_table数据量和data_type计算得出,如果总大小少于50 GB,则每列分配占用2 GB空间的数据量;如果大于50 GB,则每列分配2.5 GB空间。

  • 手动配置:一般来根据上述方法计算配置,可以根据集群资源适当增多或减少。

column_numrow_num需要同时指定正值才生效。

0

row_num

检索查询的行数,默认为0。

  • 系统根据doc_table数据量和data_type计算得出,如果总query数小于1亿,则每行分配200万query;如果总 query 数大于1亿,则每行分配1000万query。

  • 手动配置:一般来根据上述方法计算配置,可以根据集群资源适当增多或减少。

column_numrow_num需要同时指定正值才生效。

0

category_threshold

在多类目检索场景下,指定为大类目检索的阈值。当某个类目下的doc数超过该阈值时判断该类目走大类目检索,否则走小类目检索,其中小类目检索默认采用线性检索方式,且多个小类目数据合并在一起检索。

1000000

category_col_num

按类目查询时,小类目(doc数小于100万)构建索引的列数,具体参考column_num参数配置。

0

category_row_num

按类目查询时,小类目(doc数小于100万)查询索引的行数,具体参考row_num参数配置。

0

category_thread_num

按类目查询时,设置处理大类目(doc数大于100万)任务的并发度(线程池大小)。

10

query_multi_label

单个query是否有多个category,若设置true,doc表也必须包含category列,详情参考多类目检索

false

threshold_score

检索结果分数过滤阈值。对于当召回的 doc 的score值,除了inner_productmips_squared_euclidean之外距离,值越小越相似,分数大于该阈值时会被过滤掉;对于inner_productmips_squared_euclidean距离,值越大越相似,分数小于该阈值时会被过滤掉。

tunnel_endpoint

设置MaxCompute的tunnel endpoint值,默认为空。防止跨网络访问数据表时download session建立失败,详情可参考MaxCompute Tunnel Endpoint问题

memory_load

指定seek阶段索引加载方式,默认为true,纯内存加载,当集群内存资源紧张时可视情况设为false。

true

sharding_mode

索引分片方式,目前支持hashcluster两种模式。hash分片通过按模取hash值的方式对索引进行划分,cluster则是通过kmeans聚类的方式划分索引,这种分片方式能在一定程度上减少后续检索阶段(seek阶段)的计算量。

hash

kmeans_resource_name

主要作用cluster索引分片模式,cluster首先通过启动MaxCompute的graph图计算任务对原始数据进行kmeans聚类,该参数用于标识kmeans 中心点名称。

kmeans_resource_name

kmeans_sample_ratio

主要作用cluster索引分片模式,表示kmeans中心点的采样率,范围0~1之间。

0.05

kmeans_seek_ratio

主要作用cluster索引分片模式,表示检索时最近中心点的筛选率,范围0~1之间。

0.1

kmeans_iter_num

主要作用cluster索引分片模式,表示kmeans任务的迭代次数。

30

kmeans_cluster_num

主要作用cluster索引分片模式,表示kmeans聚类的中心点个数。

1000

kmeans_init_center_method

主要作用cluster索引分片模式,表示kmeans聚类的中心点初始化方法。

""

kmeans_worker_num

主要作用cluster索引分片模式,表示kmeans聚类Worker实例个数。

0

mapper_split_size

暴露mapper.split.size option,指定内部mapper实例数据处理大小,单位MB。不指定为MaxCompute平台MR的默认大小256MB。

256

odps_task_priority

Proxima CE任务优先级选项,通过设置Proxima CE内部所有MaxCompute任务(sql、MR、Graph等任务)的优先级来完成,取值[0-9],数字越小优先级越高,默认为-1跟随MaxCompute基线优先级。

-1

oss_access_id

阿里云账号或RAM用户的AccessKey ID。您可以进入AccessKey管理页面获取AccessKey ID。

oss_access_key

AccessKey ID对应的AccessKey Secret。

您可以进入AccessKey管理页面获取AccessKey Secret。

oss_endpoint

MaxCompute服务的连接地址。

您需要根据创建MaxCompute项目时选择的地域以及网络连接方式配置Endpoint。各地域及网络对应的Endpoint值,请参见Endpoint

oss_bucket

OSS存储空间名称,即Bucket名称。查看存储空间名称操作,请参见列举存储空间