You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

acl_session_test_common.h 7.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. /**
  2. * Copyright 2020 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #ifndef MINDSPORE_ACL_SESSION_TEST_COMMON_H
  17. #define MINDSPORE_ACL_SESSION_TEST_COMMON_H
  18. #include "common/common_test.h"
  19. #include "serving/core/server.h"
  20. #include "serving/core/session.h"
  21. #include "include/inference.h"
  22. #include "include/infer_tensor.h"
  23. #include "serving/core/serving_tensor.h"
  24. #include "serving/acl/acl_session.h"
  25. #include "serving/acl/model_process.h"
  26. #include "serving/acl/dvpp_process.h"
  27. #include "acl_stub.h"
  28. class MockDeviceRunMode : public AclRunMode {
  29. public:
  30. aclError aclrtGetRunMode(aclrtRunMode *runMode) override {
  31. *runMode = aclrtRunMode::ACL_DEVICE;
  32. return ACL_ERROR_NONE;
  33. }
  34. };
  35. class AclSessionTest : public testing::Test {
  36. public:
  37. AclSessionTest() = default;
  38. void SetUp() override {
  39. g_acl_data_buffer = &g_acl_data_buffer_default;
  40. g_acl_env = &g_acl_env_default;
  41. g_acl_dataset = &g_acl_dataset_default;
  42. g_acl_model = &g_acl_model_default;
  43. g_acl_model_desc = &g_acl_model_desc_default;
  44. g_acl_device_context_stream = &g_acl_device_context_stream_default;
  45. g_acl_memory = &g_acl_memory_default;
  46. g_acl_dvpp_pic_desc = &g_acl_dvpp_pic_desc_default;
  47. g_acl_dvpp_roi_config = &g_acl_dvpp_roi_config_default;
  48. g_acl_dvpp_resize_config = &g_acl_dvpp_resize_config_default;
  49. g_acl_dvpp_channel_desc = &g_acl_dvpp_channel_desc_default;
  50. g_acl_dvpp_process = &g_acl_dvpp_process_default;
  51. g_acl_run_mode = &acl_run_mode_default;
  52. g_acl_jpeg_lib = &acl_jpeg_lib_default;
  53. }
  54. void TearDown() override {
  55. EXPECT_TRUE(g_acl_data_buffer->Check());
  56. EXPECT_TRUE(g_acl_env->Check());
  57. EXPECT_TRUE(g_acl_dataset->Check());
  58. EXPECT_TRUE(g_acl_model->Check());
  59. EXPECT_TRUE(g_acl_model_desc->Check());
  60. EXPECT_TRUE(g_acl_device_context_stream->Check());
  61. EXPECT_TRUE(g_acl_memory->Check());
  62. EXPECT_TRUE(g_acl_dvpp_pic_desc->Check());
  63. EXPECT_TRUE(g_acl_dvpp_roi_config->Check());
  64. EXPECT_TRUE(g_acl_dvpp_resize_config->Check());
  65. EXPECT_TRUE(g_acl_dvpp_channel_desc->Check());
  66. EXPECT_TRUE(g_acl_dvpp_process->Check());
  67. EXPECT_TRUE(g_acl_jpeg_lib->Check());
  68. }
  69. AclDataBuffer g_acl_data_buffer_default;
  70. AclEnv g_acl_env_default;
  71. AclDataSet g_acl_dataset_default;
  72. AclModel g_acl_model_default;
  73. AclModelDesc g_acl_model_desc_default;
  74. AclDeviceContextStream g_acl_device_context_stream_default;
  75. AclMemory g_acl_memory_default;
  76. AclDvppPicDesc g_acl_dvpp_pic_desc_default;
  77. AclDvppRoiConfig g_acl_dvpp_roi_config_default;
  78. AclDvppResizeConfig g_acl_dvpp_resize_config_default;
  79. AclDvppChannelDesc g_acl_dvpp_channel_desc_default;
  80. AclDvppProcess g_acl_dvpp_process_default;
  81. AclRunMode acl_run_mode_default;
  82. MockDeviceRunMode acl_device_run_mode;
  83. AclJpegLib acl_jpeg_lib_default = AclJpegLib(0, 0);
  84. void SetDeviceRunMode() { g_acl_run_mode = &acl_device_run_mode; }
  85. void CreateTensor(ms_serving::Tensor &tensor, const std::vector<int64_t> &shape, ms_serving::DataType data_type,
  86. std::size_t data_size = INT64_MAX) {
  87. if (data_size == INT64_MAX) {
  88. data_size = GetDataTypeSize(data_type);
  89. for (auto item : shape) {
  90. data_size *= item;
  91. }
  92. }
  93. tensor.set_data(std::string(data_size, 0));
  94. tensor.set_tensor_type(data_type);
  95. auto tensor_shape = tensor.mutable_tensor_shape();
  96. for (auto item : shape) {
  97. tensor_shape->add_dims(item);
  98. }
  99. }
  100. size_t GetDataTypeSize(ms_serving::DataType data_type) {
  101. const std::map<ms_serving::DataType, size_t> type_size_map{
  102. {ms_serving::DataType::MS_BOOL, sizeof(bool)}, {ms_serving::DataType::MS_INT8, sizeof(int8_t)},
  103. {ms_serving::DataType::MS_UINT8, sizeof(uint8_t)}, {ms_serving::DataType::MS_INT16, sizeof(int16_t)},
  104. {ms_serving::DataType::MS_UINT16, sizeof(uint16_t)}, {ms_serving::DataType::MS_INT32, sizeof(int32_t)},
  105. {ms_serving::DataType::MS_UINT32, sizeof(uint32_t)}, {ms_serving::DataType::MS_INT64, sizeof(int64_t)},
  106. {ms_serving::DataType::MS_UINT64, sizeof(uint64_t)}, {ms_serving::DataType::MS_FLOAT16, 2},
  107. {ms_serving::DataType::MS_FLOAT32, sizeof(float)}, {ms_serving::DataType::MS_FLOAT64, sizeof(double)},
  108. };
  109. auto it = type_size_map.find(data_type);
  110. if (it == type_size_map.end()) {
  111. EXPECT_TRUE(false);
  112. return 0;
  113. }
  114. return it->second;
  115. }
  116. void CheckTensorItem(const ms_serving::Tensor &tensor, const std::vector<int64_t> &expect_shape,
  117. ms_serving::DataType expect_data_type) {
  118. std::vector<int64_t> tensor_shape;
  119. for (auto item : tensor.tensor_shape().dims()) {
  120. tensor_shape.push_back(item);
  121. }
  122. EXPECT_EQ(expect_shape, tensor_shape);
  123. EXPECT_EQ(expect_data_type, tensor.tensor_type());
  124. int64_t elem_cnt = 1;
  125. for (auto item : expect_shape) {
  126. elem_cnt *= item;
  127. }
  128. auto data_size = GetDataTypeSize(expect_data_type);
  129. EXPECT_EQ(data_size * elem_cnt, tensor.data().size());
  130. }
  131. };
  132. class MockModelDesc : public AclModelDesc {
  133. public:
  134. MockModelDesc() {}
  135. MockModelDesc(const aclmdlDesc &mock_model_desc) : mock_model_desc_(mock_model_desc) {}
  136. aclmdlDesc *aclmdlCreateDesc() override {
  137. aclmdlDesc *model_desc = AclModelDesc::aclmdlCreateDesc();
  138. *model_desc = mock_model_desc_;
  139. return model_desc;
  140. }
  141. aclmdlDesc mock_model_desc_;
  142. };
  143. class AddMockAclModel : public AclModel {
  144. public:
  145. aclError aclmdlExecute(uint32_t modelId, const aclmdlDataset *input, aclmdlDataset *output) override {
  146. if (AclModel::aclmdlExecute(modelId, input, output) != ACL_ERROR_NONE) {
  147. return 1;
  148. }
  149. if (input->data_buffers.size() != 2) {
  150. return 1;
  151. }
  152. auto &input0 = input->data_buffers[0];
  153. auto &input1 = input->data_buffers[1];
  154. std::size_t expect_count = input0->size / sizeof(float);
  155. if (input0->size != expect_count * sizeof(float) || input1->size != expect_count * sizeof(float)) {
  156. return 1;
  157. }
  158. if (output->data_buffers.size() != 1) {
  159. return 1;
  160. }
  161. auto &output0 = output->data_buffers[0];
  162. if (output0->size != expect_count * sizeof(float)) {
  163. return 1;
  164. }
  165. auto input0_data = reinterpret_cast<const float *>(input0->data);
  166. auto input1_data = reinterpret_cast<const float *>(input1->data);
  167. auto output0_data = reinterpret_cast<float *>(output0->data);
  168. for (size_t i = 0; i < expect_count; i++) {
  169. output0_data[i] = input0_data[i] + input1_data[i];
  170. }
  171. return ACL_ERROR_NONE;
  172. }
  173. aclError aclmdlExecuteAsync(uint32_t modelId, const aclmdlDataset *input, aclmdlDataset *output,
  174. aclrtStream stream) override {
  175. return aclmdlExecute(modelId, input, output);
  176. }
  177. };
  178. #endif // MINDSPORE_ACL_SESSION_TEST_COMMON_H