Reposting with the code formatted.
In the description of CUDNN_ATTR_OPERATION_NORM_FWD_EPSILON_DESC in
https://docs.nvidia.com/deeplearning/cudnn/backend/latest/api/cudnn-graph-library.html#cudnn-graph-library
it says:
Scalar input tensor descriptor for the epsilon value used in
normalization calculation. Note that the attribute
CUDNN_ATTR_TENSOR_IS_BY_VALUE of this descriptor should be set to
true.
How does one set the CUDNN_ATTR_TENSOR_IS_BY_VALUE attributed to true?
What values do I pass in for TYPE and VALUE in the following:
CUDNN_CHECK(cudnnBackendSetAttribute(xDesc, CUDNN_ATTR_TENSOR_IS_BY_VALUE,
TYPE, 1, VALUE));
More generally, what is a “scalar tensor”? How does one create one?
What should nDims, xDim, and XStr be in the following:
cudnnBackendDescriptor_t xDesc;
CUDNN_CHECK(cudnnBackendCreateDescriptor
(CUDNN_BACKEND_TENSOR_DESCRIPTOR, &xDesc));
cudnnDataType_t dtype = CUDNN_DATA_FLOAT;
CUDNN_CHECK(cudnnBackendSetAttribute(xDesc, CUDNN_ATTR_TENSOR_DATA_TYPE,
CUDNN_TYPE_DATA_TYPE, 1, &dtype));
int64_t nDims = 4;
int64_t xDim[4] = {1, 1, 1, 1};
int64_t xStr[4] = {1, 1, 1, 1};
int64_t xUi = 'e';
int64_t alignment = 16;
CUDNN_CHECK(cudnnBackendSetAttribute(xDesc, CUDNN_ATTR_TENSOR_DIMENSIONS,
CUDNN_TYPE_INT64, nDims, xDim));
CUDNN_CHECK(cudnnBackendSetAttribute(xDesc, CUDNN_ATTR_TENSOR_STRIDES,
CUDNN_TYPE_INT64, nDims, xStr));
CUDNN_CHECK(cudnnBackendSetAttribute(xDesc, CUDNN_ATTR_TENSOR_UNIQUE_ID,
CUDNN_TYPE_INT64, 1, &xUi));
CUDNN_CHECK(cudnnBackendSetAttribute
(xDesc, CUDNN_ATTR_TENSOR_BYTE_ALIGNMENT,
CUDNN_TYPE_INT64, 1, &alignment));
CUDNN_CHECK(cudnnBackendSetAttribute(xDesc, CUDNN_ATTR_TENSOR_IS_BY_VALUE,
CUDNN_TYPE_INT64, 1, &xUi));
CUDNN_CHECK(cudnnBackendFinalize(xDesc));
Also, I get the following when trying to set up layer normalization:
I! CuDNN (v90800 87) function cudnnBackendSetAttribute() called:
i! descriptor: type=CUDNN_BACKEND_OPERATION_NORM_FORWARD_DESCRIPTOR; val=NOT_IMPLEMENTED;
i! attributeName: type=cudnnBackendAttributeName_t; val=CUDNN_ATTR_OPERATION_NORM_FWD_MODE (2000);
i! attributeType: type=cudnnBackendAttributeType_t; val=CUDNN_TYPE_NORM_MODE (27);
i! elementCount: type=int64_t; val=1;
i! [0]: type=int; val=0;
i! Time: 2025-04-28T21:27:51.992003 (0d+0h+0m+0s since start)
i! Process=761979; Thread=761979; GPU=NULL; Handle=NULL; StreamId=NULL.
I! CuDNN (v90800 87) function cudnnBackendSetAttribute() called:
i! descriptor: type=CUDNN_BACKEND_OPERATION_NORM_FORWARD_DESCRIPTOR; val=NOT_IMPLEMENTED;
i! attributeName: type=cudnnBackendAttributeName_t; val=CUDNN_ATTR_OPERATION_NORM_FWD_PHASE (2001);
i! attributeType: type=cudnnBackendAttributeType_t; val=CUDNN_TYPE_NORM_FWD_PHASE (28);
i! elementCount: type=int64_t; val=1;
i! [0]: type=int; val=1;
i! Time: 2025-04-28T21:27:51.992044 (0d+0h+0m+0s since start)
i! Process=761979; Thread=761979; GPU=NULL; Handle=NULL; StreamId=NULL.
I! CuDNN (v90800 87) function cudnnBackendSetAttribute() called:
i! descriptor: type=CUDNN_BACKEND_OPERATION_NORM_FORWARD_DESCRIPTOR; val=NOT_IMPLEMENTED;
i! attributeName: type=cudnnBackendAttributeName_t; val=CUDNN_ATTR_OPERATION_NORM_FWD_XDESC (2002);
i! attributeType: type=cudnnBackendAttributeType_t; val=CUDNN_TYPE_BACKEND_DESCRIPTOR (15);
i! elementCount: type=int64_t; val=1;
i! [0]: type=CUDNN_BACKEND_TENSOR_DESCRIPTOR; val=0x560694020c00;
i! : type=bool; val=true;
i! Time: 2025-04-28T21:27:51.992086 (0d+0h+0m+0s since start)
i! Process=761979; Thread=761979; GPU=NULL; Handle=NULL; StreamId=NULL.
I! CuDNN (v90800 87) function cudnnBackendSetAttribute() called:
i! descriptor: type=CUDNN_BACKEND_OPERATION_NORM_FORWARD_DESCRIPTOR; val=NOT_IMPLEMENTED;
i! attributeName: type=cudnnBackendAttributeName_t; val=CUDNN_ATTR_OPERATION_NORM_FWD_MEAN_DESC (2003);
i! attributeType: type=cudnnBackendAttributeType_t; val=CUDNN_TYPE_BACKEND_DESCRIPTOR (15);
i! elementCount: type=int64_t; val=1;
i! [0]: type=CUDNN_BACKEND_TENSOR_DESCRIPTOR; val=0x56069533cbc0;
i! : type=bool; val=true;
i! Time: 2025-04-28T21:27:51.992138 (0d+0h+0m+0s since start)
i! Process=761979; Thread=761979; GPU=NULL; Handle=NULL; StreamId=NULL.
I! CuDNN (v90800 87) function cudnnBackendSetAttribute() called:
i! descriptor: type=CUDNN_BACKEND_OPERATION_NORM_FORWARD_DESCRIPTOR; val=NOT_IMPLEMENTED;
i! attributeName: type=cudnnBackendAttributeName_t; val=CUDNN_ATTR_OPERATION_NORM_FWD_INV_VARIANCE_DESC (2004);
i! attributeType: type=cudnnBackendAttributeType_t; val=CUDNN_TYPE_BACKEND_DESCRIPTOR (15);
i! elementCount: type=int64_t; val=1;
i! [0]: type=CUDNN_BACKEND_TENSOR_DESCRIPTOR; val=0x5606952cbe20;
i! : type=bool; val=true;
i! Time: 2025-04-28T21:27:51.992183 (0d+0h+0m+0s since start)
i! Process=761979; Thread=761979; GPU=NULL; Handle=NULL; StreamId=NULL.
I! CuDNN (v90800 87) function cudnnBackendSetAttribute() called:
i! descriptor: type=CUDNN_BACKEND_OPERATION_NORM_FORWARD_DESCRIPTOR; val=NOT_IMPLEMENTED;
i! attributeName: type=cudnnBackendAttributeName_t; val=CUDNN_ATTR_OPERATION_NORM_FWD_SCALE_DESC (2005);
i! attributeType: type=cudnnBackendAttributeType_t; val=CUDNN_TYPE_BACKEND_DESCRIPTOR (15);
i! elementCount: type=int64_t; val=1;
i! [0]: type=CUDNN_BACKEND_TENSOR_DESCRIPTOR; val=0x5606952cbf50;
i! : type=bool; val=true;
i! Time: 2025-04-28T21:27:51.992228 (0d+0h+0m+0s since start)
i! Process=761979; Thread=761979; GPU=NULL; Handle=NULL; StreamId=NULL.
I! CuDNN (v90800 87) function cudnnBackendSetAttribute() called:
i! descriptor: type=CUDNN_BACKEND_OPERATION_NORM_FORWARD_DESCRIPTOR; val=NOT_IMPLEMENTED;
i! attributeName: type=cudnnBackendAttributeName_t; val=CUDNN_ATTR_OPERATION_NORM_FWD_BIAS_DESC (2006);
i! attributeType: type=cudnnBackendAttributeType_t; val=CUDNN_TYPE_BACKEND_DESCRIPTOR (15);
i! elementCount: type=int64_t; val=1;
i! [0]: type=CUDNN_BACKEND_TENSOR_DESCRIPTOR; val=0x5606952cc080;
i! : type=bool; val=true;
i! Time: 2025-04-28T21:27:51.992274 (0d+0h+0m+0s since start)
i! Process=761979; Thread=761979; GPU=NULL; Handle=NULL; StreamId=NULL.
I! CuDNN (v90800 87) function cudnnBackendSetAttribute() called:
i! descriptor: type=CUDNN_BACKEND_OPERATION_NORM_FORWARD_DESCRIPTOR; val=NOT_IMPLEMENTED;
i! attributeName: type=cudnnBackendAttributeName_t; val=CUDNN_ATTR_OPERATION_NORM_FWD_EPSILON_DESC (2007);
i! attributeType: type=cudnnBackendAttributeType_t; val=CUDNN_TYPE_BACKEND_DESCRIPTOR (15);
i! elementCount: type=int64_t; val=1;
i! [0]: type=CUDNN_BACKEND_TENSOR_DESCRIPTOR; val=0x5606952cc1b0;
i! : type=bool; val=true;
i! Time: 2025-04-28T21:27:51.992319 (0d+0h+0m+0s since start)
i! Process=761979; Thread=761979; GPU=NULL; Handle=NULL; StreamId=NULL.
I! CuDNN (v90800 87) function cudnnBackendSetAttribute() called:
i! descriptor: type=CUDNN_BACKEND_OPERATION_NORM_FORWARD_DESCRIPTOR; val=NOT_IMPLEMENTED;
i! attributeName: type=cudnnBackendAttributeName_t; val=CUDNN_ATTR_OPERATION_NORM_FWD_YDESC (2013);
i! attributeType: type=cudnnBackendAttributeType_t; val=CUDNN_TYPE_BACKEND_DESCRIPTOR (15);
i! elementCount: type=int64_t; val=1;
i! [0]: type=CUDNN_BACKEND_TENSOR_DESCRIPTOR; val=0x5606952cc2e0;
i! : type=bool; val=true;
i! Time: 2025-04-28T21:27:51.992360 (0d+0h+0m+0s since start)
i! Process=761979; Thread=761979; GPU=NULL; Handle=NULL; StreamId=NULL.
I! CuDNN (v90800 87) function cudnnBackendFinalize() called:
i! descriptor: type=CUDNN_BACKEND_OPERATION_NORM_FORWARD_DESCRIPTOR; val=NOT_IMPLEMENTED;
i! Time: 2025-04-28T21:27:51.992413 (0d+0h+0m+0s since start)
i! Process=761979; Thread=761979; GPU=NULL; Handle=NULL; StreamId=NULL.
Does this mean that layer normalization is not implemented?