hyperray 0.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (788) hide show
  1. hyperdrone/__init__.py +53 -0
  2. hyperdrone/_cuda/__init__.py +76 -0
  3. hyperdrone/_dlpack.py +30 -0
  4. hyperdrone/_jit/__init__.py +131 -0
  5. hyperdrone/_jit/_build.py +113 -0
  6. hyperdrone/_jit/_lock.py +23 -0
  7. hyperdrone/_jit/_patches.py +99 -0
  8. hyperdrone/_jit/_toolchain.py +17 -0
  9. hyperdrone/_jit/_workspace.py +94 -0
  10. hyperdrone/_native/cmake/hyperdrone_jit.cmake +65 -0
  11. hyperdrone/_native/common/bindings.h +39 -0
  12. hyperdrone/_native/common/cuda_staging.h +80 -0
  13. hyperdrone/_native/common/jit_host.h +69 -0
  14. hyperdrone/_native/common/models.h +24 -0
  15. hyperdrone/_native/common/verbosity.h +52 -0
  16. hyperdrone/_native/dynamics/CMakeLists.txt +63 -0
  17. hyperdrone/_native/dynamics/host.cpp +188 -0
  18. hyperdrone/_native/dynamics/iface.h +71 -0
  19. hyperdrone/_native/dynamics/impl.cpp +638 -0
  20. hyperdrone/_native/env/CMakeLists.txt +98 -0
  21. hyperdrone/_native/env/environment.cpp +190 -0
  22. hyperdrone/_native/env/environment.h +282 -0
  23. hyperdrone/_native/env/impl.cpp +779 -0
  24. hyperdrone/_native/env/rotorcraft_bindings.cpp +53 -0
  25. hyperdrone/_native/render/CMakeLists.txt +96 -0
  26. hyperdrone/_native/render/renderer.cpp +973 -0
  27. hyperdrone/_native/render/rig_bindings.h +152 -0
  28. hyperdrone/_native/render/scene_bindings.cpp +515 -0
  29. hyperdrone/_outputs.py +32 -0
  30. hyperdrone/_parameters.py +36 -0
  31. hyperdrone/_vendor/rl-tools/CMakeLists.txt +207 -0
  32. hyperdrone/_vendor/rl-tools/LICENSE +21 -0
  33. hyperdrone/_vendor/rl-tools/cmake/autodetect/all.cmake +34 -0
  34. hyperdrone/_vendor/rl-tools/cmake/autodetect/git-diff.cmake +100 -0
  35. hyperdrone/_vendor/rl-tools/cmake/autodetect/git-hash.cmake +24 -0
  36. hyperdrone/_vendor/rl-tools/cmake/autodetect/summary.cmake +65 -0
  37. hyperdrone/_vendor/rl-tools/cmake/autodetect/tier0-compiler.cmake +18 -0
  38. hyperdrone/_vendor/rl-tools/cmake/autodetect/tier1-blas.cmake +51 -0
  39. hyperdrone/_vendor/rl-tools/cmake/autodetect/tier2-json-hdf5-zlib.cmake +82 -0
  40. hyperdrone/_vendor/rl-tools/cmake/autodetect/tier3-tensorboard.cmake +25 -0
  41. hyperdrone/_vendor/rl-tools/cmake/autodetect/tier4-cuda.cmake +42 -0
  42. hyperdrone/_vendor/rl-tools/cmake/autodetect/tier5-cli11.cmake +24 -0
  43. hyperdrone/_vendor/rl-tools/cmake/dependencies/assimp.cmake +19 -0
  44. hyperdrone/_vendor/rl-tools/cmake/legacy_flags.cmake +33 -0
  45. hyperdrone/_vendor/rl-tools/cmake/optional/assimp.cmake +30 -0
  46. hyperdrone/_vendor/rl-tools/cmake/optional/googletest.cmake +20 -0
  47. hyperdrone/_vendor/rl-tools/cmake/optional/metal.cmake +25 -0
  48. hyperdrone/_vendor/rl-tools/cmake/optional/mujoco.cmake +89 -0
  49. hyperdrone/_vendor/rl-tools/cmake/optional/optix.cmake +25 -0
  50. hyperdrone/_vendor/rl-tools/cmake/optional/raytracing.cmake +105 -0
  51. hyperdrone/_vendor/rl-tools/cmake/optional/raytracing_generic.cmake +2 -0
  52. hyperdrone/_vendor/rl-tools/cmake/optional/vulkan.cmake +4 -0
  53. hyperdrone/_vendor/rl-tools/cmake/optional/webgpu.cmake +24 -0
  54. hyperdrone/_vendor/rl-tools/cmake/scripts/embed_text.cmake +7 -0
  55. hyperdrone/_vendor/rl-tools/cmake/scripts/generate-git-snapshot.cmake +138 -0
  56. hyperdrone/_vendor/rl-tools/include/conta/conta.h +1480 -0
  57. hyperdrone/_vendor/rl-tools/include/metra/metra.h +381 -0
  58. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/matrix.h +143 -0
  59. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_arm.h +33 -0
  60. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_cpu.h +314 -0
  61. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_cpu_accelerate.h +37 -0
  62. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_cpu_blas.h +67 -0
  63. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_cpu_mkl.h +38 -0
  64. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_cpu_openblas.h +34 -0
  65. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_cuda.h +289 -0
  66. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_dummy.h +20 -0
  67. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_esp32.h +29 -0
  68. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_generic.h +944 -0
  69. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/operations_wasm32.h +13 -0
  70. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/matrix/persist_code.h +136 -0
  71. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_arm.h +1 -0
  72. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_cpu.h +94 -0
  73. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_cpu_accelerate.h +25 -0
  74. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_cpu_blas.h +115 -0
  75. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_cpu_mkl.h +25 -0
  76. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_cpu_openblas.h +25 -0
  77. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_cuda.h +713 -0
  78. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/operations_generic.h +1356 -0
  79. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/persist_code.h +130 -0
  80. hyperdrone/_vendor/rl-tools/include/rl_tools/containers/tensor/tensor.h +490 -0
  81. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/arm.h +91 -0
  82. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu.h +210 -0
  83. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu_accelerate.h +23 -0
  84. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu_blas.h +21 -0
  85. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu_emscripten.h +20 -0
  86. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu_mkl.h +45 -0
  87. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu_openblas.h +56 -0
  88. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cpu_tensorboard.h +34 -0
  89. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cuda.h +464 -0
  90. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/cuda_streams.h +23 -0
  91. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/devices.h +105 -0
  92. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/dummy.h +55 -0
  93. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/esp32.h +85 -0
  94. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/generic.h +0 -0
  95. hyperdrone/_vendor/rl-tools/include/rl_tools/devices/wasm32.h +59 -0
  96. hyperdrone/_vendor/rl-tools/include/rl_tools/dyn/model.h +218 -0
  97. hyperdrone/_vendor/rl-tools/include/rl_tools/dyn/operations_generic.h +769 -0
  98. hyperdrone/_vendor/rl-tools/include/rl_tools/dyn/persist.h +278 -0
  99. hyperdrone/_vendor/rl-tools/include/rl_tools/dyn/policy_adapter.h +100 -0
  100. hyperdrone/_vendor/rl-tools/include/rl_tools/dyn/policy_adapter_persist.h +52 -0
  101. hyperdrone/_vendor/rl-tools/include/rl_tools/dyn/tensor_operations_generic.h +55 -0
  102. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/applications/l2f/c_backend.h +117 -0
  103. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/applications/l2f/c_interface.h +36 -0
  104. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/applications/l2f/l2f.h +98 -0
  105. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/applications/l2f/operations_dyn.h +18 -0
  106. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/applications/l2f/operations_generic.h +268 -0
  107. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/debugging_pool/c_backend.h +31 -0
  108. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/debugging_pool/c_interface.h +12 -0
  109. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/executor/c_backend.h +98 -0
  110. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/executor/c_interface.h +50 -0
  111. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/executor/executor.h +133 -0
  112. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/executor/helper.h +109 -0
  113. hyperdrone/_vendor/rl-tools/include/rl_tools/inference/executor/operations_generic.h +219 -0
  114. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_arduino.h +117 -0
  115. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_arm.h +56 -0
  116. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_cpu.h +57 -0
  117. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_cpu_tensorboard.h +151 -0
  118. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_cuda.h +65 -0
  119. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_dummy.h +45 -0
  120. hyperdrone/_vendor/rl-tools/include/rl_tools/logging/operations_wasm32.h +56 -0
  121. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_arm.h +98 -0
  122. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_cpu.h +138 -0
  123. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_cuda.h +380 -0
  124. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_dummy.h +93 -0
  125. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_esp32.h +92 -0
  126. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_generic.h +295 -0
  127. hyperdrone/_vendor/rl-tools/include/rl_tools/math/operations_wasm32.h +230 -0
  128. hyperdrone/_vendor/rl-tools/include/rl_tools/mode/mode.h +98 -0
  129. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/activation_functions.h +113 -0
  130. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/capability/capability.h +61 -0
  131. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/capability/persist_code.h +31 -0
  132. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/group.h +99 -0
  133. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/avg_pool2d/layer.h +122 -0
  134. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/avg_pool2d/operations_cuda.h +64 -0
  135. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/avg_pool2d/operations_generic.h +186 -0
  136. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/avg_pool2d/persist.h +33 -0
  137. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/conv2d/layer.h +300 -0
  138. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/conv2d/operations_cpu_mkl.h +590 -0
  139. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/conv2d/operations_cuda.h +809 -0
  140. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/conv2d/operations_generic.h +1219 -0
  141. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/conv2d/persist.h +99 -0
  142. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/conv2d/persist_code.h +170 -0
  143. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/layer.h +145 -0
  144. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_arm/dsp.h +63 -0
  145. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_arm/opt.h +173 -0
  146. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_cpu.h +13 -0
  147. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_cpu_accelerate.h +66 -0
  148. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_cpu_blas.h +282 -0
  149. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_cpu_mkl.h +66 -0
  150. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_cpu_openblas.h +65 -0
  151. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_cuda.h +519 -0
  152. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_dummy.h +8 -0
  153. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_esp32/dsp.h +58 -0
  154. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_esp32/opt.h +167 -0
  155. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/operations_generic.h +429 -0
  156. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/persist.h +62 -0
  157. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/persist_code.h +178 -0
  158. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dense/persist_common.h +59 -0
  159. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dynamic_conv2d/layer.h +188 -0
  160. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dynamic_conv2d/operations_cuda.h +356 -0
  161. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dynamic_conv2d/operations_generic.h +536 -0
  162. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/dynamic_conv2d/persist.h +32 -0
  163. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/embedding/layer.h +119 -0
  164. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/embedding/operations_generic.h +223 -0
  165. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/embedding/persist.h +46 -0
  166. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/flatten/layer.h +121 -0
  167. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/flatten/operations_generic.h +154 -0
  168. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/flatten/persist.h +44 -0
  169. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/flatten/persist_code.h +106 -0
  170. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/gru/helper_operations_cuda.h +602 -0
  171. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/gru/helper_operations_generic.h +251 -0
  172. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/gru/layer.h +206 -0
  173. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/gru/operations_generic.h +889 -0
  174. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/gru/persist.h +75 -0
  175. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/gru/persist_code.h +199 -0
  176. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/layers.h +3 -0
  177. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/max_pool2d/layer.h +143 -0
  178. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/max_pool2d/operations_cuda.h +80 -0
  179. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/max_pool2d/operations_generic.h +216 -0
  180. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/max_pool2d/persist.h +39 -0
  181. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_cpu.h +1 -0
  182. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_cpu_accelerate.h +1 -0
  183. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_cpu_blas.h +1 -0
  184. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_cpu_mkl.h +3 -0
  185. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_cpu_openblas.h +1 -0
  186. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_cuda.h +9 -0
  187. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_dummy.h +1 -0
  188. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/operations_generic.h +3 -0
  189. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/resnet_block/layer.h +223 -0
  190. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/resnet_block/operations_cuda.h +138 -0
  191. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/resnet_block/operations_generic.h +446 -0
  192. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/resnet_block/persist.h +70 -0
  193. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/sample_and_squash/layer.h +154 -0
  194. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/sample_and_squash/operations_cuda.h +119 -0
  195. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/sample_and_squash/operations_generic.h +502 -0
  196. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/sample_and_squash/persist.h +50 -0
  197. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/sample_and_squash/persist_code.h +173 -0
  198. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/standardize/layer.h +116 -0
  199. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/standardize/operations_cuda.h +156 -0
  200. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/standardize/operations_generic.h +295 -0
  201. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/standardize/persist.h +83 -0
  202. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/standardize/persist_code.h +163 -0
  203. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/td3_sampling/layer.h +123 -0
  204. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/td3_sampling/operations_generic.h +272 -0
  205. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/td3_sampling/persist.h +17 -0
  206. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/td3_sampling/persist_code.h +164 -0
  207. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/unflatten/layer.h +122 -0
  208. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/unflatten/operations_cuda.h +55 -0
  209. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/unflatten/operations_generic.h +160 -0
  210. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/unflatten/persist.h +47 -0
  211. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/unflatten/persist_code.h +106 -0
  212. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/upsample2d/layer.h +132 -0
  213. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/upsample2d/operations_cuda.h +141 -0
  214. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/layers/upsample2d/operations_generic.h +230 -0
  215. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/loss_functions/categorical_cross_entropy/operations_generic.h +102 -0
  216. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/loss_functions/mse/operations_cuda.h +97 -0
  217. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/loss_functions/mse/operations_generic.h +101 -0
  218. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/loss_functions/operations_generic.h +2 -0
  219. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/nn.h +14 -0
  220. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cpu.h +1 -0
  221. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cpu_accelerate.h +1 -0
  222. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cpu_blas.h +1 -0
  223. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cpu_mkl.h +1 -0
  224. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cpu_mux.h +16 -0
  225. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cpu_openblas.h +1 -0
  226. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_cuda.h +2 -0
  227. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_dummy.h +1 -0
  228. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/operations_generic.h +15 -0
  229. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/adam.h +121 -0
  230. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/instance/operations_cuda.h +98 -0
  231. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/instance/operations_generic.h +150 -0
  232. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/instance/persist.h +39 -0
  233. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/instance/persist_code.h +80 -0
  234. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/operations_cuda.h +85 -0
  235. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/operations_generic.h +109 -0
  236. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/adam/persist.h +25 -0
  237. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/lamb/instance/operations_generic.h +107 -0
  238. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/lamb/lamb.h +40 -0
  239. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/lamb/operations_generic.h +68 -0
  240. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/optimizers.h +3 -0
  241. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/instance/operations_cuda.h +85 -0
  242. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/instance/operations_generic.h +140 -0
  243. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/instance/persist.h +37 -0
  244. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/instance/persist_code.h +72 -0
  245. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/operations_cuda.h +49 -0
  246. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/operations_generic.h +50 -0
  247. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/sgd/sgd.h +92 -0
  248. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/optimizers/update.h +54 -0
  249. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/parameters/operations_cuda.h +0 -0
  250. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/parameters/operations_generic.h +98 -0
  251. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/parameters/parameters.h +79 -0
  252. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/parameters/persist.h +34 -0
  253. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/parameters/persist_code.h +136 -0
  254. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/persist.h +2 -0
  255. hyperdrone/_vendor/rl-tools/include/rl_tools/nn/persist_code.h +27 -0
  256. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/behaviors/skip_parameter_gradients.h +65 -0
  257. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/group/README.md +107 -0
  258. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/group/model.h +19 -0
  259. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/group/persist_code.h +77 -0
  260. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp/network.h +174 -0
  261. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp/operations_cuda.h +10 -0
  262. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp/operations_dummy.h +8 -0
  263. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp/operations_generic.h +407 -0
  264. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp/persist.h +56 -0
  265. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp/persist_code.h +137 -0
  266. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp_unconditional_stddev/network.h +55 -0
  267. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp_unconditional_stddev/operations_generic.h +86 -0
  268. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp_unconditional_stddev/persist.h +43 -0
  269. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/mlp_unconditional_stddev/persist_code.h +142 -0
  270. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/models.h +3 -0
  271. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/multi_agent_wrapper/model.h +148 -0
  272. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/multi_agent_wrapper/operations_generic.h +288 -0
  273. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/multi_agent_wrapper/persist.h +25 -0
  274. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/multi_agent_wrapper/persist_code.h +71 -0
  275. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/operations_cpu.h +0 -0
  276. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/operations_cuda.h +1 -0
  277. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/operations_dummy.h +1 -0
  278. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/operations_generic.h +4 -0
  279. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/parallel/model.h +290 -0
  280. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/parallel/operations_cuda.h +174 -0
  281. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/parallel/operations_generic.h +623 -0
  282. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/parallel/persist.h +80 -0
  283. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/parallel/persist_code.h +200 -0
  284. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/persist.h +1 -0
  285. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/persist_code.h +1 -0
  286. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/random_uniform/model.h +43 -0
  287. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/random_uniform/operations_generic.h +73 -0
  288. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/resnet/resnet.h +97 -0
  289. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/sequential/model.h +270 -0
  290. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/sequential/operations_generic.h +625 -0
  291. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/sequential/persist.h +99 -0
  292. hyperdrone/_vendor/rl-tools/include/rl_tools/nn_models/sequential/persist_code.h +115 -0
  293. hyperdrone/_vendor/rl-tools/include/rl_tools/numeric_types/bf16.h +28 -0
  294. hyperdrone/_vendor/rl-tools/include/rl_tools/numeric_types/categories.h +22 -0
  295. hyperdrone/_vendor/rl-tools/include/rl_tools/numeric_types/persist_code.h +54 -0
  296. hyperdrone/_vendor/rl-tools/include/rl_tools/numeric_types/policy.h +48 -0
  297. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/arm/group_1.h +18 -0
  298. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/arm/group_2.h +14 -0
  299. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/arm/group_3.h +14 -0
  300. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/arm.h +19 -0
  301. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu/group_1.h +17 -0
  302. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu/group_2.h +12 -0
  303. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu/group_3.h +15 -0
  304. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu.h +19 -0
  305. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_accelerate/group_1.h +16 -0
  306. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_accelerate/group_2.h +12 -0
  307. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_accelerate/group_3.h +15 -0
  308. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_accelerate.h +19 -0
  309. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_mkl/group_1.h +17 -0
  310. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_mkl/group_2.h +12 -0
  311. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_mkl/group_3.h +15 -0
  312. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_mkl.h +18 -0
  313. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_mux.h +158 -0
  314. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_openblas/group_1.h +16 -0
  315. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_openblas/group_2.h +12 -0
  316. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_openblas/group_3.h +15 -0
  317. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_openblas.h +18 -0
  318. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_tensorboard/group_1.h +16 -0
  319. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_tensorboard/group_2.h +12 -0
  320. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_tensorboard/group_3.h +15 -0
  321. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cpu_tensorboard.h +19 -0
  322. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cuda/group_1.h +18 -0
  323. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cuda/group_2.h +12 -0
  324. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cuda/group_3.h +12 -0
  325. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/cuda.h +19 -0
  326. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/dummy/group_1.h +15 -0
  327. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/dummy/group_2.h +12 -0
  328. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/dummy/group_3.h +12 -0
  329. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/dummy.h +19 -0
  330. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/esp32/group_1.h +16 -0
  331. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/esp32/group_2.h +12 -0
  332. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/esp32/group_3.h +13 -0
  333. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/esp32.h +19 -0
  334. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/wasm32/group_1.h +15 -0
  335. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/wasm32/group_2.h +12 -0
  336. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/wasm32/group_3.h +12 -0
  337. hyperdrone/_vendor/rl-tools/include/rl_tools/operations/wasm32.h +19 -0
  338. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/hdf5/hdf5.h +54 -0
  339. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/hdf5/operations_cpu.h +419 -0
  340. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/tar/io.h +55 -0
  341. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/tar/operations_cpu.h +58 -0
  342. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/tar/operations_generic.h +620 -0
  343. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/tar/operations_posix.h +63 -0
  344. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/backends/tar/tar.h +74 -0
  345. hyperdrone/_vendor/rl-tools/include/rl_tools/persist/code.h +38 -0
  346. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_arm.h +39 -0
  347. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_cpu.h +81 -0
  348. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_cuda.h +172 -0
  349. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_dummy.h +72 -0
  350. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_esp32.h +45 -0
  351. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_generic.h +133 -0
  352. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_generic_array.h +73 -0
  353. hyperdrone/_vendor/rl-tools/include/rl_tools/random/operations_wasm32.h +57 -0
  354. hyperdrone/_vendor/rl-tools/include/rl_tools/random/persist.h +77 -0
  355. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/camera.h +105 -0
  356. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/annotations/cache.h +26 -0
  357. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/annotations/free_space.h +60 -0
  358. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/annotations/operations_cpu.h +411 -0
  359. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/glb/glb.h +25 -0
  360. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/glb/operations_cpu.h +1288 -0
  361. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/operations_cpu.h +136 -0
  362. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/procthor/catalog.h +232 -0
  363. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/procthor/conversion.h +33 -0
  364. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/procthor/operations_cpu.h +123 -0
  365. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/datasets/procthor/procthor.h +39 -0
  366. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/generic/operations_cpu.h +717 -0
  367. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/generic/operations_generic.h +1283 -0
  368. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/metal/context.h +193 -0
  369. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/metal/device_source.h +17 -0
  370. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/metal/operations_cpu.h +1123 -0
  371. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/optix/device.h +207 -0
  372. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/optix/device_impl.h +1043 -0
  373. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/optix/operations_cuda.h +1747 -0
  374. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/optix/overlay_accel.h +64 -0
  375. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/specialization.h +37 -0
  376. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/vulkan/context.h +251 -0
  377. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/vulkan/device_source.h +48 -0
  378. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/vulkan/operations_cpu.h +2067 -0
  379. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/webgpu/bvh_sah.h +182 -0
  380. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/webgpu/context.h +280 -0
  381. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/webgpu/device_source.h +17 -0
  382. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/backends/webgpu/operations_cpu.h +1405 -0
  383. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/operations_cpu_common.h +948 -0
  384. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/operations_cpu_mux.h +32 -0
  385. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/operations_cpu_post.h +96 -0
  386. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/renderer.h +484 -0
  387. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/save_cpu.h +314 -0
  388. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/scene.h +44 -0
  389. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/transforms_generic.h +25 -0
  390. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/raytracing/types.h +45 -0
  391. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/rig/operations_cpu.h +119 -0
  392. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/rig/operations_generic.h +121 -0
  393. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/rig/rig.h +70 -0
  394. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/scene.h +132 -0
  395. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/segmentation_cpu.h +145 -0
  396. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/transforms.h +204 -0
  397. hyperdrone/_vendor/rl-tools/include/rl_tools/rendering/types.h +76 -0
  398. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/algorithms.h +6 -0
  399. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/operations_cpu.h +1 -0
  400. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/operations_cpu_mkl.h +1 -0
  401. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/operations_generic.h +1 -0
  402. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/loop/core/config.h +243 -0
  403. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/loop/core/operations_cuda.h +9 -0
  404. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/loop/core/operations_generic.h +205 -0
  405. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/loop/core/persist.h +109 -0
  406. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/loop/core/state.h +51 -0
  407. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/mixed_imitation.h +63 -0
  408. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/operations_cuda.h +190 -0
  409. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/operations_generic.h +332 -0
  410. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/operations_generic_mixed_imitation.h +81 -0
  411. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/persist.h +28 -0
  412. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/ppo/ppo.h +105 -0
  413. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/loop/core/approximators_gru.h +84 -0
  414. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/loop/core/approximators_mlp.h +61 -0
  415. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/loop/core/config.h +106 -0
  416. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/loop/core/operations_generic.h +193 -0
  417. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/loop/core/state.h +52 -0
  418. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/operations_cpu.h +9 -0
  419. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/operations_cpu_accelerate.h +2 -0
  420. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/operations_cpu_mkl.h +2 -0
  421. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/operations_cpu_mux.h +9 -0
  422. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/operations_cuda.h +131 -0
  423. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/operations_generic.h +580 -0
  424. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/sac/sac.h +151 -0
  425. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/loop/core/approximators_gru.h +72 -0
  426. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/loop/core/approximators_mlp.h +54 -0
  427. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/loop/core/config.h +107 -0
  428. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/loop/core/operations_generic.h +174 -0
  429. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/loop/core/state.h +46 -0
  430. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/operations_cpu.h +9 -0
  431. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/operations_cpu_accelerate.h +2 -0
  432. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/operations_cpu_mkl.h +2 -0
  433. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/operations_cpu_mux.h +9 -0
  434. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/operations_cuda.h +117 -0
  435. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/operations_generic.h +359 -0
  436. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/algorithms/td3/td3.h +141 -0
  437. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/components.h +4 -0
  438. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/off_policy_runner.h +225 -0
  439. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/operations_cpu.h +95 -0
  440. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/operations_cpu_accelerate.h +21 -0
  441. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/operations_cpu_mkl.h +21 -0
  442. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/operations_cuda.h +237 -0
  443. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/operations_generic.h +498 -0
  444. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/off_policy_runner/operations_generic_per_env.h +112 -0
  445. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/collection.h +57 -0
  446. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/on_policy_runner.h +122 -0
  447. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_cpu.h +2 -0
  448. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_cpu_accelerate.h +8 -0
  449. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_cpu_mkl.h +8 -0
  450. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_cpu_mux.h +12 -0
  451. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_cuda.h +183 -0
  452. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_generic.h +366 -0
  453. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/operations_generic_common.h +74 -0
  454. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/on_policy_runner/persist.h +47 -0
  455. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/operations_cpu.h +2 -0
  456. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/operations_cpu_accelerate.h +1 -0
  457. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/operations_cpu_mkl.h +1 -0
  458. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/operations_generic.h +2 -0
  459. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/replay_buffer/operations_cpu.h +9 -0
  460. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/replay_buffer/operations_generic.h +123 -0
  461. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/replay_buffer/persist.h +57 -0
  462. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/replay_buffer/replay_buffer.h +93 -0
  463. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/running_normalizer/operations_generic.h +76 -0
  464. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/running_normalizer/persist.h +31 -0
  465. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/components/running_normalizer/running_normalizer.h +33 -0
  466. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environment_wrappers/operations_generic.h +58 -0
  467. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environment_wrappers/scale_observations/operations_generic.h +28 -0
  468. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environment_wrappers/scale_observations/wrapper.h +26 -0
  469. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environment_wrappers/wrappers.h +29 -0
  470. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/acrobot/acrobot.h +88 -0
  471. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/acrobot/operations_cpu.h +152 -0
  472. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/acrobot/operations_generic.h +202 -0
  473. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/batch/environment.h +40 -0
  474. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/batch/operations_cuda.h +204 -0
  475. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/batch/operations_generic.h +106 -0
  476. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/batch/operations_generic_common.h +26 -0
  477. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/batch/persist.h +33 -0
  478. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/car/car.h +119 -0
  479. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/car/operations_cpu.h +110 -0
  480. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/car/operations_generic.h +206 -0
  481. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/car/operations_json.h +59 -0
  482. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/car/track.h +23 -0
  483. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/car/ui.h +189 -0
  484. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/environments.h +28 -0
  485. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/flag/environment.h +87 -0
  486. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/flag/operations_cpu.h +212 -0
  487. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/flag/operations_generic.h +215 -0
  488. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/observation.h +75 -0
  489. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/operations_cpu.h +1063 -0
  490. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/operations_cuda.h +564 -0
  491. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/pose.h +253 -0
  492. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/presets.h +154 -0
  493. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/raptor/operations_cpu.h +26 -0
  494. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/raptor/operations_generic.h +91 -0
  495. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/raptor/raptor.h +71 -0
  496. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/rig/operations_cpu.h +190 -0
  497. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/rig/operations_generic.h +32 -0
  498. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/rig/rig.h +25 -0
  499. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/capture_cpu.h +86 -0
  500. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/capture_cuda.h +69 -0
  501. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/capture_optix.h +163 -0
  502. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/operations_cpu.h +223 -0
  503. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/operations_cpu_spectator.h +194 -0
  504. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/operations_cuda.h +1 -0
  505. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/operations_cuda_spectator.h +109 -0
  506. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/spectator.h +82 -0
  507. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/spy.h +107 -0
  508. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/spy/ui.h +30 -0
  509. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/moving_gate/moving_gate.h +103 -0
  510. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/moving_gate/operations_cpu.h +279 -0
  511. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/moving_gate/operations_cuda.h +242 -0
  512. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/target_frame/operations_cpu.h +322 -0
  513. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/target_frame/operations_cuda.h +312 -0
  514. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/target_frame/operations_generic_position_hold.h +128 -0
  515. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/target_frame/position_hold.h +22 -0
  516. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/target_frame/target_frame.h +92 -0
  517. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/visual_inertial_localization/baseline.h +46 -0
  518. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/visual_inertial_localization/calibration.h +62 -0
  519. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/visual_inertial_localization/metrics.h +101 -0
  520. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/visual_inertial_localization/operations_cpu.h +374 -0
  521. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/tasks/visual_inertial_localization/visual_inertial_localization.h +126 -0
  522. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/hyperdrone/world.h +333 -0
  523. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/inertial_velocity.h +27 -0
  524. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/metrics.h +266 -0
  525. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/multirotor.h +1138 -0
  526. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_cpu.h +2252 -0
  527. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/05_state_is_nan.h +148 -0
  528. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/10_sample_initial_parameters.h +228 -0
  529. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/20_initial_state.h +208 -0
  530. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/30_sample_initial_state.h +300 -0
  531. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/35_get_desired_state.h +63 -0
  532. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/40_observe.h +637 -0
  533. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/50_state_algebra.h +57 -0
  534. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/60_dynamics.h +134 -0
  535. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/70_post_integration.h +368 -0
  536. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic/80_abs_diff.h +312 -0
  537. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic.h +367 -0
  538. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_generic_inertial_velocity.h +44 -0
  539. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_helper_generic.h +43 -0
  540. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_multitask_generic.h +70 -0
  541. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/operations_multitask_generic_forward.h +24 -0
  542. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/default.h +209 -0
  543. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/arpl.h +112 -0
  544. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/crazyflie.h +127 -0
  545. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/crazyflie_openmv.h +119 -0
  546. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/flightmare.h +111 -0
  547. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/fs.h +113 -0
  548. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/mrs.h +110 -0
  549. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/soft.h +117 -0
  550. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/soft_rigid.h +118 -0
  551. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/x500.h +88 -0
  552. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/x500_real.h +88 -0
  553. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/dynamics/x500_sim.h +114 -0
  554. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/init/default.h +56 -0
  555. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/registry.h +96 -0
  556. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/reward_functions/default.h +64 -0
  557. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/reward_functions/reward_functions.h +1 -0
  558. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/reward_functions/squared/operations_generic.h +202 -0
  559. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/reward_functions/squared/squared.h +52 -0
  560. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/termination/default.h +33 -0
  561. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/trajectories/lissajous.h +72 -0
  562. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/parameters/trajectories/trajectory.h +78 -0
  563. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/persist.h +21 -0
  564. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/persist_code.h +53 -0
  565. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/quaternion_helper.h +103 -0
  566. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/l2f/ui.h +180 -0
  567. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/memory/environment.h +69 -0
  568. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/memory/operations_cpu.h +46 -0
  569. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/memory/operations_generic.h +78 -0
  570. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/ant/README.MD +5 -0
  571. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/ant/ant.h +77 -0
  572. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/ant/model.h +415 -0
  573. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/ant/operations_cpu.h +162 -0
  574. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/ant/persist.h +86 -0
  575. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/ant/ui.h +141 -0
  576. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/mujoco/mujoco.h +1 -0
  577. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/multi_agent/bottleneck/bottleneck.h +113 -0
  578. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/multi_agent/bottleneck/operations_cpu.h +289 -0
  579. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/multi_agent/bottleneck/operations_generic.h +495 -0
  580. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/multi_agent/environments.h +16 -0
  581. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/observation.h +37 -0
  582. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/operations_cpu.h +2 -0
  583. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/operations_generic.h +33 -0
  584. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/pendulum/operations_cpu.h +146 -0
  585. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/pendulum/operations_generic.h +262 -0
  586. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/pendulum/pendulum.h +197 -0
  587. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/pendulum/ui.h +97 -0
  588. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/pendulum/ui_xeus.h +124 -0
  589. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/reacher/operations_cpu.h +426 -0
  590. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/reacher/operations_generic.h +424 -0
  591. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/environments/reacher/reacher.h +137 -0
  592. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/loop.h +15 -0
  593. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/checkpoint/config.h +28 -0
  594. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/checkpoint/operations_cpu.h +233 -0
  595. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/checkpoint/persist.h +30 -0
  596. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/checkpoint/state.h +21 -0
  597. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/curriculum/config.h +25 -0
  598. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/curriculum/operations_generic.h +47 -0
  599. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/curriculum/persist.h +20 -0
  600. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/curriculum/state.h +17 -0
  601. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/evaluation/config.h +47 -0
  602. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/evaluation/operations_generic.h +106 -0
  603. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/evaluation/persist.h +40 -0
  604. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/evaluation/state.h +36 -0
  605. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/extrack/config.h +22 -0
  606. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/extrack/operations_cpu.h +44 -0
  607. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/extrack/persist.h +20 -0
  608. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/extrack/state.h +26 -0
  609. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/nn_analytics/config.h +37 -0
  610. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/nn_analytics/operations_cpu.h +113 -0
  611. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/nn_analytics/persist.h +20 -0
  612. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/nn_analytics/state.h +24 -0
  613. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/save_trajectories/config.h +43 -0
  614. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/save_trajectories/operations_cpu.h +190 -0
  615. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/save_trajectories/persist.h +30 -0
  616. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/save_trajectories/state.h +37 -0
  617. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/steps.h +4 -0
  618. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/timing/config.h +27 -0
  619. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/timing/operations_cpu.h +52 -0
  620. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/timing/persist.h +20 -0
  621. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/loop/steps/timing/state.h +25 -0
  622. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/operations_generic.h +3 -0
  623. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/rl.h +5 -0
  624. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/utils/evaluation/evaluation.h +106 -0
  625. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/utils/evaluation/operations_cpu.h +48 -0
  626. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/utils/evaluation/operations_generic.h +275 -0
  627. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/utils/validation.h +269 -0
  628. hyperdrone/_vendor/rl-tools/include/rl_tools/rl/utils/validation_analysis.h +85 -0
  629. hyperdrone/_vendor/rl-tools/include/rl_tools/rl_tools.h +80 -0
  630. hyperdrone/_vendor/rl-tools/include/rl_tools/ui_server/client/client.h +50 -0
  631. hyperdrone/_vendor/rl-tools/include/rl_tools/ui_server/client/operations_boost.h +92 -0
  632. hyperdrone/_vendor/rl-tools/include/rl_tools/ui_server/client/operations_cpu.h +174 -0
  633. hyperdrone/_vendor/rl-tools/include/rl_tools/ui_server/client/operations_websocket.h +208 -0
  634. hyperdrone/_vendor/rl-tools/include/rl_tools/ui_server/server.h +448 -0
  635. hyperdrone/_vendor/rl-tools/include/rl_tools/universe.h +4 -0
  636. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/declarations_cpu.h +13 -0
  637. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/declarations_cpu_emscripten.h +15 -0
  638. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_arm.h +29 -0
  639. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_cpu.h +24 -0
  640. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_cpu_emscripten.h +28 -0
  641. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_cuda.h +33 -0
  642. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_dummy.h +18 -0
  643. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_esp32.h +20 -0
  644. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_generic.h +19 -0
  645. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/assert/operations_wasm32.h +18 -0
  646. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/env/operations_cpu.h +16 -0
  647. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/env/operations_generic.h +14 -0
  648. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/extrack/extrack.h +129 -0
  649. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/extrack/operations_cpu.h +588 -0
  650. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/generic/integrators.h +103 -0
  651. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/generic/memcpy.h +16 -0
  652. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/generic/tuple/operations_generic.h +48 -0
  653. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/generic/tuple/tuple.h +147 -0
  654. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/generic/typing.h +122 -0
  655. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/generic/vector_operations.h +172 -0
  656. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/polyak/operations_cuda.h +53 -0
  657. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/polyak/operations_generic.h +93 -0
  658. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/string/operations_generic.h +201 -0
  659. hyperdrone/_vendor/rl-tools/include/rl_tools/utils/zlib/operations_cpu.h +45 -0
  660. hyperdrone/_vendor/rl-tools/include/rl_tools/version.h +28 -0
  661. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/CMakeLists.txt +15 -0
  662. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/README.md +214 -0
  663. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/CMakeLists.txt +11 -0
  664. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/generic/CMakeLists.txt +17 -0
  665. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/generic/freestanding_check.cpp +134 -0
  666. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/metal/CMakeLists.txt +31 -0
  667. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/metal/device.metal +912 -0
  668. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/metal/metal_cpp_impl.cpp +6 -0
  669. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/optix/CMakeLists.txt +51 -0
  670. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/optix/device.cu +1 -0
  671. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/optix/overlay_accel.cu +308 -0
  672. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/vulkan/CMakeLists.txt +37 -0
  673. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/vulkan/device.comp +970 -0
  674. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/vulkan/device_spirv.cpp +44 -0
  675. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/webgpu/CMakeLists.txt +31 -0
  676. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/backends/webgpu/device.wgsl +1381 -0
  677. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/CMakeLists.txt +129 -0
  678. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/README.md +131 -0
  679. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/benchmark.cpp +180 -0
  680. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/benchmark_dynamic.cpp +491 -0
  681. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/download_paper_scene.py +74 -0
  682. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/ios_app/CMakeLists.txt +104 -0
  683. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/ios_app/Info.plist +36 -0
  684. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/ios_app/Sources/BenchmarkApp.swift +172 -0
  685. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/ios_app/benchmark.h +10 -0
  686. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/ios_app/benchmark.mm +46 -0
  687. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/ios_app/build.sh +17 -0
  688. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/rig.cpp +119 -0
  689. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix.cpp +1382 -0
  690. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix.h +5 -0
  691. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_config.h.in +25 -0
  692. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_identity.cmake +11 -0
  693. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_main.cpp +5 -0
  694. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_physics.cu +125 -0
  695. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_physics.h +58 -0
  696. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_physics_contract.h +179 -0
  697. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/benchmark/simulator_matrix_physics_cpu.cpp +77 -0
  698. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/camera_orbit.h +51 -0
  699. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/CMakeLists.txt +199 -0
  700. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/antialiasing.cpp +214 -0
  701. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/drone.cpp +320 -0
  702. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/drone_device.cu +359 -0
  703. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/environment/environment.h +96 -0
  704. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/environment/operations_cpu.h +263 -0
  705. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/example.cpp +273 -0
  706. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/fixed_pose.cpp +221 -0
  707. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/flow.cpp +120 -0
  708. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/interactive.cpp +1015 -0
  709. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/make_drone_glb.py +172 -0
  710. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/minimal.cpp +82 -0
  711. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/minimal_overlay.cpp +137 -0
  712. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/motion_blur.cpp +232 -0
  713. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/render_pose_trace.cpp +1829 -0
  714. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/example/render_pose_trace_motion_blur.cpp +647 -0
  715. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/CMakeLists.txt +147 -0
  716. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/README.md +15 -0
  717. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/job.sbatch +28 -0
  718. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/model.h +260 -0
  719. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/model_config.h +24 -0
  720. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/model_forward_cuda.h +397 -0
  721. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/model_operations.h +418 -0
  722. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/model_persist.h +45 -0
  723. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/model_student.h +70 -0
  724. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/scene.cpp +222 -0
  725. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/scene.h +68 -0
  726. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/.gitignore +4 -0
  727. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/CMakeLists.txt +4 -0
  728. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/Info.plist +24 -0
  729. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/Info_ios.plist +36 -0
  730. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/Sources/CameraManager.swift +120 -0
  731. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/Sources/ContentView.swift +703 -0
  732. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/Sources/DatasetRecorder.swift +285 -0
  733. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/Sources/YawPredictorApp.swift +25 -0
  734. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/YawPredictor.entitlements +8 -0
  735. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/build.sh +66 -0
  736. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/build_ios.sh +133 -0
  737. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/generate.sh +6 -0
  738. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/h5_to_tar.cpp +82 -0
  739. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/inference.cpp +166 -0
  740. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/inference.h +26 -0
  741. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/project.yml +30 -0
  742. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/swift_app/test_tar_vs_hdf5.cpp +173 -0
  743. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/yaw_prediction_cuda.cu +699 -0
  744. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/yaw_prediction_dataset_overlay.cpp +475 -0
  745. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/yaw_prediction_distill_cuda.cu +995 -0
  746. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/yaw_prediction_eval.cu +457 -0
  747. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/yaw_prediction_real_world_eval.cpp +660 -0
  748. hyperdrone/_vendor/rl-tools/src/rendering/raytracing/yaw_prediction/yaw_prediction_viewer.cu +443 -0
  749. hyperdrone/_vendor/rl-tools/src/rl/environments/hyperdrone/spy/CMakeLists.txt +63 -0
  750. hyperdrone/_vendor/rl-tools/src/rl/environments/hyperdrone/spy/example.cpp +101 -0
  751. hyperdrone/_vendor/rl-tools/src/rl/environments/hyperdrone/spy/ui.cpp +380 -0
  752. hyperdrone/dynamics/__init__.py +5 -0
  753. hyperdrone/dynamics/_component.py +31 -0
  754. hyperdrone/dynamics/_config.py +46 -0
  755. hyperdrone/dynamics/_sim.py +166 -0
  756. hyperdrone/env/__init__.py +23 -0
  757. hyperdrone/env/_multi_environment.py +566 -0
  758. hyperdrone/env/_rotorcraft.py +29 -0
  759. hyperdrone/env/_spy.py +39 -0
  760. hyperdrone/examples/.gitignore +3 -0
  761. hyperdrone/examples/Benchmark.ipynb +113 -0
  762. hyperdrone/examples/HyperDrone.ipynb +589 -0
  763. hyperdrone/examples/Orbiter.ipynb +496 -0
  764. hyperdrone/examples/Renderer.ipynb +218 -0
  765. hyperdrone/examples/__init__.py +16 -0
  766. hyperdrone/examples/articulation.py +55 -0
  767. hyperdrone/examples/benchmark.py +236 -0
  768. hyperdrone/examples/benchmark_minimal.py +65 -0
  769. hyperdrone/examples/data.py +71 -0
  770. hyperdrone/examples/drone_flythrough.py +169 -0
  771. hyperdrone/examples/hyperdrone_videos/my_world_preview.h +17 -0
  772. hyperdrone/examples/my_world.h +17 -0
  773. hyperdrone/examples/render_procthor.py +40 -0
  774. hyperdrone/examples/shots.py +108 -0
  775. hyperdrone/examples/spy.py +40 -0
  776. hyperdrone/examples/visual_inertial_localization.py +158 -0
  777. hyperdrone/gym/__init__.py +67 -0
  778. hyperdrone/render/__init__.py +57 -0
  779. hyperdrone/render/_component.py +51 -0
  780. hyperdrone/render/_config.py +76 -0
  781. hyperdrone/render/_renderer.py +498 -0
  782. hyperdrone/render/_rig.py +136 -0
  783. hyperdrone/render/_sampling.py +69 -0
  784. hyperdrone/render/_scene.py +38 -0
  785. hyperdrone/render/datasets.py +15 -0
  786. hyperray-0.0.1.dist-info/METADATA +519 -0
  787. hyperray-0.0.1.dist-info/RECORD +788 -0
  788. hyperray-0.0.1.dist-info/WHEEL +4 -0
@@ -0,0 +1,995 @@
1
+ #define RL_TOOLS_OPERATIONS_CPU_MUX_INCLUDE_CUDA
2
+ #include <rl_tools/operations/cpu_mux.h>
3
+
4
+ #include <rl_tools/nn/optimizers/adam/instance/operations_generic.h>
5
+ #include <rl_tools/nn/optimizers/adam/instance/operations_cuda.h>
6
+
7
+ #include <rl_tools/nn/layers/dense/operations_generic.h>
8
+ #include <rl_tools/nn/layers/conv2d/operations_generic.h>
9
+ #include <rl_tools/nn/layers/avg_pool2d/operations_generic.h>
10
+ #include <rl_tools/nn/layers/dynamic_conv2d/operations_generic.h>
11
+ #include <rl_tools/nn/layers/dynamic_conv2d/operations_cuda.h>
12
+
13
+ #include <rl_tools/nn_models/sequential/operations_generic.h>
14
+ #include <rl_tools/nn_models/parallel/operations_generic.h>
15
+
16
+ #include <rl_tools/nn/operations_cuda.h>
17
+ #include <rl_tools/nn_models/operations_generic.h>
18
+
19
+ #include "model_operations.h"
20
+ #include "model_forward_cuda.h"
21
+
22
+ #include <rl_tools/nn/optimizers/adam/operations_generic.h>
23
+ #include <rl_tools/nn/optimizers/adam/operations_cuda.h>
24
+
25
+ #include <rl_tools/containers/tensor/operations_generic.h>
26
+ #include <rl_tools/containers/tensor/operations_cpu.h>
27
+
28
+ #include "model.h"
29
+ #include "model_student.h"
30
+ #include "scene.h"
31
+
32
+ #include "../example/environment/environment.h"
33
+ #include "../example/environment/operations_cpu.h"
34
+
35
+ #include <rl_tools/utils/extrack/extrack.h>
36
+ #include <rl_tools/utils/extrack/operations_cpu.h>
37
+
38
+ #ifdef RL_TOOLS_ENABLE_HDF5
39
+ #include <rl_tools/persist/backends/hdf5/operations_cpu.h>
40
+ #include <rl_tools/nn/layers/dense/persist.h>
41
+ #include <rl_tools/nn/layers/conv2d/persist.h>
42
+ #include <rl_tools/nn/layers/avg_pool2d/persist.h>
43
+ #include <rl_tools/nn/layers/dynamic_conv2d/persist.h>
44
+ #include <rl_tools/nn_models/sequential/persist.h>
45
+ #include <rl_tools/nn_models/parallel/persist.h>
46
+ #include "model_persist.h"
47
+ #endif
48
+
49
+ #include <iostream>
50
+ #include <vector>
51
+ #include <cmath>
52
+ #include <chrono>
53
+ #include <cstring>
54
+ #include <random>
55
+ #include <algorithm>
56
+ #include <filesystem>
57
+ #include <csignal>
58
+ #include <thread>
59
+ #include <mutex>
60
+ #include <cuda_runtime.h>
61
+ #include <cuda_bf16.h>
62
+
63
+ namespace fs = std::filesystem;
64
+ namespace rlt = rl_tools;
65
+
66
+ static volatile std::sig_atomic_t signal_received = 0;
67
+ static void signal_handler(int signal) {
68
+ signal_received = signal;
69
+ }
70
+
71
+ // ---- Configuration ----
72
+ using T = __nv_bfloat16;
73
+ using DEVICE_CPU = rlt::devices::DEVICE_FACTORY<>;
74
+ using DEVICE_CUDA = rlt::devices::DEVICE_FACTORY_CUDA<>;
75
+ using TI = DEVICE_CPU::index_t;
76
+ using TI_CUDA = DEVICE_CUDA::index_t;
77
+
78
+ namespace yp = rlt::rendering::raytracing::yaw_prediction;
79
+ static constexpr TI_CUDA BATCH_SIZE = yp::SCENE_NUM_CAMERAS / 2;
80
+ static constexpr TI_CUDA NUM_CAMERAS = yp::SCENE_NUM_CAMERAS;
81
+ static constexpr TI CAM_WIDTH = yp::SCENE_CAM_WIDTH;
82
+ static constexpr TI CAM_HEIGHT = yp::SCENE_CAM_HEIGHT;
83
+
84
+ struct DistillConfig {
85
+ static constexpr float LEARNING_RATE = 1e-3f;
86
+ static constexpr float MAX_ANGLE = 3.14159265358979323846f / 6.0f;
87
+ static constexpr float FOV_MIN = 17.188733853924695f;
88
+ static constexpr float FOV_MAX = 68.75493541569878f;
89
+ static constexpr float HUBER_DELTA = 0.1f;
90
+ static constexpr float TEACHER_ERROR_THRESHOLD = 0.3f;
91
+ static constexpr float LOSS_WEIGHT_COSINE = 1.0f;
92
+ static constexpr float LOSS_WEIGHT_TASK = 1.0f;
93
+ static constexpr TI LOG_INTERVAL = 100;
94
+ static constexpr TI VAL_INTERVAL = 1000;
95
+ static constexpr TI CHECKPOINT_INTERVAL = 100000;
96
+ };
97
+
98
+ using TYPE_POLICY = rlt::numeric_types::Policy<float,
99
+ rlt::numeric_types::UseCase<rlt::numeric_types::categories::Parameter, T>,
100
+ rlt::numeric_types::UseCase<rlt::numeric_types::categories::Activation, T>,
101
+ rlt::numeric_types::UseCase<rlt::numeric_types::categories::Gradient, T>,
102
+ rlt::numeric_types::UseCase<rlt::numeric_types::categories::MasterParameter, float>>;
103
+ using T_ACTIVATION = TYPE_POLICY::GET<rlt::numeric_types::categories::Activation>;
104
+ using T_GRADIENT = TYPE_POLICY::GET<rlt::numeric_types::categories::Gradient>;
105
+
106
+ // ---- Teacher model ----
107
+ using CPU_TYPE_POLICY = rlt::numeric_types::Policy<float>;
108
+
109
+ // Load teacher on CPU with Gradient capability (needed to copy head to backward-capable GPU copy)
110
+ using TEACHER_CPU_GRAD_CAPABILITY = rlt::nn::capability::Gradient<rlt::nn::parameters::Gradient>;
111
+ using TEACHER_CPU_MODEL_GRAD = yp::MODEL<TEACHER_CPU_GRAD_CAPABILITY, CPU_TYPE_POLICY, TI, BATCH_SIZE>;
112
+ // Forward-only CPU copy (intermediate for CPU Gradient → GPU Forward transfer)
113
+ using TEACHER_CPU_FWD_CAPABILITY = rlt::nn::capability::Forward<>;
114
+ using TEACHER_CPU_MODEL_FWD = yp::MODEL<TEACHER_CPU_FWD_CAPABILITY, CPU_TYPE_POLICY, TI, BATCH_SIZE>;
115
+
116
+ // GPU teacher model (Forward only, frozen, for encoder eval + head eval)
117
+ using TEACHER_GPU_CAPABILITY = rlt::nn::capability::Forward<>;
118
+ using TEACHER_GPU_MODEL = yp::MODEL<TEACHER_GPU_CAPABILITY, TYPE_POLICY, TI_CUDA, BATCH_SIZE>;
119
+
120
+ // ---- Student model (trainable) ----
121
+ struct AdamParams : rlt::nn::optimizers::adam::DEFAULT_PARAMETERS_PYTORCH<TYPE_POLICY> {
122
+ static constexpr float ALPHA = DistillConfig::LEARNING_RATE;
123
+ };
124
+ using OPTIMIZER_SPEC = rlt::nn::optimizers::adam::Specification<TYPE_POLICY, TI_CUDA, AdamParams>;
125
+ using OPTIMIZER = rlt::nn::optimizers::Adam<OPTIMIZER_SPEC>;
126
+ using STUDENT_GPU_CAPABILITY = rlt::nn::capability::Gradient<rlt::nn::parameters::Adam>;
127
+ using STUDENT_GPU_MODEL = yp::STUDENT_MODEL<STUDENT_GPU_CAPABILITY, TYPE_POLICY, TI_CUDA, BATCH_SIZE>;
128
+
129
+ using STUDENT_CPU_CAPABILITY = rlt::nn::capability::Gradient<rlt::nn::parameters::Adam>;
130
+ using STUDENT_CPU_MODEL = yp::STUDENT_MODEL<STUDENT_CPU_CAPABILITY, CPU_TYPE_POLICY, TI, BATCH_SIZE>;
131
+ using STUDENT_CPU_MODEL_INFERENCE = typename STUDENT_CPU_MODEL::template CHANGE_CAPABILITY<rlt::nn::capability::Forward<>>;
132
+
133
+ // Student head (trainable, same architecture as teacher head)
134
+ using STUDENT_CONCAT_SHAPE = typename STUDENT_GPU_MODEL::SPEC::CONCAT_OUTPUT_SHAPE;
135
+ using STUDENT_HEAD_GPU = typename yp::HEAD_MODULE<TYPE_POLICY, TI_CUDA, yp::ModelConfig<TI_CUDA>>::template Layer<STUDENT_GPU_CAPABILITY, STUDENT_CONCAT_SHAPE>;
136
+ using STUDENT_HEAD_CPU_CONCAT_SHAPE = typename STUDENT_CPU_MODEL::SPEC::CONCAT_OUTPUT_SHAPE;
137
+ using STUDENT_HEAD_CPU = typename yp::HEAD_MODULE<CPU_TYPE_POLICY, TI, yp::ModelConfig<TI>>::template Layer<STUDENT_CPU_CAPABILITY, STUDENT_HEAD_CPU_CONCAT_SHAPE>;
138
+ using STUDENT_HEAD_CPU_INFERENCE = typename STUDENT_HEAD_CPU::template CHANGE_CAPABILITY<rlt::nn::capability::Forward<>>;
139
+
140
+ // ---- Tensor shapes ----
141
+ using GPU_INPUT_SHAPE = rlt::tensor::Shape<TI_CUDA, BATCH_SIZE, CAM_HEIGHT, CAM_WIDTH, 3>;
142
+ using GPU_INPUT_SPEC = rlt::tensor::Specification<T_ACTIVATION, TI_CUDA, GPU_INPUT_SHAPE>;
143
+
144
+ // Teacher encoder output dimensions
145
+ using TEACHER_BRANCH_0 = typename rlt::utils::tuple_element<0, typename TEACHER_GPU_MODEL::SPEC::BRANCH_TUPLE>::type;
146
+ using TEACHER_OUTPUT_SHAPE_0 = rlt::nn_models::parallel::detail::output_shape<typename TEACHER_GPU_MODEL::SPEC::CAPABILITY, TEACHER_BRANCH_0>;
147
+ static constexpr int TEACHER_ENCODER_DIM_VAL = rlt::get_last(TEACHER_OUTPUT_SHAPE_0{});
148
+ static constexpr int TEACHER_CONCAT_DIM = TEACHER_GPU_MODEL::SPEC::CONCAT_LAST_DIM;
149
+ static constexpr int TEACHER_ENCODER_TOTAL = rlt::product(TEACHER_OUTPUT_SHAPE_0{});
150
+ static constexpr int ENCODER_SPATIAL = TEACHER_ENCODER_TOTAL / TEACHER_ENCODER_DIM_VAL;
151
+ static constexpr int SPATIAL_PER_SAMPLE = ENCODER_SPATIAL / BATCH_SIZE;
152
+
153
+ // Student encoder output dimensions (should match teacher after projection)
154
+ using STUDENT_BRANCH_0 = typename rlt::utils::tuple_element<0, typename STUDENT_GPU_MODEL::SPEC::BRANCH_TUPLE>::type;
155
+ using STUDENT_OUTPUT_SHAPE_0 = rlt::nn_models::parallel::detail::output_shape<typename STUDENT_GPU_MODEL::SPEC::CAPABILITY, STUDENT_BRANCH_0>;
156
+ static constexpr int STUDENT_ENCODER_DIM_VAL = rlt::get_last(STUDENT_OUTPUT_SHAPE_0{});
157
+ static constexpr int STUDENT_CONCAT_DIM = STUDENT_GPU_MODEL::SPEC::CONCAT_LAST_DIM;
158
+ // Note: student per-branch dim (TEACHER_ENCODER_DIM=512) != teacher per-branch dim (LATE_CH=256)
159
+ // The student projects to the teacher's *concatenated* dim per branch, not per-branch dim.
160
+ // Cosine similarity operates on the min of the two dims or requires separate alignment.
161
+
162
+ // Head output shape (3 values: px, py, roll)
163
+ using HEAD_OUTPUT_SHAPE = typename STUDENT_HEAD_GPU::OUTPUT_SHAPE;
164
+ static constexpr TI OUTPUT_DIM = 3;
165
+ static constexpr TI TOTAL_OUTPUT_ELEMENTS = BATCH_SIZE * OUTPUT_DIM;
166
+
167
+ // ---- CUDA kernels ----
168
+ // concatenate_kernel, split_kernel, rgba_to_activation_kernel are provided by
169
+ // yp::cuda_kernels:: in model_forward_cuda.h
170
+
171
+ // Compute per-sample teacher MAE and generate binary filter mask
172
+ __global__ void compute_teacher_error_mask_kernel(
173
+ const T_ACTIVATION* __restrict__ predictions,
174
+ const float* __restrict__ targets,
175
+ float* __restrict__ mask,
176
+ int batch_size,
177
+ float threshold
178
+ ) {
179
+ const int idx = blockIdx.x * blockDim.x + threadIdx.x;
180
+ if (idx >= batch_size) return;
181
+
182
+ float err = 0.0f;
183
+ for (int d = 0; d < 3; d++) {
184
+ err += fabsf((float)predictions[idx * 3 + d] - targets[idx * 3 + d]);
185
+ }
186
+ err /= 3.0f;
187
+
188
+ mask[idx] = (err < threshold) ? 1.0f : 0.0f;
189
+ }
190
+
191
+ // Huber loss with per-sample mask
192
+ __global__ void huber_loss_gradient_masked_kernel(
193
+ const T_ACTIVATION* __restrict__ predictions,
194
+ const float* __restrict__ targets,
195
+ T_GRADIENT* __restrict__ d_output,
196
+ float* __restrict__ losses,
197
+ const float* __restrict__ mask,
198
+ int batch_size,
199
+ int output_dim,
200
+ float delta,
201
+ float loss_weight
202
+ ) {
203
+ const int idx = blockIdx.x * blockDim.x + threadIdx.x;
204
+ const int total = batch_size * output_dim;
205
+ if (idx >= total) return;
206
+
207
+ const int sample_idx = idx / output_dim;
208
+ const float m = mask[sample_idx];
209
+
210
+ const float pred = (float)predictions[idx];
211
+ const float tgt = targets[idx];
212
+ const float diff = pred - tgt;
213
+ const float abs_diff = fabsf(diff);
214
+
215
+ const float scale = m * loss_weight / static_cast<float>(total);
216
+ if (abs_diff <= delta) {
217
+ losses[idx] = m * 0.5f * diff * diff;
218
+ d_output[idx] = (T_GRADIENT)(scale * diff);
219
+ } else {
220
+ losses[idx] = m * delta * (abs_diff - 0.5f * delta);
221
+ d_output[idx] = (T_GRADIENT)(scale * delta * ((diff > 0.0f) - (diff < 0.0f)));
222
+ }
223
+ }
224
+
225
+ // Cosine similarity loss and gradient per spatial position
226
+ // For each (batch, h, w) position, computes cosine similarity across channel dimension
227
+ // Loss = 1 - cos_sim, gradient w.r.t. student features
228
+ __global__ void cosine_similarity_loss_gradient_kernel(
229
+ const T_ACTIVATION* __restrict__ student,
230
+ const T_ACTIVATION* __restrict__ teacher,
231
+ T_GRADIENT* __restrict__ d_student,
232
+ float* __restrict__ losses,
233
+ const float* __restrict__ mask,
234
+ int batch_size,
235
+ int spatial_size,
236
+ int channels,
237
+ float loss_weight
238
+ ) {
239
+ const int pos_idx = blockIdx.x * blockDim.x + threadIdx.x;
240
+ const int total_positions = batch_size * spatial_size;
241
+ if (pos_idx >= total_positions) return;
242
+
243
+ const int sample_idx = pos_idx / spatial_size;
244
+ const float m = mask[sample_idx];
245
+ const int offset = pos_idx * channels;
246
+
247
+ float dot = 0.0f;
248
+ float norm_s_sq = 0.0f;
249
+ float norm_t_sq = 0.0f;
250
+ for (int c = 0; c < channels; c++) {
251
+ const float s = (float)student[offset + c];
252
+ const float t = (float)teacher[offset + c];
253
+ dot += s * t;
254
+ norm_s_sq += s * s;
255
+ norm_t_sq += t * t;
256
+ }
257
+
258
+ const float eps = 1e-8f;
259
+ const float norm_s = sqrtf(norm_s_sq + eps);
260
+ const float norm_t = sqrtf(norm_t_sq + eps);
261
+ const float cos_sim = dot / (norm_s * norm_t);
262
+ losses[pos_idx] = m * (1.0f - cos_sim);
263
+
264
+ // d(1 - cos_sim)/ds_i = -(t_i / (ns * nt) - dot * s_i / (ns^3 * nt))
265
+ const float scale = m * loss_weight / static_cast<float>(total_positions);
266
+ const float inv_ns_nt = 1.0f / (norm_s * norm_t);
267
+ const float dot_over_ns3_nt = dot / (norm_s * norm_s_sq * norm_t + eps);
268
+
269
+ for (int c = 0; c < channels; c++) {
270
+ const float s = (float)student[offset + c];
271
+ const float t = (float)teacher[offset + c];
272
+ const float grad = -scale * (t * inv_ns_nt - s * dot_over_ns3_nt);
273
+ d_student[offset + c] = (T_GRADIENT)grad;
274
+ }
275
+ }
276
+
277
+ // Add gradient tensors element-wise: a += b
278
+ __global__ void add_gradients_kernel(
279
+ T_GRADIENT* __restrict__ a,
280
+ const T_GRADIENT* __restrict__ b,
281
+ int total
282
+ ) {
283
+ const int idx = blockIdx.x * blockDim.x + threadIdx.x;
284
+ if (idx >= total) return;
285
+ a[idx] = (T_GRADIENT)((float)a[idx] + (float)b[idx]);
286
+ }
287
+
288
+ __global__ void reduce_loss_kernel(
289
+ const float* __restrict__ losses,
290
+ float* __restrict__ total_loss,
291
+ int total_elements
292
+ ) {
293
+ float sum = 0.0f;
294
+ for (int i = 0; i < total_elements; i++) {
295
+ sum += losses[i];
296
+ }
297
+ *total_loss = sum / static_cast<float>(total_elements);
298
+ }
299
+
300
+ int main(int argc, char** argv) {
301
+ std::string scene_dir;
302
+ std::string single_scene;
303
+ std::string checkpoint_path;
304
+ TI num_scenes = 20;
305
+ TI num_scenes_per_batch = 8;
306
+ TI num_iterations = 100000;
307
+ TI num_val_scenes = 10;
308
+ TI num_load_threads = 8;
309
+
310
+ for (int i = 1; i < argc; i++) {
311
+ std::string arg = argv[i];
312
+ if (arg == "--scene-dir" && i + 1 < argc) {
313
+ scene_dir = argv[++i];
314
+ } else if (arg == "--scene" && i + 1 < argc) {
315
+ single_scene = argv[++i];
316
+ } else if (arg == "--checkpoint" && i + 1 < argc) {
317
+ checkpoint_path = argv[++i];
318
+ } else if (arg == "--num-scenes" && i + 1 < argc) {
319
+ num_scenes = std::atoi(argv[++i]);
320
+ } else if (arg == "--num-scenes-per-batch" && i + 1 < argc) {
321
+ num_scenes_per_batch = std::atoi(argv[++i]);
322
+ } else if (arg == "--num-iterations" && i + 1 < argc) {
323
+ num_iterations = std::atoi(argv[++i]);
324
+ } else if (arg == "--num-val-scenes" && i + 1 < argc) {
325
+ num_val_scenes = std::atoi(argv[++i]);
326
+ } else if (arg == "--num-load-threads" && i + 1 < argc) {
327
+ num_load_threads = std::atoi(argv[++i]);
328
+ } else {
329
+ std::cerr << "Usage: " << argv[0]
330
+ << " --checkpoint <teacher.h5>"
331
+ << " [--scene-dir <dir> | --scene <path.glb>]"
332
+ << " [--num-scenes N] [--num-scenes-per-batch M]"
333
+ << " [--num-iterations N] [--num-val-scenes N]"
334
+ << " [--num-load-threads N]" << std::endl;
335
+ return 1;
336
+ }
337
+ }
338
+
339
+ if (checkpoint_path.empty()) {
340
+ std::cerr << "Error: --checkpoint <teacher.h5> is required" << std::endl;
341
+ return 1;
342
+ }
343
+
344
+ // ---- Collect scene paths ----
345
+ std::vector<std::string> all_scene_paths;
346
+ std::vector<std::string> val_scene_paths;
347
+ if (!scene_dir.empty()) {
348
+ std::vector<std::string> found_paths;
349
+ for (auto& entry : fs::directory_iterator(scene_dir)) {
350
+ if (entry.path().extension() == ".glb") {
351
+ found_paths.push_back(entry.path().string());
352
+ }
353
+ }
354
+ std::sort(found_paths.begin(), found_paths.end());
355
+ if (found_paths.empty()) {
356
+ std::cerr << "No .glb files found in " << scene_dir << std::endl;
357
+ return 1;
358
+ }
359
+ TI total_needed = num_scenes + num_val_scenes;
360
+ if (total_needed > found_paths.size()) {
361
+ std::cerr << "Need " << total_needed << " scenes but only found " << found_paths.size() << std::endl;
362
+ return 1;
363
+ }
364
+ all_scene_paths.assign(found_paths.begin(), found_paths.begin() + num_scenes);
365
+ val_scene_paths.assign(found_paths.begin() + num_scenes, found_paths.begin() + total_needed);
366
+ } else if (!single_scene.empty()) {
367
+ all_scene_paths.push_back(single_scene);
368
+ num_scenes_per_batch = 1;
369
+ num_val_scenes = 0;
370
+ } else {
371
+ std::cerr << "Must specify --scene-dir or --scene" << std::endl;
372
+ return 1;
373
+ }
374
+
375
+ if (num_scenes_per_batch > all_scene_paths.size()) {
376
+ num_scenes_per_batch = all_scene_paths.size();
377
+ }
378
+
379
+ const TI samples_per_scene = BATCH_SIZE / num_scenes_per_batch;
380
+ if (samples_per_scene * num_scenes_per_batch != BATCH_SIZE) {
381
+ std::cerr << "BATCH_SIZE (" << BATCH_SIZE << ") must be divisible by num_scenes_per_batch (" << num_scenes_per_batch << ")" << std::endl;
382
+ return 1;
383
+ }
384
+
385
+ std::cout << "Distillation training (teacher → student)" << std::endl;
386
+ std::cout << " Teacher checkpoint: " << checkpoint_path << std::endl;
387
+ std::cout << " Training scenes: " << all_scene_paths.size() << std::endl;
388
+ std::cout << " Validation scenes: " << val_scene_paths.size() << std::endl;
389
+ std::cout << " Scenes per batch: " << num_scenes_per_batch << std::endl;
390
+ std::cout << " Samples per scene: " << samples_per_scene << std::endl;
391
+ std::cout << " Batch size: " << BATCH_SIZE << std::endl;
392
+ std::cout << " Image resolution: " << CAM_WIDTH << "x" << CAM_HEIGHT << std::endl;
393
+ std::cout << " Teacher error threshold: " << DistillConfig::TEACHER_ERROR_THRESHOLD << std::endl;
394
+ std::cout << " Cosine loss weight: " << DistillConfig::LOSS_WEIGHT_COSINE << std::endl;
395
+ std::cout << " Task loss weight: " << DistillConfig::LOSS_WEIGHT_TASK << std::endl;
396
+ std::cout << " Learning rate: " << DistillConfig::LEARNING_RATE << std::endl;
397
+ std::cout << " Num iterations: " << num_iterations << std::endl;
398
+
399
+ // ---- Load scenes ----
400
+ struct LoadedScene {
401
+ yp::SceneHandle* handle = nullptr;
402
+ std::string path;
403
+ };
404
+ std::vector<LoadedScene> loaded_scenes(all_scene_paths.size());
405
+ std::vector<LoadedScene> val_scenes(val_scene_paths.size());
406
+
407
+ {
408
+ std::mutex cout_mutex;
409
+ TI total_scenes = all_scene_paths.size() + val_scene_paths.size();
410
+ TI actual_load_threads = std::min(num_load_threads, total_scenes);
411
+
412
+ struct LoadTask {
413
+ LoadedScene* target;
414
+ const std::string* path;
415
+ const char* label;
416
+ TI index;
417
+ TI count;
418
+ };
419
+ std::vector<LoadTask> tasks;
420
+ tasks.reserve(total_scenes);
421
+ for (TI s = 0; s < all_scene_paths.size(); s++) {
422
+ loaded_scenes[s].path = all_scene_paths[s];
423
+ tasks.push_back({&loaded_scenes[s], &loaded_scenes[s].path, "train", s, (TI)all_scene_paths.size()});
424
+ }
425
+ for (TI s = 0; s < val_scene_paths.size(); s++) {
426
+ val_scenes[s].path = val_scene_paths[s];
427
+ tasks.push_back({&val_scenes[s], &val_scenes[s].path, "val", s, (TI)val_scene_paths.size()});
428
+ }
429
+
430
+ std::atomic<TI> next_task{0};
431
+ std::vector<std::thread> load_threads;
432
+ load_threads.reserve(actual_load_threads);
433
+ for (TI t = 0; t < actual_load_threads; t++) {
434
+ load_threads.emplace_back([&]() {
435
+ while (true) {
436
+ TI task_idx = next_task.fetch_add(1);
437
+ if (task_idx >= tasks.size()) break;
438
+ auto& task = tasks[task_idx];
439
+ auto* handle = yp::create_scene(task.path->c_str());
440
+ task.target->handle = handle;
441
+ std::lock_guard<std::mutex> lock(cout_mutex);
442
+ std::cout << "Loaded " << task.label << " scene " << task.index << "/" << task.count << ": "
443
+ << fs::path(*task.path).filename().string()
444
+ << " (" << yp::get_num_indoor_states(handle) << " indoor states)" << std::endl;
445
+ }
446
+ });
447
+ }
448
+ for (auto& t : load_threads) t.join();
449
+ std::cout << "All " << total_scenes << " scenes loaded." << std::endl;
450
+ }
451
+
452
+ std::mt19937 scene_rng(42);
453
+
454
+ // ---- Device setup ----
455
+ DEVICE_CPU device_cpu;
456
+ DEVICE_CUDA device_cuda;
457
+ rlt::init(device_cpu);
458
+ rlt::init(device_cuda);
459
+
460
+ DEVICE_CUDA::SPEC::RANDOM::ENGINE<> rng_cuda;
461
+ rlt::malloc(device_cuda, rng_cuda);
462
+ rlt::init(device_cuda, rng_cuda, 42);
463
+
464
+ // ---- Load teacher model ----
465
+ #ifdef RL_TOOLS_ENABLE_HDF5
466
+ // Load on CPU with Gradient capability (needed to copy head to backward-capable GPU model)
467
+ TEACHER_CPU_MODEL_GRAD teacher_cpu_grad;
468
+ rlt::malloc(device_cpu, teacher_cpu_grad);
469
+ {
470
+ auto file = rl_tools::persist::backends::hdf5::File(checkpoint_path, rl_tools::persist::backends::hdf5::Mode::READ);
471
+ auto mg = rlt::get_group(device_cpu, file, "model");
472
+ const bool success = rlt::load(device_cpu, teacher_cpu_grad, mg);
473
+ if (!success) {
474
+ std::cerr << "Failed to load teacher checkpoint: " << checkpoint_path << std::endl;
475
+ return 1;
476
+ }
477
+ }
478
+ std::cout << "Teacher model loaded from " << checkpoint_path << std::endl;
479
+
480
+ // Copy CPU Gradient → CPU Forward (needed as intermediate for GPU Forward transfer)
481
+ TEACHER_CPU_MODEL_FWD teacher_cpu_fwd;
482
+ rlt::malloc(device_cpu, teacher_cpu_fwd);
483
+ rlt::copy(device_cpu, device_cpu, teacher_cpu_grad, teacher_cpu_fwd);
484
+
485
+ // Copy CPU Forward → GPU Forward (teacher for encoder eval + head eval)
486
+ TEACHER_GPU_MODEL teacher;
487
+ typename TEACHER_GPU_MODEL::template Buffer<true> teacher_buffer;
488
+ rlt::malloc(device_cuda, teacher);
489
+ rlt::malloc(device_cuda, teacher_buffer);
490
+ rlt::copy(device_cpu, device_cuda, teacher_cpu_fwd, teacher);
491
+ rlt::free(device_cpu, teacher_cpu_fwd);
492
+
493
+ rlt::free(device_cpu, teacher_cpu_grad);
494
+ #else
495
+ std::cerr << "Error: HDF5 support required for loading teacher checkpoint" << std::endl;
496
+ return 1;
497
+ #endif
498
+
499
+ // ---- Student model setup ----
500
+ OPTIMIZER optimizer;
501
+ STUDENT_GPU_MODEL student;
502
+ typename STUDENT_GPU_MODEL::template Buffer<true> student_buffer;
503
+ rlt::malloc(device_cuda, optimizer);
504
+ rlt::malloc(device_cuda, student);
505
+ rlt::malloc(device_cuda, student_buffer);
506
+ rlt::init(device_cuda, optimizer);
507
+
508
+ STUDENT_HEAD_GPU student_head;
509
+ typename STUDENT_HEAD_GPU::template Buffer<true> student_head_buffer;
510
+ rlt::malloc(device_cuda, student_head);
511
+ rlt::malloc(device_cuda, student_head_buffer);
512
+
513
+ STUDENT_CPU_MODEL student_cpu;
514
+ STUDENT_CPU_MODEL_INFERENCE student_cpu_inference;
515
+ STUDENT_HEAD_CPU student_head_cpu;
516
+ STUDENT_HEAD_CPU_INFERENCE student_head_cpu_inference;
517
+ rlt::malloc(device_cpu, student_cpu);
518
+ rlt::malloc(device_cpu, student_cpu_inference);
519
+ rlt::malloc(device_cpu, student_head_cpu);
520
+ rlt::malloc(device_cpu, student_head_cpu_inference);
521
+ {
522
+ DEVICE_CPU::SPEC::RANDOM::ENGINE<> rng_cpu;
523
+ rlt::malloc(device_cpu, rng_cpu);
524
+ rlt::init(device_cpu, rng_cpu, 42);
525
+ rlt::init_weights(device_cpu, student_cpu, rng_cpu);
526
+ rlt::init_weights(device_cpu, student_head_cpu, rng_cpu);
527
+ rlt::free(device_cpu, rng_cpu);
528
+ }
529
+ rlt::copy(device_cpu, device_cuda, student_cpu, student);
530
+ rlt::copy(device_cpu, device_cuda, student_head_cpu, student_head);
531
+ rlt::reset_optimizer_state(device_cuda, optimizer, student);
532
+ rlt::reset_optimizer_state(device_cuda, optimizer, student_head);
533
+ std::cout << "Student model initialized" << std::endl;
534
+
535
+ // ---- GPU tensors ----
536
+ rlt::Tensor<GPU_INPUT_SPEC> gpu_input_a, gpu_input_b;
537
+ rlt::malloc(device_cuda, gpu_input_a);
538
+ rlt::malloc(device_cuda, gpu_input_b);
539
+
540
+ using GPU_D_INPUT_SPEC = rlt::tensor::Specification<T_GRADIENT, TI_CUDA, GPU_INPUT_SHAPE>;
541
+ rlt::Tensor<GPU_D_INPUT_SPEC> gpu_d_input_a, gpu_d_input_b;
542
+ rlt::malloc(device_cuda, gpu_d_input_a);
543
+ rlt::malloc(device_cuda, gpu_d_input_b);
544
+
545
+ // Head output gradient
546
+ using HEAD_D_OUTPUT_SPEC = rlt::tensor::Specification<T_GRADIENT, TI_CUDA, HEAD_OUTPUT_SHAPE>;
547
+ rlt::Tensor<HEAD_D_OUTPUT_SPEC> gpu_d_head_output;
548
+ rlt::malloc(device_cuda, gpu_d_head_output);
549
+
550
+ // d_concatenated from teacher head backward_input
551
+ using D_CONCAT_SHAPE = typename TEACHER_GPU_MODEL::SPEC::CONCAT_OUTPUT_SHAPE;
552
+ using D_CONCAT_SPEC = rlt::tensor::Specification<T_GRADIENT, TI_CUDA, D_CONCAT_SHAPE, true, rlt::tensor::RowMajorStride<D_CONCAT_SHAPE>>;
553
+ rlt::Tensor<D_CONCAT_SPEC> gpu_d_student_concat_task;
554
+ rlt::malloc(device_cuda, gpu_d_student_concat_task);
555
+
556
+ // Cosine similarity gradient buffers for each encoder branch
557
+ using ENCODER_OUTPUT_SHAPE = STUDENT_OUTPUT_SHAPE_0;
558
+ using D_ENCODER_SPEC = rlt::tensor::Specification<T_GRADIENT, TI_CUDA, ENCODER_OUTPUT_SHAPE, true, rlt::tensor::RowMajorStride<ENCODER_OUTPUT_SHAPE>>;
559
+ rlt::Tensor<D_ENCODER_SPEC> gpu_d_student_a_cos, gpu_d_student_b_cos;
560
+ rlt::malloc(device_cuda, gpu_d_student_a_cos);
561
+ rlt::malloc(device_cuda, gpu_d_student_b_cos);
562
+
563
+ // Teacher head evaluation output (for computing predictions and mask)
564
+ using TEACHER_PRED_SPEC = rlt::tensor::Specification<T_ACTIVATION, TI_CUDA, rlt::tensor::Shape<TI_CUDA, BATCH_SIZE, OUTPUT_DIM>>;
565
+ rlt::Tensor<TEACHER_PRED_SPEC> gpu_teacher_predictions;
566
+ rlt::malloc(device_cuda, gpu_teacher_predictions);
567
+
568
+ rlt::disable_dynamic_memory_allocation(device_cuda);
569
+
570
+ // Raw GPU buffers
571
+ float* gpu_targets;
572
+ cudaMalloc(&gpu_targets, TOTAL_OUTPUT_ELEMENTS * sizeof(float));
573
+ float* gpu_mask;
574
+ cudaMalloc(&gpu_mask, BATCH_SIZE * sizeof(float));
575
+ float* gpu_task_losses;
576
+ cudaMalloc(&gpu_task_losses, TOTAL_OUTPUT_ELEMENTS * sizeof(float));
577
+ float* gpu_cos_losses;
578
+ cudaMalloc(&gpu_cos_losses, ENCODER_SPATIAL * sizeof(float));
579
+ float* gpu_total_loss;
580
+ cudaMalloc(&gpu_total_loss, 2 * sizeof(float));
581
+
582
+ std::vector<float> cpu_targets(TOTAL_OUTPUT_ELEMENTS);
583
+ std::vector<rlt::rendering::raytracing::Camera<float>> cameras(NUM_CAMERAS);
584
+
585
+ // ---- Extrack setup ----
586
+ rlt::utils::extrack::Config<TI> extrack_config;
587
+ rlt::utils::extrack::Paths extrack_paths;
588
+ extrack_config.name = "yaw-prediction-distill";
589
+ extrack_config.population_variates = "cross-conv_channel-multiplier_resolution";
590
+ extrack_config.population_values = std::to_string(ABLATION_USE_CROSS_CONV) + "_" + std::to_string(ABLATION_CHANNEL_MULTIPLIER) + "_" + std::to_string(ABLATION_RESOLUTION);
591
+ rlt::init(device_cpu, extrack_config, extrack_paths, 0);
592
+
593
+ std::signal(SIGINT, signal_handler);
594
+
595
+ // ---- Training loop ----
596
+ auto train_mode = rlt::Mode<rlt::mode::Default<>>{};
597
+ auto eval_mode = rlt::Mode<rlt::mode::Evaluation<>>{};
598
+ using CLOCK = std::chrono::high_resolution_clock;
599
+ CLOCK::time_point total_start;
600
+ bool throughput_timer_started = false;
601
+
602
+ std::vector<TI> scene_indices(loaded_scenes.size());
603
+ std::iota(scene_indices.begin(), scene_indices.end(), 0);
604
+
605
+ for (TI iteration = 0; iteration < num_iterations && !signal_received; iteration++) {
606
+ if (!throughput_timer_started && iteration == 1) {
607
+ total_start = CLOCK::now();
608
+ throughput_timer_started = true;
609
+ }
610
+ rlt::set_step(device_cpu, device_cpu.logger, iteration);
611
+
612
+ // ---- Select random scenes ----
613
+ std::shuffle(scene_indices.begin(), scene_indices.end(), scene_rng);
614
+
615
+ // ---- Sample and render ----
616
+ for (TI s = 0; s < num_scenes_per_batch; s++) {
617
+ TI scene_idx = scene_indices[s];
618
+ const TI batch_offset = s * samples_per_scene;
619
+ yp::sample_camera_batch(
620
+ loaded_scenes[scene_idx].handle,
621
+ cameras.data(),
622
+ cpu_targets.data() + batch_offset * OUTPUT_DIM,
623
+ samples_per_scene,
624
+ DistillConfig::MAX_ANGLE,
625
+ DistillConfig::FOV_MIN,
626
+ DistillConfig::FOV_MAX
627
+ );
628
+ yp::render_batch<true>(loaded_scenes[scene_idx].handle, cameras.data());
629
+ }
630
+
631
+ for (TI s = 0; s < num_scenes_per_batch; s++) {
632
+ TI scene_idx = scene_indices[s];
633
+ auto& handle = loaded_scenes[scene_idx].handle;
634
+ rlt::render_sync(handle->device, *handle->env.renderer);
635
+ }
636
+
637
+ for (TI s = 0; s < num_scenes_per_batch; s++) {
638
+ TI scene_idx = scene_indices[s];
639
+ const TI batch_offset = s * samples_per_scene;
640
+ uint32_t* device_fb = yp::get_framebuffer_device_ptr(loaded_scenes[scene_idx].handle);
641
+ yp::cuda_kernels::rgba_to_activation_kernel<<<samples_per_scene, 256, 0, device_cuda.stream>>>(
642
+ device_fb, gpu_input_a._data, CAM_WIDTH, CAM_HEIGHT, 0, batch_offset
643
+ );
644
+ yp::cuda_kernels::rgba_to_activation_kernel<<<samples_per_scene, 256, 0, device_cuda.stream>>>(
645
+ device_fb, gpu_input_b._data, CAM_WIDTH, CAM_HEIGHT, samples_per_scene, batch_offset
646
+ );
647
+ }
648
+ cudaMemcpyAsync(gpu_targets, cpu_targets.data(), TOTAL_OUTPUT_ELEMENTS * sizeof(float), cudaMemcpyHostToDevice, device_cuda.stream);
649
+
650
+ // ---- Teacher forward (eval mode, frozen) ----
651
+ // evaluate_cuda runs all submodules and writes predictions directly
652
+ rlt::evaluate_cuda(device_cuda, teacher, gpu_input_a, gpu_input_b, gpu_teacher_predictions, teacher_buffer, rng_cuda, eval_mode);
653
+
654
+ // Compute per-sample filter mask based on teacher error
655
+ {
656
+ constexpr int threads = 256;
657
+ const int blocks = (BATCH_SIZE + threads - 1) / threads;
658
+ compute_teacher_error_mask_kernel<<<blocks, threads, 0, device_cuda.stream>>>(
659
+ gpu_teacher_predictions._data, gpu_targets, gpu_mask, BATCH_SIZE, DistillConfig::TEACHER_ERROR_THRESHOLD
660
+ );
661
+ }
662
+
663
+ // ---- Student forward (train mode) ----
664
+ rlt::zero_gradient(device_cuda, student);
665
+ rlt::zero_gradient(device_cuda, student_head);
666
+
667
+ rlt::forward(device_cuda, rlt::get<0>(student.pipelines), gpu_input_a, rlt::get<0>(student_buffer.sub_buffers), rng_cuda, train_mode);
668
+ rlt::forward(device_cuda, rlt::get<1>(student.pipelines), gpu_input_b, rlt::get<1>(student_buffer.sub_buffers), rng_cuda, train_mode);
669
+
670
+ auto student_output_a = rlt::output(device_cuda, rlt::get<0>(student.pipelines));
671
+ auto student_output_b = rlt::output(device_cuda, rlt::get<1>(student.pipelines));
672
+ rlt::copy(device_cuda, device_cuda, student_output_a, rlt::get<0>(student_buffer.intermediates));
673
+ rlt::copy(device_cuda, device_cuda, student_output_b, rlt::get<1>(student_buffer.intermediates));
674
+
675
+ // ---- Dense supervision: cosine similarity loss on encoder features ----
676
+ {
677
+ constexpr int total_positions = ENCODER_SPATIAL;
678
+ constexpr int threads = 256;
679
+ constexpr int blocks = (total_positions + threads - 1) / threads;
680
+ cosine_similarity_loss_gradient_kernel<<<blocks, threads, 0, device_cuda.stream>>>(
681
+ rlt::get<0>(student_buffer.intermediates)._data,
682
+ rlt::get<0>(teacher_buffer.intermediates)._data,
683
+ gpu_d_student_a_cos._data,
684
+ gpu_cos_losses,
685
+ gpu_mask,
686
+ BATCH_SIZE,
687
+ SPATIAL_PER_SAMPLE,
688
+ TEACHER_ENCODER_DIM_VAL,
689
+ DistillConfig::LOSS_WEIGHT_COSINE
690
+ );
691
+ cosine_similarity_loss_gradient_kernel<<<blocks, threads, 0, device_cuda.stream>>>(
692
+ rlt::get<1>(student_buffer.intermediates)._data,
693
+ rlt::get<1>(teacher_buffer.intermediates)._data,
694
+ gpu_d_student_b_cos._data,
695
+ gpu_cos_losses,
696
+ gpu_mask,
697
+ BATCH_SIZE,
698
+ SPATIAL_PER_SAMPLE,
699
+ TEACHER_ENCODER_DIM_VAL,
700
+ DistillConfig::LOSS_WEIGHT_COSINE
701
+ );
702
+ }
703
+
704
+ // ---- Task loss: student features through teacher head ----
705
+ {
706
+ constexpr int total = ENCODER_SPATIAL * STUDENT_CONCAT_DIM;
707
+ constexpr int threads = 256;
708
+ constexpr int blocks = (total + threads - 1) / threads;
709
+ yp::cuda_kernels::concatenate_kernel<<<blocks, threads, 0, device_cuda.stream>>>(
710
+ rlt::get<0>(student_buffer.intermediates)._data, STUDENT_ENCODER_DIM_VAL,
711
+ rlt::get<1>(student_buffer.intermediates)._data, STUDENT_ENCODER_DIM_VAL,
712
+ student_buffer.concatenated._data, ENCODER_SPATIAL
713
+ );
714
+ }
715
+
716
+ // Forward through student head
717
+ rlt::forward(device_cuda, student_head, student_buffer.concatenated, student_head_buffer, rng_cuda, train_mode);
718
+ {
719
+ auto head_output = rlt::output(device_cuda, student_head);
720
+ // Compute Huber loss against ground truth targets
721
+ {
722
+ constexpr int threads = 256;
723
+ constexpr int blocks = (TOTAL_OUTPUT_ELEMENTS + threads - 1) / threads;
724
+ huber_loss_gradient_masked_kernel<<<blocks, threads, 0, device_cuda.stream>>>(
725
+ head_output._data, gpu_targets, gpu_d_head_output._data, gpu_task_losses, gpu_mask,
726
+ BATCH_SIZE, OUTPUT_DIM, DistillConfig::HUBER_DELTA, DistillConfig::LOSS_WEIGHT_TASK
727
+ );
728
+ }
729
+ }
730
+
731
+ // Backward through student head to get d_student_concatenated
732
+ rlt::backward_full(device_cuda, student_head, student_buffer.concatenated, gpu_d_head_output, gpu_d_student_concat_task, student_head_buffer);
733
+
734
+ // Split task gradient into per-branch gradients and add cosine similarity gradients
735
+ {
736
+ constexpr int total = ENCODER_SPATIAL * STUDENT_CONCAT_DIM;
737
+ constexpr int threads = 256;
738
+ constexpr int blocks = (total + threads - 1) / threads;
739
+ yp::cuda_kernels::split_kernel<<<blocks, threads, 0, device_cuda.stream>>>(
740
+ gpu_d_student_concat_task._data, STUDENT_ENCODER_DIM_VAL, STUDENT_ENCODER_DIM_VAL,
741
+ rlt::get<0>(student_buffer.d_outputs)._data,
742
+ rlt::get<1>(student_buffer.d_outputs)._data,
743
+ ENCODER_SPATIAL
744
+ );
745
+ }
746
+
747
+ // Add cosine similarity gradients to task gradients
748
+ {
749
+ constexpr int total = ENCODER_SPATIAL * STUDENT_ENCODER_DIM_VAL;
750
+ constexpr int threads = 256;
751
+ constexpr int blocks = (total + threads - 1) / threads;
752
+ add_gradients_kernel<<<blocks, threads, 0, device_cuda.stream>>>(
753
+ rlt::get<0>(student_buffer.d_outputs)._data, gpu_d_student_a_cos._data, total
754
+ );
755
+ add_gradients_kernel<<<blocks, threads, 0, device_cuda.stream>>>(
756
+ rlt::get<1>(student_buffer.d_outputs)._data, gpu_d_student_b_cos._data, total
757
+ );
758
+ }
759
+
760
+ // ---- Student backward ----
761
+ rlt::backward_full(device_cuda, rlt::get<0>(student.pipelines), gpu_input_a, rlt::get<0>(student_buffer.d_outputs), gpu_d_input_a, rlt::get<0>(student_buffer.sub_buffers));
762
+ rlt::backward_full(device_cuda, rlt::get<1>(student.pipelines), gpu_input_b, rlt::get<1>(student_buffer.d_outputs), gpu_d_input_b, rlt::get<1>(student_buffer.sub_buffers));
763
+
764
+ // ---- Optimizer step ----
765
+ rlt::step(device_cuda, optimizer, student);
766
+ rlt::step(device_cuda, optimizer, student_head);
767
+
768
+ // ---- Checkpointing ----
769
+ #ifdef RL_TOOLS_ENABLE_HDF5
770
+ if (iteration % DistillConfig::CHECKPOINT_INTERVAL == 0 || iteration == num_iterations - 1) {
771
+ cudaStreamSynchronize(device_cuda.stream);
772
+ rlt::copy(device_cuda, device_cpu, student, student_cpu);
773
+ rlt::copy(device_cpu, device_cpu, student_cpu, student_cpu_inference);
774
+ rlt::copy(device_cuda, device_cpu, student_head, student_head_cpu);
775
+ rlt::copy(device_cpu, device_cpu, student_head_cpu, student_head_cpu_inference);
776
+ auto step_folder = rlt::get_step_folder(device_cpu, extrack_config, extrack_paths, iteration);
777
+ auto file = rl_tools::persist::backends::hdf5::File((step_folder / "checkpoint.h5").string(), rl_tools::persist::backends::hdf5::Mode::WRITE);
778
+ auto mg = rlt::create_group(device_cpu, file, "student");
779
+ rlt::save(device_cpu, student_cpu_inference, mg);
780
+ auto mg_head = rlt::create_group(device_cpu, file, "student_head");
781
+ rlt::save(device_cpu, student_head_cpu_inference, mg_head);
782
+ std::cout << " Checkpoint: " << (step_folder / "checkpoint.h5").string() << std::endl;
783
+ }
784
+ #endif
785
+
786
+ // ---- Logging ----
787
+ if (iteration % DistillConfig::LOG_INTERVAL == 0 || iteration == num_iterations - 1) {
788
+ reduce_loss_kernel<<<1, 1, 0, device_cuda.stream>>>(
789
+ gpu_task_losses, gpu_total_loss, TOTAL_OUTPUT_ELEMENTS
790
+ );
791
+ reduce_loss_kernel<<<1, 1, 0, device_cuda.stream>>>(
792
+ gpu_cos_losses, gpu_total_loss + 1, ENCODER_SPATIAL
793
+ );
794
+ cudaStreamSynchronize(device_cuda.stream);
795
+
796
+ float loss_vals[2];
797
+ cudaMemcpy(loss_vals, gpu_total_loss, 2 * sizeof(float), cudaMemcpyDeviceToHost);
798
+
799
+ auto head_output = rlt::output(device_cuda, student_head);
800
+ std::vector<T_ACTIVATION> pred_buf_raw(TOTAL_OUTPUT_ELEMENTS);
801
+ cudaMemcpy(pred_buf_raw.data(), head_output._data, TOTAL_OUTPUT_ELEMENTS * sizeof(T_ACTIVATION), cudaMemcpyDeviceToHost);
802
+
803
+ float err_px = 0.0f, err_py = 0.0f, err_roll = 0.0f;
804
+ for (TI_CUDA i = 0; i < BATCH_SIZE; i++) {
805
+ err_px += std::abs((float)pred_buf_raw[i * OUTPUT_DIM + 0] - cpu_targets[i * OUTPUT_DIM + 0]);
806
+ err_py += std::abs((float)pred_buf_raw[i * OUTPUT_DIM + 1] - cpu_targets[i * OUTPUT_DIM + 1]);
807
+ err_roll += std::abs((float)pred_buf_raw[i * OUTPUT_DIM + 2] - cpu_targets[i * OUTPUT_DIM + 2]);
808
+ }
809
+ err_px /= BATCH_SIZE;
810
+ err_py /= BATCH_SIZE;
811
+ err_roll /= BATCH_SIZE;
812
+
813
+ // Count masked samples
814
+ std::vector<float> mask_buf(BATCH_SIZE);
815
+ cudaMemcpy(mask_buf.data(), gpu_mask, BATCH_SIZE * sizeof(float), cudaMemcpyDeviceToHost);
816
+ TI num_valid = 0;
817
+ for (TI i = 0; i < BATCH_SIZE; i++) {
818
+ if (mask_buf[i] > 0.5f) num_valid++;
819
+ }
820
+
821
+ auto now = CLOCK::now();
822
+ double elapsed_s = throughput_timer_started
823
+ ? std::chrono::duration<double>(now - total_start).count()
824
+ : 0.0;
825
+ double samples_per_s = elapsed_s > 0.0 && iteration > 0
826
+ ? static_cast<double>(iteration * BATCH_SIZE) / elapsed_s
827
+ : 0.0;
828
+
829
+ rlt::add_scalar(device_cpu, device_cpu.logger, "train/task_loss", loss_vals[0]);
830
+ rlt::add_scalar(device_cpu, device_cpu.logger, "train/cosine_loss", loss_vals[1]);
831
+ rlt::add_scalar(device_cpu, device_cpu.logger, "train/err_px", err_px);
832
+ rlt::add_scalar(device_cpu, device_cpu.logger, "train/err_py", err_py);
833
+ rlt::add_scalar(device_cpu, device_cpu.logger, "train/err_roll", err_roll);
834
+ rlt::add_scalar(device_cpu, device_cpu.logger, "train/valid_samples", (float)num_valid);
835
+ rlt::add_scalar(device_cpu, device_cpu.logger, "train/samples_per_s", samples_per_s);
836
+
837
+ std::cout << "[iter " << iteration << "/" << num_iterations << "]"
838
+ << " task=" << loss_vals[0]
839
+ << " cos=" << loss_vals[1]
840
+ << " err_px=" << err_px
841
+ << " err_py=" << err_py
842
+ << " err_roll=" << err_roll
843
+ << " valid=" << num_valid << "/" << BATCH_SIZE
844
+ << " samples/s=" << samples_per_s
845
+ << std::endl;
846
+ }
847
+
848
+ // ---- Validation ----
849
+ if (val_scenes.size() > 0 && (iteration % DistillConfig::VAL_INTERVAL == 0 || iteration == num_iterations - 1)) {
850
+ float val_err_px_sum = 0.0f, val_err_py_sum = 0.0f, val_err_roll_sum = 0.0f;
851
+ float teacher_err_px_sum = 0.0f, teacher_err_py_sum = 0.0f, teacher_err_roll_sum = 0.0f;
852
+ TI val_total_samples = 0;
853
+
854
+ for (TI vs = 0; vs < val_scenes.size(); vs++) {
855
+ yp::sample_camera_batch(
856
+ val_scenes[vs].handle,
857
+ cameras.data(),
858
+ cpu_targets.data(),
859
+ BATCH_SIZE,
860
+ DistillConfig::MAX_ANGLE,
861
+ DistillConfig::FOV_MIN,
862
+ DistillConfig::FOV_MAX
863
+ );
864
+ yp::render_batch<false>(val_scenes[vs].handle, cameras.data());
865
+ uint32_t* device_fb = yp::get_framebuffer_device_ptr(val_scenes[vs].handle);
866
+
867
+ yp::cuda_kernels::rgba_to_activation_kernel<<<BATCH_SIZE, 256, 0, device_cuda.stream>>>(
868
+ device_fb, gpu_input_a._data, CAM_WIDTH, CAM_HEIGHT, 0, 0
869
+ );
870
+ yp::cuda_kernels::rgba_to_activation_kernel<<<BATCH_SIZE, 256, 0, device_cuda.stream>>>(
871
+ device_fb, gpu_input_b._data, CAM_WIDTH, CAM_HEIGHT, BATCH_SIZE, 0
872
+ );
873
+ cudaMemcpyAsync(gpu_targets, cpu_targets.data(), TOTAL_OUTPUT_ELEMENTS * sizeof(float),
874
+ cudaMemcpyHostToDevice, device_cuda.stream);
875
+
876
+ // Student forward (eval mode)
877
+ rlt::forward(device_cuda, rlt::get<0>(student.pipelines), gpu_input_a, rlt::get<0>(student_buffer.sub_buffers), rng_cuda, eval_mode);
878
+ rlt::forward(device_cuda, rlt::get<1>(student.pipelines), gpu_input_b, rlt::get<1>(student_buffer.sub_buffers), rng_cuda, eval_mode);
879
+
880
+ auto val_output_a = rlt::output(device_cuda, rlt::get<0>(student.pipelines));
881
+ auto val_output_b = rlt::output(device_cuda, rlt::get<1>(student.pipelines));
882
+ rlt::copy(device_cuda, device_cuda, val_output_a, rlt::get<0>(student_buffer.intermediates));
883
+ rlt::copy(device_cuda, device_cuda, val_output_b, rlt::get<1>(student_buffer.intermediates));
884
+
885
+ {
886
+ constexpr int total = ENCODER_SPATIAL * STUDENT_CONCAT_DIM;
887
+ constexpr int threads = 256;
888
+ constexpr int blocks = (total + threads - 1) / threads;
889
+ yp::cuda_kernels::concatenate_kernel<<<blocks, threads, 0, device_cuda.stream>>>(
890
+ rlt::get<0>(student_buffer.intermediates)._data, STUDENT_ENCODER_DIM_VAL,
891
+ rlt::get<1>(student_buffer.intermediates)._data, STUDENT_ENCODER_DIM_VAL,
892
+ student_buffer.concatenated._data, ENCODER_SPATIAL
893
+ );
894
+ }
895
+
896
+ // Through student head (eval mode)
897
+ rlt::evaluate(device_cuda, student_head, student_buffer.concatenated, gpu_teacher_predictions, student_head_buffer, rng_cuda, eval_mode);
898
+
899
+ // Teacher forward (eval mode) for expert baseline
900
+ rlt::evaluate_cuda(device_cuda, teacher, gpu_input_a, gpu_input_b, gpu_teacher_predictions, teacher_buffer, rng_cuda, eval_mode);
901
+
902
+ cudaStreamSynchronize(device_cuda.stream);
903
+
904
+ std::vector<T_ACTIVATION> teacher_pred_buf_raw(TOTAL_OUTPUT_ELEMENTS);
905
+ cudaMemcpy(teacher_pred_buf_raw.data(), gpu_teacher_predictions._data, TOTAL_OUTPUT_ELEMENTS * sizeof(T_ACTIVATION), cudaMemcpyDeviceToHost);
906
+
907
+ for (TI_CUDA i = 0; i < BATCH_SIZE; i++) {
908
+ teacher_err_px_sum += std::abs((float)teacher_pred_buf_raw[i * OUTPUT_DIM + 0] - cpu_targets[i * OUTPUT_DIM + 0]);
909
+ teacher_err_py_sum += std::abs((float)teacher_pred_buf_raw[i * OUTPUT_DIM + 1] - cpu_targets[i * OUTPUT_DIM + 1]);
910
+ teacher_err_roll_sum += std::abs((float)teacher_pred_buf_raw[i * OUTPUT_DIM + 2] - cpu_targets[i * OUTPUT_DIM + 2]);
911
+ }
912
+
913
+ // Rerun student through head for student error (reuse gpu_teacher_predictions buffer)
914
+ rlt::evaluate(device_cuda, student_head, student_buffer.concatenated, gpu_teacher_predictions, student_head_buffer, rng_cuda, eval_mode);
915
+
916
+ cudaStreamSynchronize(device_cuda.stream);
917
+
918
+ std::vector<T_ACTIVATION> val_pred_buf_raw(TOTAL_OUTPUT_ELEMENTS);
919
+ cudaMemcpy(val_pred_buf_raw.data(), gpu_teacher_predictions._data, TOTAL_OUTPUT_ELEMENTS * sizeof(T_ACTIVATION), cudaMemcpyDeviceToHost);
920
+
921
+ for (TI_CUDA i = 0; i < BATCH_SIZE; i++) {
922
+ val_err_px_sum += std::abs((float)val_pred_buf_raw[i * OUTPUT_DIM + 0] - cpu_targets[i * OUTPUT_DIM + 0]);
923
+ val_err_py_sum += std::abs((float)val_pred_buf_raw[i * OUTPUT_DIM + 1] - cpu_targets[i * OUTPUT_DIM + 1]);
924
+ val_err_roll_sum += std::abs((float)val_pred_buf_raw[i * OUTPUT_DIM + 2] - cpu_targets[i * OUTPUT_DIM + 2]);
925
+ }
926
+ val_total_samples += BATCH_SIZE;
927
+ }
928
+
929
+ float val_err_px = val_err_px_sum / val_total_samples;
930
+ float val_err_py = val_err_py_sum / val_total_samples;
931
+ float val_err_roll = val_err_roll_sum / val_total_samples;
932
+ float teacher_err_px = teacher_err_px_sum / val_total_samples;
933
+ float teacher_err_py = teacher_err_py_sum / val_total_samples;
934
+ float teacher_err_roll = teacher_err_roll_sum / val_total_samples;
935
+
936
+ rlt::add_scalar(device_cpu, device_cpu.logger, "val/err_px", val_err_px);
937
+ rlt::add_scalar(device_cpu, device_cpu.logger, "val/err_py", val_err_py);
938
+ rlt::add_scalar(device_cpu, device_cpu.logger, "val/err_roll", val_err_roll);
939
+ rlt::add_scalar(device_cpu, device_cpu.logger, "val/teacher_err_px", teacher_err_px);
940
+ rlt::add_scalar(device_cpu, device_cpu.logger, "val/teacher_err_py", teacher_err_py);
941
+ rlt::add_scalar(device_cpu, device_cpu.logger, "val/teacher_err_roll", teacher_err_roll);
942
+
943
+ std::cout << "[iter " << iteration << "] VAL"
944
+ << " err_px=" << val_err_px
945
+ << " err_py=" << val_err_py
946
+ << " err_roll=" << val_err_roll
947
+ << " teacher_px=" << teacher_err_px
948
+ << " teacher_py=" << teacher_err_py
949
+ << " teacher_roll=" << teacher_err_roll << std::endl;
950
+ }
951
+ }
952
+
953
+ if (signal_received) {
954
+ std::cout << "Training interrupted by signal " << signal_received << "." << std::endl;
955
+ } else {
956
+ std::cout << "Distillation complete." << std::endl;
957
+ }
958
+
959
+ // ---- Cleanup ----
960
+ cudaFree(gpu_targets);
961
+ cudaFree(gpu_mask);
962
+ cudaFree(gpu_task_losses);
963
+ cudaFree(gpu_cos_losses);
964
+ cudaFree(gpu_total_loss);
965
+ rlt::free(device_cuda, gpu_input_a);
966
+ rlt::free(device_cuda, gpu_input_b);
967
+ rlt::free(device_cuda, gpu_d_input_a);
968
+ rlt::free(device_cuda, gpu_d_input_b);
969
+ rlt::free(device_cuda, gpu_d_head_output);
970
+ rlt::free(device_cuda, gpu_d_student_concat_task);
971
+ rlt::free(device_cuda, gpu_d_student_a_cos);
972
+ rlt::free(device_cuda, gpu_d_student_b_cos);
973
+ rlt::free(device_cuda, gpu_teacher_predictions);
974
+ rlt::free(device_cuda, student_buffer);
975
+ rlt::free(device_cuda, student);
976
+ rlt::free(device_cuda, optimizer);
977
+ rlt::free(device_cuda, student_head_buffer);
978
+ rlt::free(device_cuda, student_head);
979
+ rlt::free(device_cuda, teacher_buffer);
980
+ rlt::free(device_cuda, teacher);
981
+ rlt::free(device_cuda, rng_cuda);
982
+ rlt::free(device_cpu, student_cpu);
983
+ rlt::free(device_cpu, student_cpu_inference);
984
+ rlt::free(device_cpu, student_head_cpu);
985
+ rlt::free(device_cpu, student_head_cpu_inference);
986
+ for (auto& s : loaded_scenes) {
987
+ yp::destroy_scene(s.handle);
988
+ }
989
+ for (auto& s : val_scenes) {
990
+ yp::destroy_scene(s.handle);
991
+ }
992
+ rlt::free(device_cpu, device_cpu.logger);
993
+
994
+ return 0;
995
+ }