发行说明

cuTensorNet v2.6.0

  • 新功能

  • 缺陷修复

    • 修复了大型网络中工作区大小超过 int32 限制的错误。在之前的版本中,当发生这种情况时,代码会返回错误“找不到路径”。此修复将允许寻路器继续尝试使用切片查找路径。

    • 修复了寻路器 ThreadPool 中潜在的死锁。

  • 其他更改

cuTensorNet v2.5.0

  • 新功能

  • 缺陷修复

    • 修复了大型网络规划中导致段错误 (segfault) 的错误。

    • 修复了梯度计算可能因工作区不足而失败的错误。

    • 修复了收缩结果可能不正确的极端情况错误。

    • 修复了计算类型为 CUTENSORNET_COMPUTE_3XTF32 的失败收缩。

    • 修复了某些量子电路可能出现的错误 GPU 工作区短缺故障。

    • 修复了使用与库句柄关联的 GPU 设备不同的活动 GPU 设备调用非计算 API 的能力。

    • 修复了张量算符数据更新操作期间对张量算符可变性的检查。

    • 修复了遇到的非法内存访问的极端情况错误。

    • 修复了 MPS 模拟中的 cutensornetState_t 对象在 cutensornetStateCompute()cutensornetStatePrepare() 步骤后被多次调用时会抛出错误的错误,即使没有结构性更改。用户现在可以在同一个 cutensornetState_t 对象上多次调用 cutensornetStateCompute(),而只需一个先前的 cutensornetStatePrepare() 步骤,而不会遇到错误。

  • 性能增强

  • 其他更改

    • 降低了几个 cuTensorNet 函数的 CPU 开销。

    • 在 State API 中启用了对使用实数数据类型(CUDA_R_32F 和 CUDA_R_64F)的张量算符的支持。

兼容性说明:

  • cuTensorNet 需要 cuTENSOR v2.0.2 或更高版本。

cuTensorNet v2.4.0

兼容性说明:

  • cuTensorNet 需要 cuTENSOR v2.0.1 或更高版本。

  • cuQuantum 将在后续的 cuQuantum 版本中停止支持 RHEL 7。请提前为此做好计划。谢谢。

已知问题:

  • 对于基于 cutensornetStateFinalizeMPS() API 的 MPS 计算,如果状态在不同模式下具有不同的范围,并且有算符应用于两个不相邻的模式,则可能无法计算出精确的 MPS 分解。

cuTensorNet v2.3.0

兼容性说明:

  • cuTensorNet 需要 cuTENSOR v1.6.1 或更高版本,但不兼容 v2.x.y。推荐使用 cuTENSOR v1.7.0,以获得性能改进、错误修复和 CUDA 延迟加载 支持。

cuTensorNet v2.2.1

  • 缺陷修复

    • 修复了导致一元(单操作数)收缩出现 “不支持” 错误的回归问题。

cuTensorNet v2.2.0

兼容性说明:

  • cuTensorNet 支持 Ubuntu 20.04+。

已知问题:

cuTensorNet v2.1.0

  • 新功能

    • 支持缓存中间张量,以便在重复的张量网络收缩中后续重用。当用户希望执行多次张量网络收缩时,这是一个有用的功能,其中大部分输入张量保持不变,而其余张量更新其值。例如,计算单个比特串或小批量比特串的幅度可以从此功能中受益。我们为用户提供了指定哪些张量是常量的机会。随后,cuTensorNet 将使用此信息来构建内部数据结构,以缓存恒定的中间张量,以便在重复执行张量网络收缩计划时重用它们。请注意,如果所有输入张量都被标记为常量,则输出张量也变为常量,因此再次收缩网络没有好处,因此不会触发缓存机制。在这种情况下,重复收缩将产生相同的执行时间。

  • 缺陷修复

    • 当用户提供自定义内存池来计算具有某些范围组合的双精度复数数据的 QR 分解时,cutensornetTensorQR() 失败。

    • 在某些极端情况下,自动调优失败,并出现 “工作区不足” 错误。

    • 当所有奇异值都被修剪掉时,cutensornetTensorSVD() 执行失败。对于 cuTensorNet v2.1.0,在这种情况下,将在输出中保留一个奇异值。此行为可能会在未来的版本中更改。

  • 其他更改

    • cuTensorNet-MPI 包装库 (libcutensornet_distributed_interface_mpi.so) 需要链接到 MPI 库 libmpi.so。如果您使用我们的 conda-forge 包或 cuQuantum Appliance 容器,或者使用提供的 activate_mpi.sh 脚本编译您自己的版本,则已为您处理好这一点。

    • 引入对 CUDA 12 的支持。

    • 一组带有后缀 -cu12 的新 wheels 在 PyPI.org 上发布,供 CUDA 12 用户使用。

      • 示例:pip install cutensornet-cu12 用于安装与 CUDA 12 兼容的 cuTensorNet。

      • 现有的 cuquantum wheel(不带 -cuXX 后缀)已转换为自动安装程序,它将尝试检测当前的 CUDA 环境并安装相应的 wheels。请注意,此自动检测可能会遇到检测不成功的情况,尤其是在纯 CPU 环境(例如 CI/CD)中。如果检测失败,我们假设目标环境是 CUDA 11 并继续。此假设可能会在未来的版本中更改,在这种情况下,我们建议用户显式(手动)安装正确的 wheels。

  • 性能增强

    • CUDA 延迟加载 受到支持。这可以通过将所需 GPU 内核的加载延迟到第一个调用站点来显著减少内存占用。此功能需要 CUDA 11.8(或更高版本)和 cuTENSOR 1.7.0(或更高版本)。有关其他要求和详细信息,请参阅 CUDA 文档。目前,此功能需要用户通过设置环境变量 CUDA_MODULE_LOADING=LAZY 来选择启用。在未来的 CUDA 版本中,延迟加载可能会成为默认设置。

兼容性说明:

  • cuTensorNet 需要 cuTENSOR 1.6.1 或更高版本,但推荐使用 cuTENSOR 1.7.0 或更高版本,以获得性能改进、错误修复和 CUDA 延迟加载 支持。

  • cuTensorNet 支持 Ubuntu 18.04+

    • 在下一个版本中,将删除对 Ubuntu 18.04 的支持。最低支持的 Ubuntu 版本将为 20.04。

cuTensorNet v2.0.0

  • 我们在 NVIDIA/cuQuantum GitHub Discussions 上!对于任何关于 cuQuantum 的问题(或基于 cuQuantum 构建的令人兴奋的工作),请随时在 GitHub Discussions 上与我们联系。

  • 主要版本发布

    • conda 包已在 conda-forge 上发布:conda install -c conda-forge cutensornet。用户仍然可以使用 conda install -c conda-forge cuquantum 获取 cuTensorNetcuStateVec,与之前一样。

    • pip wheel 已在 PyPI 上发布:pip install cutensornet-cu11。用户仍然可以使用 pip install cuquantum 获取 cuTensorNetcuStateVec,与之前一样。

      • 目前,cuquantum 元 wheel 指向 cuquantum-cu11 元 wheel(然后指向 cutensornet-cu11custatevec-cu11 wheels)。当新的 CUDA 版本可用时,这可能会在未来的版本中更改。建议使用带有 -cuXX 后缀的 wheels。

  • 新功能

    • Hopper 用户的初始支持。这需要 CUDA 11.8。

    • 用于创建、查询和销毁张量描述符对象的新 API。

    • 用于近似张量网络算法的新 API 和功能。cuTensorNet 现在支持以下计算原语,使用户能够开发用于量子电路的近似张量网络模拟器,包括 MPS、PEPS 等

      • 通过 QR 或 SVD 进行张量分解。支持精确和截断的 SVD。

      • 将门应用于一对连接的张量,然后进行压缩。

    • 用于创建、调整、查询和销毁张量 SVD 截断设置的新 API。

    • 用于创建、查询和销毁运行时张量 SVD 截断信息的新 API。

    • 自动分布式执行:cuTensorNet API 已扩展,包含使张量网络收缩在多个 GPU 之间自动分布式并行化的功能。激活后,并行化将应用于张量网络收缩路径查找(当启用超采样时)和收缩执行,而无需对原始串行源代码进行任何更改。

  • 引入了破坏先前 API 的功能

  • 缺陷修复

    • 在少数极端情况下,在 cuda-memcheck 中运行时出现内存访问错误。

    • 设置某些属性时出现与日志记录相关的错误。

    • cuTensorNet 使用用户提供的路径和切片计算的 flops 不准确。

    • 在 NVIDIA HPC SDK 容器中使用 cuTensorNet 时出现 “未定义的符号” 错误。

    • 在已弃用的 cutensornetGetOutputTensorDetails() API 中,对 extent-1 模式的处理不正确。

  • 性能增强

    • 改进了收缩路径优化过程的性能。在许多问题上,平均观察到约 3 倍的加速。

    • 改进了收缩自动调优过程的性能。

    • 提高了切片算法的质量。我们现在选择具有最小切片数量且具有最小 flops 开销的配置。

    • 添加了更多自动调优启发式方法,可提高张量收缩性能。

  • 其他更改

兼容性说明:

  • cuTensorNet 需要 cuTENSOR 1.6.1 或更高版本,但推荐使用 cuTENSOR 1.6.2 或更高版本,以获得性能改进和错误修复。

  • cuTensorNet 需要 CUDA 11.x,但推荐使用 CUDA 11.8,以获得 Hopper 支持、性能改进和错误修复。

已知问题:

  • 对于 CUDA 11.7 或更低版本,cutensornetTensorQR() 可能会因为某些范围而失败。

  • 当用户提供自定义内存池来计算具有某些范围组合的双精度复数数据的 QR 分解时,cutensornetTensorQR() 可能会失败。

  • 对于 cuTENSOR 1.6.1 和 Turing,在某些情况下,广播 extent-1 的张量模式可能会失败。

cuTensorNet v1.1.1

  • 缺陷修复

    • 文档其他地方承诺的版本约束 cuTENSOR>=1.5,<2 未得到正确遵守。代码和各种软件包来源现在都已修复。

cuTensorNet v1.1.0

cuTensorNet v1.0.1

  • 缺陷修复

  • 性能增强

    • 此版本改进了对广义 einsum 表达式的支持,以提供更好的收缩路径。

  • 其他更改

    • 概述示例 页面已显著改进!

    • 在文档和示例中澄清,跨切片的收缩需要按升序完成,并且当跨切片并行化时,输出张量应进行零初始化。

    • 在文档中澄清,返回的 FLOP 计数假设实值输入。

    • 修复了 C++ 示例 (samples/cutensornet/tensornet_example.cu) 中的几个问题。

cuTensorNet v1.0.0

兼容性说明:

  • cuTensorNet 需要 CUDA 11.x。

  • cuTensorNet 需要 cuTENSOR 1.5.0 或更高版本。

  • cuTensorNet 需要 OpenMP 运行时 (GOMP)。

  • cuTensorNet 不再需要 NVIDIA HPC SDK。

限制说明:

  • 如果创建了多个切片,则使用 cutensornetContraction() 收缩切片的顺序应从切片 0 开始按升序排列。如果手动并行化切片(以任何方式:流、设备、进程等),请确保输出张量(受全局归约影响)已初始化为零。

cuTensorNet v0.1.0

  • 首次公开版本

  • 增加对 Linux ppc64le 的支持

  • 为以下方面添加了新的 API 和功能

    • 微调切片算法

    • 重新配置张量网络

    • 简化张量网络

    • 使用超优化器优化路径查找器参数

    • 检索优化器配置参数

  • API 变更

兼容性说明:

  • cuTensorNet 需要 cuTENSOR 1.4.0 或更高版本

  • cuTensorNet 需要 NVIDIA HPC SDK 21.11 或更高版本

cuTensorNet v0.0.1

  • 首次发布

  • 支持 Linux x86_64Linux Arm64

  • 支持 Volta 和 Ampere 架构(计算能力 7.0+)

兼容性说明:

  • cuTensorNet 需要 CUDA 11.4 或更高版本

  • cuTensorNet 需要 cuTENSOR 1.3.3 或更高版本

  • cuTensorNet 支持 NVIDIA HPC SDK 21.7 或更高版本

限制说明:

  • 此版本针对 NVIDIA A100 和 V100 GPU 进行了优化。