cuquantum.contract_path¶
- cuquantum.contract_path(subscripts, *operands, options=None, optimize=None)[源代码]¶
通过允许创建中间张量来评估“最佳”收缩顺序。
爱因斯坦求和表达式支持显式和隐式形式。除了下标格式外,交错格式也受支持,作为指定操作数及其模式标签的一种方式。有关操作数类型和示例的更多详细信息,请参阅
Network。- 参数
subscripts – 模式标签(下标),定义爱因斯坦求和表达式为逗号分隔的字符序列。表达式中允许使用 Unicode 字符,从而扩展了可以使用爱因斯坦求和约定指定的张量网络的大小。
operands – 张量(类 ndarray 对象)序列。当前支持的类型为
numpy.ndarray,cupy.ndarray, 和torch.Tensor。qualifiers – 将张量限定符指定为
numpy.ndarray,其tensor_qualifiers_dtype对象的长度等于操作数的数量。options – 将张量网络的选项指定为
NetworkOptions对象。或者,也可以提供包含NetworkOptions构造函数的参数的dict。如果未指定,则该值将设置为默认构造的NetworkOptions对象。optimize – 此参数将路径优化选项指定为
OptimizerOptions对象。或者,也可以提供包含OptimizerOptions构造函数的参数的字典。如果未指定,则该值将设置为默认构造的OptimizerOptions对象。
- 返回值
一个 2 元组 (
path,opt_info)path: 操作数序号对的序列,表示numpy.einsum_path()格式的最佳收缩顺序。opt_info:OptimizerInfo类型的对象,其中包含有关最佳收缩顺序的信息。
- 返回类型
注意
建议用户自行维护库句柄,以减少上下文初始化时间
from cuquantum import cutensornet as cutn from cuquantum import contract, NetworkOptions handle = cutn.create() network_opts = NetworkOptions(handle=handle, ...) path, info = contract_path(..., options=network_opts, ...) # ... the same handle can be reused for further calls ... # when it's done, remember to destroy the handle cutn.destroy(handle)
注意
用户可以使用此 API 计算路径,而无需设备内存分配。实现此目的的一种方法是通过虚拟
cupy.ndarray操作数,例如,不使用虚拟数组的路径查找。