已合并
aclnn文档错误修正 #3610
zhuzemao创建于 4月8日
aclnn文档错误修正 #3610
已合并
zhuzemao创建于 4月8日
8 个文件变更+26-25
@@ -513,7 +513,7 @@ int main() {
513 CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy loss result from device to host failed. ERROR: %d\n", ret); return ret);513 CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("copy loss result from device to host failed. ERROR: %d\n", ret); return ret);
514 LOG_PRINT("loss is: \n[");514 LOG_PRINT("loss is: \n[");
515 for (int64_t i = 0; i < size1; i++) {515 for (int64_t i = 0; i < size1; i++) {
516- LOG_PRINT("%f, ", i, resultData1[i]);516+ LOG_PRINT("%f, ", resultData1[i]);
517 }517 }
518 LOG_PRINT("]\n");518 LOG_PRINT("]\n");
519 519 
@@ -33,7 +33,7 @@ aclnnStatus aclnnL1LossBackwardGetWorkspaceSize(
33```33```
34 34 
35```Cpp35```Cpp
36-aclnnStatus aclnnBinaryCrossEntropy(36+aclnnStatus aclnnL1LossBackward(
37 void *workspace,37 void *workspace,
38 uint64_t workspaceSize,38 uint64_t workspaceSize,
39 aclOpExecutor *executor,39 aclOpExecutor *executor,
@@ -51,7 +51,7 @@ aclnnStatus aclnnMseLossOutGetWorkspaceSize(
51```51```
52 52 
53```Cpp53```Cpp
54-aclnnStatus aclnnLaclnnMseLossOut1Loss(54+aclnnStatus aclnnMseLossOut(
55 void *workspace,55 void *workspace,
56 uint64_t workspaceSize,56 uint64_t workspaceSize,
57 aclOpExecutor *executor,57 aclOpExecutor *executor,
@@ -132,7 +132,7 @@ aclnnStatus aclnnMultilabelMarginLoss(
132 <td class="tg-0lax">out(aclTensor*)</td>132 <td class="tg-0lax">out(aclTensor*)</td>
133 <td class="tg-0lax">输出</td>133 <td class="tg-0lax">输出</td>
134 <td class="tg-0lax">输出的loss,公式中的ℓ(x,y)。</td>134 <td class="tg-0lax">输出的loss,公式中的ℓ(x,y)。</td>
135- <td class="tg-0lax">shape为(N)或者()</td>135+ <td class="tg-0lax">shape为(N)或者()</td>
136 <td class="tg-0lax">与self、isTarget保持一致</td>136 <td class="tg-0lax">与self、isTarget保持一致</td>
137 <td class="tg-0lax">ND</td>137 <td class="tg-0lax">ND</td>
138 <td class="tg-0lax">0、1</td>138 <td class="tg-0lax">0、1</td>
@@ -421,7 +421,7 @@ int main() {
421 ret = aclrtSynchronizeStream(stream);421 ret = aclrtSynchronizeStream(stream);
422 CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtSynchronizeStream failed. ERROR: %d\n", ret); return ret);422 CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclrtSynchronizeStream failed. ERROR: %d\n", ret); return ret);
423 423 
424- // 5. 获取输出的值,将device侧内存上的结果拷贝至host侧,需要根据具体API的接口定义修改424+ // 5. 获取输出的值,将device侧内存上的结果拷贝至host侧内存,需要根据具体API的接口定义修改
425 auto size = GetShapeSize(outShape);425 auto size = GetShapeSize(outShape);
426 std::vector<float> resultData(size, 0);426 std::vector<float> resultData(size, 0);
427 ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), outDeviceAddr,427 ret = aclrtMemcpy(resultData.data(), resultData.size() * sizeof(resultData[0]), outDeviceAddr,
@@ -43,7 +43,7 @@
43 43 
44```Cpp44```Cpp
45aclnnStatus aclnnSmoothL1LossBackwardGetWorkspaceSize(45aclnnStatus aclnnSmoothL1LossBackwardGetWorkspaceSize(
46- const aclTensor* gradOut, 46+ const aclTensor* gradOutput,
47 const aclTensor* self,47 const aclTensor* self,
48 const aclTensor* target, 48 const aclTensor* target,
49 int64_t reduction, 49 int64_t reduction,
@@ -101,7 +101,7 @@ aclnnStatus aclnnSmoothL1LossBackward(
101 <td class="tg-0pky">self(aclTensor*)</td>101 <td class="tg-0pky">self(aclTensor*)</td>
102 <td class="tg-0pky">输入</td>102 <td class="tg-0pky">输入</td>
103 <td class="tg-0pky">输入张量,公式中的输入x。</td>103 <td class="tg-0pky">输入张量,公式中的输入x。</td>
104- <td class="tg-0pky">shape需要与gradOutput、target满足<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。<br>数据类型与gradOut、target的数据类型需满足数据类型推导规则。</td>104+ <td class="tg-0pky">shape需要与gradOutput、target满足<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。<br>数据类型与gradOutput、target的数据类型需满足数据类型推导规则。</td>
105 <td class="tg-0pky">FLOAT、FLOAT16、BFLOAT16</td>105 <td class="tg-0pky">FLOAT、FLOAT16、BFLOAT16</td>
106 <td class="tg-0pky">ND</td>106 <td class="tg-0pky">ND</td>
107 <td class="tg-0pky">1-8</td>107 <td class="tg-0pky">1-8</td>
@@ -111,7 +111,7 @@ aclnnStatus aclnnSmoothL1LossBackward(
111 <td class="tg-0pky">target(aclTensor*)</td>111 <td class="tg-0pky">target(aclTensor*)</td>
112 <td class="tg-0pky">输入</td>112 <td class="tg-0pky">输入</td>
113 <td class="tg-0pky">真实的标签,公式中的输入y。</td>113 <td class="tg-0pky">真实的标签,公式中的输入y。</td>
114- <td class="tg-0pky">shape需要与gradOutput、self满足<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。<br>数据类型与gradOut、target的数据类型需满足数据类型推导规则。</td>114+ <td class="tg-0pky">shape需要与gradOutput、self满足<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。<br>数据类型与gradOutput、target的数据类型需满足数据类型推导规则。</td>
115 <td class="tg-0pky">FLOAT、FLOAT16、BFLOAT16</td>115 <td class="tg-0pky">FLOAT、FLOAT16、BFLOAT16</td>
116 <td class="tg-0pky">ND</td>116 <td class="tg-0pky">ND</td>
117 <td class="tg-0pky">1-8</td>117 <td class="tg-0pky">1-8</td>
@@ -141,7 +141,7 @@ aclnnStatus aclnnSmoothL1LossBackward(
141 <td class="tg-0pky">gradInput(aclTensor*)</td>141 <td class="tg-0pky">gradInput(aclTensor*)</td>
142 <td class="tg-0pky">输出</td>142 <td class="tg-0pky">输出</td>
143 <td class="tg-0pky">计算输出。</td>143 <td class="tg-0pky">计算输出。</td>
144- <td class="tg-0pky">shape为gradOut,self,target的<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast</a>结果</td>144+ <td class="tg-0pky">shape为gradOutput,self,target的<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast</a>结果</td>
145 <td class="tg-0pky">FLOAT、FLOAT16、BFLOAT16</td>145 <td class="tg-0pky">FLOAT、FLOAT16、BFLOAT16</td>
146 <td class="tg-0pky">ND</td>146 <td class="tg-0pky">ND</td>
147 <td class="tg-0pky">1-8</td>147 <td class="tg-0pky">1-8</td>
@@ -190,15 +190,15 @@ aclnnStatus aclnnSmoothL1LossBackward(
190 <tr>190 <tr>
191 <td class="tg-0pky">ACLNN_ERR_PARAM_NULLPTR</td>191 <td class="tg-0pky">ACLNN_ERR_PARAM_NULLPTR</td>
192 <td class="tg-0pky">161001</td>192 <td class="tg-0pky">161001</td>
193- <td class="tg-0pky">传入的self、target、gradOut或gradInput为空指针。</td>193+ <td class="tg-0pky">传入的self、target、gradOutput或gradInput为空指针。</td>
194 </tr>194 </tr>
195 <tr>195 <tr>
196 <td class="tg-0pky" rowspan="4">ACLNN_ERR_PARAM_INVALID</td>196 <td class="tg-0pky" rowspan="4">ACLNN_ERR_PARAM_INVALID</td>
197 <td class="tg-0pky" rowspan="4">161002</td>197 <td class="tg-0pky" rowspan="4">161002</td>
198- <td class="tg-0pky">self、target、gradOut或gradInput的数据类型不在支持的范围之内。</td>198+ <td class="tg-0pky">self、target、gradOutput或gradInput的数据类型不在支持的范围之内。</td>
199 </tr>199 </tr>
200 <tr>200 <tr>
201- <td class="tg-0pky">self、target、gradOut或gradInput的shape不符合约束。</td>201+ <td class="tg-0pky">self、target、gradOutput或gradInput的shape不符合约束。</td>
202 </tr>202 </tr>
203 <tr>203 <tr>
204 <td class="tg-0pky">reduction不符合约束。</td>204 <td class="tg-0pky">reduction不符合约束。</td>
@@ -330,26 +330,26 @@ int main() {
330 CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("Init acl failed. ERROR: %d\n", ret); return ret);330 CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("Init acl failed. ERROR: %d\n", ret); return ret);
331 331 
332 // 2. 构造输入与输出,需要根据API的接口自定义构造332 // 2. 构造输入与输出,需要根据API的接口自定义构造
333- std::vector<int64_t> gradOutShape = {4, 2};333+ std::vector<int64_t> gradOutputShape = {4, 2};
334 std::vector<int64_t> selfShape = {4, 2};334 std::vector<int64_t> selfShape = {4, 2};
335 std::vector<int64_t> targetShape = {4, 2};335 std::vector<int64_t> targetShape = {4, 2};
336 std::vector<int64_t> gradInputShape = {4, 2};336 std::vector<int64_t> gradInputShape = {4, 2};
337 int64_t reduction = 0;337 int64_t reduction = 0;
338 float beta = 1.0;338 float beta = 1.0;
339- void* gradOutDeviceAddr = nullptr;339+ void* gradOutputDeviceAddr = nullptr;
340 void* selfDeviceAddr = nullptr;340 void* selfDeviceAddr = nullptr;
341 void* targetDeviceAddr = nullptr;341 void* targetDeviceAddr = nullptr;
342 void* gradInputDeviceAddr = nullptr;342 void* gradInputDeviceAddr = nullptr;
343- aclTensor* gradOut = nullptr;343+ aclTensor* gradOutput = nullptr;
344 aclTensor* self = nullptr;344 aclTensor* self = nullptr;
345 aclTensor* target = nullptr;345 aclTensor* target = nullptr;
346 aclTensor* gradInput = nullptr;346 aclTensor* gradInput = nullptr;
347- std::vector<float> gradOutHostData = {1, 1, 1, 1, 1, 1, 1, 1};347+ std::vector<float> gradOutputHostData = {1, 1, 1, 1, 1, 1, 1, 1};
348 std::vector<float> selfHostData = {0, 1, 2, 3, 4, 5, 6, 7};348 std::vector<float> selfHostData = {0, 1, 2, 3, 4, 5, 6, 7};
349 std::vector<float> targetHostData = {1, 1, 1, 1, 1, 1, 1, 1};349 std::vector<float> targetHostData = {1, 1, 1, 1, 1, 1, 1, 1};
350 std::vector<float> gradInputHostData(8, 0);350 std::vector<float> gradInputHostData(8, 0);
351- // 创建gradOut aclTensor351+ // 创建gradOutput aclTensor
352- ret = CreateAclTensor(gradOutHostData, gradOutShape, &gradOutDeviceAddr, aclDataType::ACL_FLOAT, &gradOut);352+ ret = CreateAclTensor(gradOutputHostData, gradOutputShape, &gradOutputDeviceAddr, aclDataType::ACL_FLOAT, &gradOutput);
353 CHECK_RET(ret == ACL_SUCCESS, return ret);353 CHECK_RET(ret == ACL_SUCCESS, return ret);
354 // 创建self aclTensor354 // 创建self aclTensor
355 ret = CreateAclTensor(selfHostData, selfShape, &selfDeviceAddr, aclDataType::ACL_FLOAT, &self);355 ret = CreateAclTensor(selfHostData, selfShape, &selfDeviceAddr, aclDataType::ACL_FLOAT, &self);
@@ -365,7 +365,7 @@ int main() {
365 uint64_t workspaceSize = 0;365 uint64_t workspaceSize = 0;
366 aclOpExecutor* executor;366 aclOpExecutor* executor;
367 // 调用aclnnSmoothL1LossBackward第一段接口367 // 调用aclnnSmoothL1LossBackward第一段接口
368- ret = aclnnSmoothL1LossBackwardGetWorkspaceSize(gradOut, self, target, reduction, beta, gradInput, &workspaceSize, &executor);368+ ret = aclnnSmoothL1LossBackwardGetWorkspaceSize(gradOutput, self, target, reduction, beta, gradInput, &workspaceSize, &executor);
369 CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnSmoothL1LossBackwardGetWorkspaceSize failed. ERROR: %d\n", ret); return ret);369 CHECK_RET(ret == ACL_SUCCESS, LOG_PRINT("aclnnSmoothL1LossBackwardGetWorkspaceSize failed. ERROR: %d\n", ret); return ret);
370 // 根据第一段接口计算出的workspaceSize申请device内存370 // 根据第一段接口计算出的workspaceSize申请device内存
371 void* workspaceAddr = nullptr;371 void* workspaceAddr = nullptr;
@@ -392,12 +392,12 @@ int main() {
392 }392 }
393 393 
394 // 6. 释放aclTensor和aclScalar,需要根据具体API的接口定义修改394 // 6. 释放aclTensor和aclScalar,需要根据具体API的接口定义修改
395- aclDestroyTensor(gradOut);395+ aclDestroyTensor(gradOutput);
396 aclDestroyTensor(self);396 aclDestroyTensor(self);
397 aclDestroyTensor(target);397 aclDestroyTensor(target);
398 aclDestroyTensor(gradInput);398 aclDestroyTensor(gradInput);
399 // 7. 释放device资源,需要根据具体API的接口定义参数399 // 7. 释放device资源,需要根据具体API的接口定义参数
400- aclrtFree(gradOutDeviceAddr);400+ aclrtFree(gradOutputDeviceAddr);
401 aclrtFree(selfDeviceAddr);401 aclrtFree(selfDeviceAddr);
402 aclrtFree(targetDeviceAddr);402 aclrtFree(targetDeviceAddr);
403 aclrtFree(gradInputDeviceAddr);403 aclrtFree(gradInputDeviceAddr);
@@ -80,7 +80,7 @@ aclnnStatus aclnnSoftMarginLossBackward(
80 <td class="tg-0pky">self(aclTensor*)</td>80 <td class="tg-0pky">self(aclTensor*)</td>
81 <td class="tg-0pky">输入</td>81 <td class="tg-0pky">输入</td>
82 <td class="tg-0pky">输入张量。</td>82 <td class="tg-0pky">输入张量。</td>
83- <td class="tg-0pky">shape需要与gradOutput、target满足<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。<br>数据类型与gradOut、target的数据类型需满足数据类型推导规则(参见<a href="../../../docs/zh/context/互转换关系.md" target="_blank">互转换关系</a>)。</td>83+ <td class="tg-0pky">shape需要与gradOutput、target满足<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。<br>数据类型与gradOutput、target的数据类型需满足数据类型推导规则(参见<a href="../../../docs/zh/context/互转换关系.md" target="_blank">互转换关系</a>)。</td>
84 <td class="tg-0pky">FLOAT、FLOAT16、BFLOAT16</td>84 <td class="tg-0pky">FLOAT、FLOAT16、BFLOAT16</td>
85 <td class="tg-0pky">ND</td>85 <td class="tg-0pky">ND</td>
86 <td class="tg-0pky">1-8</td>86 <td class="tg-0pky">1-8</td>
@@ -90,7 +90,7 @@ aclnnStatus aclnnSoftMarginLossBackward(
90 <td class="tg-0pky">target(aclTensor*)</td>90 <td class="tg-0pky">target(aclTensor*)</td>
91 <td class="tg-0pky">输入</td>91 <td class="tg-0pky">输入</td>
92 <td class="tg-0pky">真实的标签,公式中的输入y。</td>92 <td class="tg-0pky">真实的标签,公式中的输入y。</td>
93- <td class="tg-0pky">shape需要与gradOutput、self满足<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。<br>数据类型与gradOut、target的数据类型需满足数据类型推导规则(参见<a href="../../../docs/zh/context/互转换关系.md" target="_blank">互转换关系</a>)。</td>93+ <td class="tg-0pky">shape需要与gradOutput、self满足<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast关系</a>。<br>数据类型与gradOutput、target的数据类型需满足数据类型推导规则(参见<a href="../../../docs/zh/context/互转换关系.md" target="_blank">互转换关系</a>)。</td>
94 <td class="tg-0pky">FLOAT、FLOAT16、BFLOAT16</td>94 <td class="tg-0pky">FLOAT、FLOAT16、BFLOAT16</td>
95 <td class="tg-0pky">ND</td>95 <td class="tg-0pky">ND</td>
96 <td class="tg-0pky">1-8</td>96 <td class="tg-0pky">1-8</td>
@@ -110,7 +110,7 @@ aclnnStatus aclnnSoftMarginLossBackward(
110 <td class="tg-0pky">out(aclTensor*)</td>110 <td class="tg-0pky">out(aclTensor*)</td>
111 <td class="tg-0pky">输出</td>111 <td class="tg-0pky">输出</td>
112 <td class="tg-0pky">计算输出。</td>112 <td class="tg-0pky">计算输出。</td>
113- <td class="tg-0pky">shape为gradOut,self,target的<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast</a>结果。</td>113+ <td class="tg-0pky">shape为gradOutput,self,target的<a href="../../../docs/zh/context/broadcast关系.md" target="_blank">broadcast</a>结果。</td>
114 <td class="tg-0pky">FLOAT、FLOAT16、BFLOAT16</td>114 <td class="tg-0pky">FLOAT、FLOAT16、BFLOAT16</td>
115 <td class="tg-0pky">ND</td>115 <td class="tg-0pky">ND</td>
116 <td class="tg-0pky">1-8</td>116 <td class="tg-0pky">1-8</td>
@@ -335,7 +335,8 @@ aclnnStatus aclnnApplyAdamWV2(
335 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。335 aclnnStatus:返回状态码,具体参见[aclnn返回码](../../../docs/zh/context/aclnn返回码.md)。
336 336 
337## 约束说明337## 约束说明
338-- 输入张量中varRef、mRef、vRef、grad的数据类型必须一致时,数据类型支持FLOAT16、BFLOAT16、FLOAT32。338+ 
339+- 输入张量中varRef、mRef、vRef、grad的数据类型必须一致,且数据类型支持FLOAT16、BFLOAT16、FLOAT32。
339- 输入张量中varRef、mRef、vRef、grad的shape必须保持一致。340- 输入张量中varRef、mRef、vRef、grad的shape必须保持一致。
340- 确定性计算:341- 确定性计算:
341 - aclnnApplyAdamWV2默认确定性实现。342 - aclnnApplyAdamWV2默认确定性实现。