cuquantum.cutensornet.compute_gradients_backward

cuquantum.cutensornet.compute_gradients_backward(intptr_t handle, intptr_t plan, raw_data_in, intptr_t output_gradient, gradients, int32_t accumulate_output, intptr_t work_desc, intptr_t stream)[源代码]

计算网络关于需要梯度的输入张量的梯度。网络必须已收缩并加载到 work_desc CACHE 中。仅对具有单一切片且没有单例模式的网络进行操作。

参数
  • handle (intptr_t) – 持有 cuTensorNet 库上下文的不透明句柄。

  • plan (intptr_t) – 编码张量网络收缩的执行(参见 create_contraction_plan()contraction_autotune())。一些内部元数据可能会在收缩后更新。

  • raw_data_in (object) –

    N 个指针的数组(N 是在 create_network_descriptor() 中指定的输入张量的数量):raw_data_in[i] 指向与第 i 个输入张量关联的数据(在设备内存中)。它可以是

    • 一个 int 作为数组的指针地址,或

    • 一个 int 序列(作为指针地址)。

  • output_gradient (intptr_t) – 输出张量的梯度(在设备内存中)。必须具有与张量网络的输出张量相同的内存布局(步幅)。

  • gradients (object) –

    N 个指针的数组:gradients[i] 指向与设备内存中第 i 个输入张量关联的梯度数据。将 gradients[i] 设置为 null 将跳过计算第 i 个输入张量的梯度。生成的梯度数据具有与其对应的输入张量相同的内存布局(步幅)。它可以是

    • 一个 int 作为数组的指针地址,或

    • 一个 int 序列(作为指针地址)。

  • accumulate_output (int32_t) – 如果为 0,则将梯度结果写入 gradients;否则将结果累积到 gradients 中。

  • work_desc (intptr_t) – 描述工作区的不透明结构。提供的 CUTENSORNET_WORKSPACE_SCRATCH 工作区必须是 valid(工作区指针必须是设备可访问的,请参见 cutensornetMemspace_t,并且工作区大小必须等于或大于所需的最小值)。参见 workspace_compute_contraction_sizes()workspace_get_memory_size()workspace_set_memory()。提供的 CUTENSORNET_WORKSPACE_CACHE 工作区必须是 valid(工作区指针必须是设备可访问的,请参见 cutensornetMemspace_t),并且包含来自相应 contract_slices() 调用的缓存中间张量。如果设置了设备内存处理程序,并且 work_desc 设置为 null,或者 work_desc 中任一工作区类型的内存指针设置为 null,则对于 contract_slices()compute_gradients_backward() 的调用,内存将从内存池中提取。有关详细信息,请参见 contract_slices()

  • stream (intptr_t) – 执行计算的 CUDA 流。