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.

test_utils.py 6.5 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. # -*- coding: utf-8 -*-
  2. import functools
  3. import os
  4. import numpy as np
  5. from megenginelite import *
  6. def require_cuda(func):
  7. """a decorator that disables a testcase if cuda is not enabled"""
  8. @functools.wraps(func)
  9. def wrapped(*args, **kwargs):
  10. if LiteGlobal.get_device_count(LiteDeviceType.LITE_CUDA):
  11. return func(*args, **kwargs)
  12. return wrapped
  13. @require_cuda
  14. def test_tensor_collect_batch():
  15. batch_tensor = TensorBatchCollector(
  16. [4, 8, 8], dtype=LiteDataType.LITE_INT, device_type=LiteDeviceType.LITE_CUDA
  17. )
  18. arr = np.ones([8, 8], "int32")
  19. for i in range(4):
  20. batch_tensor.collect(arr)
  21. arr += 1
  22. data = batch_tensor.to_numpy()
  23. assert data.shape[0] == 4
  24. assert data.shape[1] == 8
  25. assert data.shape[2] == 8
  26. for i in range(4):
  27. for j in range(64):
  28. assert data[i][j // 8][j % 8] == i + 1
  29. def test_tensor_collect_batch_cpu():
  30. batch_tensor = TensorBatchCollector(
  31. [4, 8, 8], dtype=LiteDataType.LITE_INT, device_type=LiteDeviceType.LITE_CPU
  32. )
  33. arr = np.ones([8, 8], "int32")
  34. for i in range(4):
  35. batch_tensor.collect(arr)
  36. arr += 1
  37. data = batch_tensor.to_numpy()
  38. assert data.shape[0] == 4
  39. assert data.shape[1] == 8
  40. assert data.shape[2] == 8
  41. for i in range(4):
  42. for j in range(64):
  43. assert data[i][j // 8][j % 8] == i + 1
  44. @require_cuda
  45. def test_tensor_collect_batch_by_index():
  46. batch_tensor = TensorBatchCollector(
  47. [4, 8, 8], dtype=LiteDataType.LITE_INT, device_type=LiteDeviceType.LITE_CUDA
  48. )
  49. arr = np.ones([8, 8], "int32")
  50. arr += 1 # ==2
  51. batch_tensor.collect_id(arr, 1)
  52. arr -= 1 # ==1
  53. batch_tensor.collect_id(arr, 0)
  54. arr += 2 # ==3
  55. batch_tensor.collect_id(arr, 2)
  56. arr += 1 # ==4
  57. batch_tensor.collect_id(arr, 3)
  58. data = batch_tensor.to_numpy()
  59. assert data.shape[0] == 4
  60. assert data.shape[1] == 8
  61. assert data.shape[2] == 8
  62. for i in range(4):
  63. for j in range(64):
  64. assert data[i][j // 8][j % 8] == i + 1
  65. @require_cuda
  66. def test_tensor_collect_batch_tensor():
  67. batch_tensor = TensorBatchCollector(
  68. [4, 6, 8], dtype=LiteDataType.LITE_INT, device_type=LiteDeviceType.LITE_CUDA
  69. )
  70. nparr = np.ones([6, 8], "int32")
  71. tensor = LiteTensor(LiteLayout([6, 8], LiteDataType.LITE_INT))
  72. for i in range(4):
  73. tensor.set_data_by_share(nparr)
  74. batch_tensor.collect(tensor)
  75. nparr += 1
  76. data = batch_tensor.to_numpy()
  77. assert data.shape[0] == 4
  78. assert data.shape[1] == 6
  79. assert data.shape[2] == 8
  80. for i in range(4):
  81. for j in range(48):
  82. assert data[i][j // 8][j % 8] == i + 1
  83. def test_tensor_collect_batch_tensor_cpu():
  84. batch_tensor = TensorBatchCollector(
  85. [4, 6, 8], dtype=LiteDataType.LITE_INT, device_type=LiteDeviceType.LITE_CPU
  86. )
  87. nparr = np.ones([6, 8], "int32")
  88. tensor = LiteTensor(LiteLayout([6, 8], LiteDataType.LITE_INT))
  89. for i in range(4):
  90. tensor.set_data_by_share(nparr)
  91. batch_tensor.collect(tensor)
  92. nparr += 1
  93. data = batch_tensor.to_numpy()
  94. assert data.shape[0] == 4
  95. assert data.shape[1] == 6
  96. assert data.shape[2] == 8
  97. for i in range(4):
  98. for j in range(48):
  99. assert data[i][j // 8][j % 8] == i + 1
  100. @require_cuda
  101. def test_tensor_collect_batch_ctypes():
  102. batch_tensor = TensorBatchCollector(
  103. [4, 6, 8], dtype=LiteDataType.LITE_INT, device_type=LiteDeviceType.LITE_CUDA
  104. )
  105. nparr = np.ones([6, 8], "int32")
  106. for i in range(4):
  107. in_data = nparr.ctypes.data
  108. batch_tensor.collect_by_ctypes(in_data, nparr.nbytes)
  109. nparr += 1
  110. data = batch_tensor.to_numpy()
  111. assert data.shape[0] == 4
  112. assert data.shape[1] == 6
  113. assert data.shape[2] == 8
  114. for i in range(4):
  115. for j in range(48):
  116. assert data[i][j // 8][j % 8] == i + 1
  117. def test_tensor_collect_batch_ctypes_cpu():
  118. batch_tensor = TensorBatchCollector(
  119. [4, 6, 8], dtype=LiteDataType.LITE_INT, device_type=LiteDeviceType.LITE_CPU
  120. )
  121. nparr = np.ones([6, 8], "int32")
  122. for i in range(4):
  123. in_data = nparr.ctypes.data
  124. batch_tensor.collect_by_ctypes(in_data, nparr.nbytes)
  125. nparr += 1
  126. data = batch_tensor.to_numpy()
  127. assert data.shape[0] == 4
  128. assert data.shape[1] == 6
  129. assert data.shape[2] == 8
  130. for i in range(4):
  131. for j in range(48):
  132. assert data[i][j // 8][j % 8] == i + 1
  133. @require_cuda
  134. def test_tensor_collect_batch_device_tensor():
  135. all_tensor = LiteTensor(
  136. LiteLayout([4, 6, 8], dtype=LiteDataType.LITE_INT),
  137. device_type=LiteDeviceType.LITE_CUDA,
  138. )
  139. batch_tensor = TensorBatchCollector([4, 6, 8], tensor=all_tensor)
  140. nparr = np.ones([6, 8], "int32")
  141. tensor = LiteTensor(LiteLayout([6, 8], LiteDataType.LITE_INT))
  142. for i in range(4):
  143. tensor.set_data_by_share(nparr)
  144. batch_tensor.collect(tensor)
  145. nparr += 1
  146. data = batch_tensor.to_numpy()
  147. assert data.shape[0] == 4
  148. assert data.shape[1] == 6
  149. assert data.shape[2] == 8
  150. for i in range(4):
  151. for j in range(48):
  152. assert data[i][j // 8][j % 8] == i + 1
  153. @require_cuda
  154. def test_tensor_collect_batch_device_numpy():
  155. all_tensor = LiteTensor(
  156. LiteLayout([4, 6, 8], dtype=LiteDataType.LITE_INT),
  157. device_type=LiteDeviceType.LITE_CUDA,
  158. )
  159. batch_tensor = TensorBatchCollector([4, 6, 8], tensor=all_tensor)
  160. nparr = np.ones([6, 8], "int32")
  161. for i in range(4):
  162. batch_tensor.collect(nparr)
  163. nparr += 1
  164. data = batch_tensor.to_numpy()
  165. assert data.shape[0] == 4
  166. assert data.shape[1] == 6
  167. assert data.shape[2] == 8
  168. for i in range(4):
  169. for j in range(48):
  170. assert data[i][j // 8][j % 8] == i + 1
  171. def test_get_model_io_ahead():
  172. source_dir = os.getenv("LITE_TEST_RESOURCE")
  173. model_path = os.path.join(source_dir, "shufflenet.mge")
  174. ios = get_model_io_info(model_path)
  175. assert len(ios.inputs) == 1
  176. assert ios.inputs[0].name == "data"
  177. assert ios.inputs[0].config_layout.shapes[1] == 3
  178. assert ios.inputs[0].config_layout.shapes[2] == 224
  179. assert ios.inputs[0].config_layout.shapes[3] == 224
  180. assert len(ios.outputs) == 1
  181. assert ios.outputs[0].name == "TRUE_DIV(EXP[12065],reduce0[12067])[12077]"
  182. assert ios.outputs[0].config_layout.shapes[0] == 1
  183. assert ios.outputs[0].config_layout.shapes[1] == 1000