LLM-DataDist接口【免费下载链接】hixlHIXLHuawei Xfer Library是一个灵活、高效的昇腾单边通信库面向集群场景提供简单、可靠、高效的点对点数据传输能力。项目地址: https://gitcode.com/cann/hixl产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√Atlas A3 训练系列产品/Atlas A3 推理系列产品√Atlas A2 训练系列产品/Atlas A2 推理系列产品√说明针对Atlas A2 训练系列产品/Atlas A2 推理系列产品仅支持Atlas 800I A2 推理服务器、A200I A2 Box 异构组件。LlmDataDist构造函数函数功能创建LLM-DataDist对象。函数原型LlmDataDist(uint64_t cluster_id, LlmRole role)参数说明参数名输入/输出描述cluster_id输入集群ID。LlmDataDist标识在所有参与建链的范围内需要确保唯一。role输入类型是LlmRole该参数只用于标识当前角色对传输过程无影响。返回值无异常处理无约束说明无~LlmDataDist()函数功能LLM-DataDist对象析构函数。函数原型~LlmDataDist()参数说明无返回值无异常处理无约束说明无Initialize函数功能初始化LLM-DataDist。函数原型Status Initialize(const std::mapAscendString, AscendString options)参数说明参数名输入/输出描述options输入初始化参数值。具体请参考表1。表 1options参数名可选/必选描述OPTION_LISTEN_IP_INFO可选配置当前option表示LLM-DataDist是Server不配置表示Client。当LLM-DataDist是Server时需配置Host侧的IP地址和端口。配置示例如192.168.1.1:26000不支持传入多个IP地址和端口。OPTION_DEVICE_ID必选设置当前进程的Device ID如0不支持单进程多卡场景。OPTION_SYNC_CACHE_WAIT_TIME可选kv相关操作的超时时间单位ms。不配置默认为1000ms。相关接口如下。- PullKvCache- PullKvBlocks- PushKvCache- PushKvBlocksOPTION_LOCAL_COMM_RES可选配置本地通信资源信息格式是json格式的字符串。配置方法如下仅需配置ranktable中当前llm datadist所使用Device信息无需配置ranktable中的server_count和rank_id字段。该option可以不配置或配置为空串为空将自动生成相关信息。该方法适用于如下型号- Atlas A2 训练系列产品/Atlas A2 推理系列产品- Atlas A3 训练系列产品/Atlas A3 推理系列产品Ascend 950PR/Ascend 950DT场景下配置格式参考gitcode同时需要使能OPTION_TRANSFER_BACKEND为hixl传输后端。该option必选配置为空不会自动生成相关信息。OPTION_TRANSFER_BACKEND可选配置LLM-DataDist使用的传输后端引擎当前支持配置的后端为“hixl”。hixl传输后端使用方法如下- 初始化option需指定OPTION_LISTEN_IP_INFO当配置使用hixl传输后端时每个传输端既可作为client也可以作为server。- 与对端发起传输前需要调用LinkLlmClusters发起建链。如上表格中ranktable具体信息请参见《HCCL集合通信库用户指南》。调用示例请参考样例运行。返回值LLM_SUCCESS成功LLM_PARAM_INVALID参数错误其他失败异常处理无约束说明需要和Finalize配对使用初始化成功后任何退出前都需要调用Finalize保证资源释放否则会出现资源释放顺序不符合预期而导致问题。Finalize函数功能LLM-DataDist的资源释放函数。函数原型void Finalize()参数说明无调用示例请参考样例运行。返回值无异常处理无约束说明需要和Initialize配对使用。当增量集群从全量集群拉取KV的时候需要保证全量集群在增量集群完成同步KV数据之后才调用该接口否则会出现失败。当全量集群在同步KV数据到增量集群的过程中需要保证增量集群在全量集群完成同步KV数据之后调用该接口否则会出现失败。该接口不能和其他接口并发调用。SetRole函数功能设置LLM-DataDist的角色。函数原型Status SetRole(LlmRole role, const std::mapAscendString, AscendString options {})参数说明参数名输入/输出描述role输入角色类型类型为LlmRole。options输入设置角色的参数当前支持的参数请参见表1。(#table1987921348)。表 1配置项配置项可选/必选描述OPTION_LISTEN_IP_INFO可选- 当LLM-DataDist初始化是Client时如果需要切换为Server则配置该option为侦听的Host的IP地址和端口配置示例192.168.1.1:26000。否则不需要配置。- 当LLM-DataDist初始化是Server时若不配置该option则表示切换为Client。若配置了该option则表示当前仍是Server如果配置的端口号与初始化不一致以当前配置为准。配置示例192.168.1.1:26001。- 该配置项指定hixl传输后端时不支持通过SetRole变更侦听端口。调用示例请参考样例运行。返回值LLM_SUCCESS设置角色成功LLM_PARAM_INVALID参数错误LLM_EXIST_LINK存在残留链路资源其他失败异常处理无约束说明使用前需与当前DataDist的链路进行断链。LinkLlmClusters函数功能在LlmDataDist之间执行建链Client端调用。函数原型Status LinkLlmClusters(const std::vectorClusterInfo clusters, std::vectorStatus rets, int32_t timeout_in_millis 1000)参数说明参数名输入/输出描述clusters输入需要建链的集群信息。类型为ClusterInfo。需要配置ClusterInfo中的remote_cluster_id和remote_ip_infos信息若Initialize(LlmDataDist)未指定OPTION_LOCAL_COMM_RES, 需额外配置local_ip_infos每个ClusterInfo的local_ip_infos和remote_ip_infos仅支持配置一个ip_info。rets输出每个cluster建链结果。timeout_in_millis输入建链超时时间单位ms。默认1000ms。调用示例请参考样例运行。返回值LLM_SUCCESS只有所有clusters建链成功接口才会返回成功。其他建链失败需要查看rets每个cluster的建链结果。异常处理LLM_ALREADY_LINK当前的cluster已经和远端cluster建立了链接。LLM_LINK_FAILED建链失败。约束说明调用该接口前需要先在Client和Server调用Initialize接口完成初始化。允许创建的最大通信数量512建链数量过多存在内存OOM及KV Cache传输的性能风险。该约束支持的型号如下- Atlas A2 训练系列产品/Atlas A2 推理系列产品- Atlas A3 训练系列产品/Atlas A3 推理系列产品建议超时时间配置为200ms以上。如果TLS处于开启状态建议超时时间配置为2000ms以上。查询TLS状态可以使用如下命令hccn_tool [-i %d] -tls -g [host]调用该接口前Client和Server需提前注册所有内存否则建链后注册不支持远端访问。容器场景若未配置OPTION_LOCAL_COMM_RES或配置为空需在容器内映射“/etc/hccn.conf”文件或者确保默认路径“/usr/local/Ascend/driver/tools”下存在hccn_tool如果两者都不能满足则需要用户将hccn_tool所在路径配置到PATH中。配置实例如下hccn_tool_install_path表示hccn_tool所在路径。该约束支持的型号如下- Atlas A2 训练系列产品/Atlas A2 推理系列产品- Atlas A3 训练系列产品/Atlas A3 推理系列产品export PATH$PATH:{hccn_tool_install_path}UnlinkLlmClusters函数功能在LlmDataDist之间执行断链。函数原型Status UnlinkLlmClusters(const std::vectorClusterInfo clusters, std::vectorStatus rets, int32_t timeout_in_millis 1000, bool force_flag false)参数说明参数名输入/输出描述clusters输入需要断链的cluster信息。类型为ClusterInfo。rets输出每个cluster断链结果。timeout_in_millis输入断链超时时间单位ms。force_flag输入是否为强制断链。默认为否。强制断链仅强制拆除本端链接所以两端都要调用。非强制断链在Client端发起不存在故障时两端链路都会拆除。但在存在链路故障时还需要在Server端发起调用强制断链耗时长。调用示例请参考样例运行。返回值SUCCESS只有所有clusters断链成功接口才会返回成功。其他执行断链失败需要查看rets每个cluster的断链结果。异常处理LLM_UNLINK_FAILED断链失败。约束说明调用该接口前需要先调用Initialize接口完成初始化。PullKvCache函数功能从远端节点拉取Cache到本地Cache。函数原型Status PullKvCache(const CacheIndex src_cache_index, const Cache dst_cache, uint32_t batch_index 0U, int64_t size -1, const KvCacheExtParam ext_param {})参数说明参数名称输入/输出取值说明src_cache_index输入远端源Cache的索引。dst_cache输入本地目的Cache。仅需指定调用RegisterKvCache返回的cache_id。batch_index输入本地目的batch的下标。size输入设置为0的整数表示要拉取的大小单位字节。或设置为-1表示完整拉取。默认为-1。ext_param输入当前支持ext_param中src_layer_range的second与first的差值和dst_layer_range的second与first的差值一致。src_layer_range和dst_layer_range的first和second默认值都是-1表示全部的层。取值范围都是[0, 最大可用层索引]且first小于等于second。 最大可用层索引值的计算公式如下。(CacheDesc::num_tensors / KvCacheExtParam::tensor_num_per_layer) - 1当前支持tensor_num_per_layer取值范围是[1, 当前cache的tensor总数]默认值为2。当src_layer_range或dst_layer_range取值为非默认值时 tensor_num_per_layer可以保持默认值也可以输入其他值输入其他值的时tensor_num_per_layer的取值还需要被当前cache的tensor总数整除。调用示例请参考样例运行。返回值LLM_SUCCESS成功LLM_PARAM_INVALID参数错误LLM_NOT_YET_LINK与远端cluster没有建链LLM_TIMEOUT拉取超时LLM_KV_CACHE_NOT_EXIST本地或远端KV Cache不存在其他失败约束说明该接口调用之前需要先调用LinkLlmClusters接口完成初始化。PullKvBlocks函数功能通过block列表的方式从远端节点拉取Cache到本地Cache。函数原型Status PullKvBlocks(const CacheIndex src_cache_index, const Cache dst_cache, const std::vectoruint64_t src_blocks, const std::vectoruint64_t dst_blocks, const KvCacheExtParam ext_param {})参数说明参数名称输入/输出取值说明src_cache_index输入远端源Cache的索引。dst_cache输入本地目的Cache。仅需指定调用RegisterKvCache返回的cache_id。src_blocks输入远端源Cache的block index列表。dst_blocks输入本地目的Cache的block index列表。ext_param输入当前支持ext_param中src_layer_range的second与first的差值和dst_layer_range的second与first的差值一致。src_layer_range和dst_layer_range的first和second默认值都是-1表示全部的层。取值范围都是[0, 最大可用层索引]且first小于等于second。 最大可用层索引值的计算公式如下。(CacheDesc::num_tensors / KvCacheExtParam::tensor_num_per_layer) - 1当前支持tensor_num_per_layer取值范围是[1, 当前cache的tensor总数]默认值为2。当src_layer_range或dst_layer_range取值为非默认值时 tensor_num_per_layer可以保持默认值也可以输入其他值输入其他值的时tensor_num_per_layer的取值还需要被当前cache的tensor总数整除。调用示例请参考样例运行。返回值LLM_SUCCESS成功LLM_PARAM_INVALID参数错误LLM_NOT_YET_LINK与远端cluster没有建链LLM_TIMEOUT拉取超时LLM_KV_CACHE_NOT_EXIST远端KV Cache不存在其他失败约束说明该接口调用之前需要先调用LinkLlmClusters接口完成初始化。PushKvCache函数功能推送Cache到远端节点。函数原型Status PushKvCache(const Cache src_cache, const CacheIndex dst_cache_index, uint32_t src_batch_index 0U, int64_t size -1, const KvCacheExtParam ext_param {});参数说明参数名称输入/输出取值说明src_cache输入本地目的Cache。仅需指定调用RegisterKvCache返回的cache_id。dst_cache_index输入远端目的Cache的索引。src_batch_index输入本地源batch的下标。size输入当前只支持默认值-1。ext_param输入当前支持ext_param中src_layer_range的second与first的差值和dst_layer_range的second与first的差值一致。src_layer_range和dst_layer_range的first和second默认值都是-1表示全部的层。取值范围都是[0, 最大可用层索引]且first小于等于second。 最大可用层索引值的计算公式如下。(CacheDesc::num_tensors / KvCacheExtParam::tensor_num_per_layer) - 1当前支持tensor_num_per_layer取值范围是[1, 当前cache的tensor总数]默认值为2。当src_layer_range或dst_layer_range取值为非默认值时 tensor_num_per_layer可以保持默认值也可以输入其他值输入其他值的时tensor_num_per_layer的取值还需要被当前cache的tensor总数整除。调用示例请参考样例运行。返回值LLM_SUCCESS成功LLM_PARAM_INVALID参数错误LLM_NOT_YET_LINK与远端cluster没有建链LLM_TIMEOUT推送超时LLM_KV_CACHE_NOT_EXIST本地或远端KV Cache不存在其他失败约束说明该接口调用之前需要先调用LinkLlmClusters接口完成初始化。PushKvBlocks函数功能通过block列表的方式推送Cache到远端节点。函数原型Status PushKvBlocks(const Cache src_cache, const CacheIndex dst_cache_index, const std::vectoruint64_t src_blocks, const std::vectoruint64_t dst_blocks, const KvCacheExtParam ext_param {});参数说明参数名称输入/输出取值说明src_cache输入本地目的Cache。仅需指定调用RegisterKvCache返回的cache_id。dst_cache_index输入远端目的Cache的索引。src_blocks输入源Cache的block index列表。dst_blocks输入目的Cache的block index列表。ext_param输入当前支持ext_param中src_layer_range的second与first的差值和dst_layer_range的second与first的差值一致。src_layer_range和dst_layer_range的first和second默认值都是-1表示全部的层。取值范围都是[0, 最大可用层索引]且first小于等于second。 最大可用层索引值的计算公式如下。(CacheDesc::num_tensors / KvCacheExtParam::tensor_num_per_layer) - 1当前支持tensor_num_per_layer取值范围是[1, 当前cache的tensor总数]默认值为2。当src_layer_range或dst_layer_range取值为非默认值时 tensor_num_per_layer可以保持默认值也可以输入其他值输入其他值的时tensor_num_per_layer的取值还需要被当前cache的tensor总数整除。调用示例请参考样例运行。返回值LLM_SUCCESS成功LLM_PARAM_INVALID参数错误LLM_NOT_YET_LINK与远端cluster没有建链LLM_TIMEOUT推送超时LLM_KV_CACHE_NOT_EXIST本地或远端KV Cache不存在其他失败约束说明该接口调用之前需要先调用LinkLlmClusters接口完成初始化。RegisterKvCache函数功能注册本地KV Cache内存。函数原型Status RegisterKvCache(const CacheDesc cache_desc, const std::vectoruint64_t addrs, const RegisterCfg cfg, int64_t cache_id);参数说明参数名称输入/输出取值说明cache_desc输入本地Cache的描述信息。addrs输入本地Cache的地址。地址个数不超过240。cfg输入预留参数。cache_id输出注册的Cache的ID。可用于后续调用传输kv接口时构造Cache。调用示例请参考样例运行。返回值LLM_SUCCESS成功其他失败约束说明需要在Initialize接口初始化完成后调用。当HDK版本低于25.5.0时最大注册20GB的Host内存。当HDK版本大于等于25.5.0时最大注册1TB的host内存。注册内存越大占用的OS内存越多。该约束支持的型号如下Atlas A2 训练系列产品/Atlas A2 推理系列产品Atlas A3 训练系列产品/Atlas A3 推理系列产品UnregisterKvCache函数功能解除注册本地KV Cache内存。函数原型Status UnregisterKvCache(int64_t cache_id);参数说明参数名称输入/输出取值说明cache_id输入本地注册生成的cache ID。若指定的cache_id不存在默认返回成功。调用示例请参考样例运行。返回值LLM_SUCCESS成功其他失败约束说明调用该接口前需要先调用Initialize接口完成初始化。cache_id必须为RegisterKvCache接口返回的值。【免费下载链接】hixlHIXLHuawei Xfer Library是一个灵活、高效的昇腾单边通信库面向集群场景提供简单、可靠、高效的点对点数据传输能力。项目地址: https://gitcode.com/cann/hixl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考