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

ops.cpp 4.4 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /**
  2. * \file imperative/python/src/ops.cpp
  3. * MegEngine is Licensed under the Apache License, Version 2.0 (the "License")
  4. *
  5. * Copyright (c) 2014-2020 Megvii Inc. All rights reserved.
  6. *
  7. * Unless required by applicable law or agreed to in writing,
  8. * software distributed under the License is distributed on an
  9. * "AS IS" BASIS, WITHOUT ARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. */
  11. #include "./ops.h"
  12. #include "megbrain/imperative.h"
  13. #include "megbrain/imperative/ops/backward_graph.h"
  14. #include "megbrain/imperative/ops/opr_attr.h"
  15. #include "megbrain/imperative/ops/tensor_manip.h"
  16. #include "megbrain/imperative/ops/collective_comm.h"
  17. #include "megbrain/imperative/ops/io_remote.h"
  18. #include "megbrain/imperative/ops/cond_take.h"
  19. #include "megbrain/imperative/ops/nms.h"
  20. namespace py = pybind11;
  21. void init_ops(py::module m) {
  22. using namespace mgb::imperative;
  23. py::class_<OprAttr, std::shared_ptr<OprAttr>, OpDef>(m, "OprAttr")
  24. .def(py::init<>())
  25. .def_readwrite("type", &OprAttr::type)
  26. .def_readwrite("param", &OprAttr::param)
  27. .def_readwrite("config", &OprAttr::config)
  28. .def_property("param",
  29. [](const OprAttr& attr) -> py::bytes {
  30. return std::string(attr.param.begin(), attr.param.end());
  31. },
  32. [] (OprAttr& attr, py::bytes data) {
  33. auto s = py::cast<std::string>(data);
  34. attr.param.clear();
  35. attr.param.insert(attr.param.end(), s.begin(), s.end());
  36. });
  37. py::class_<GetVarShape, std::shared_ptr<GetVarShape>, OpDef>(m, "GetVarShape")
  38. .def(py::init());
  39. #define V(m) .value(#m, CollectiveComm::Mode::m)
  40. py::enum_<CollectiveComm::Mode>(m, "CollectiveCommMode")
  41. V(REDUCE_SUM)
  42. V(BROADCAST)
  43. V(ALL_GATHER)
  44. V(REDUCE_SCATTER_SUM)
  45. V(ALL_REDUCE_SUM)
  46. V(ALL_REDUCE_MAX)
  47. V(ALL_REDUCE_MIN)
  48. V(ALL_REDUCE_PROD)
  49. V(GATHER)
  50. V(SCATTER)
  51. V(ALL_TO_ALL);
  52. #undef V
  53. py::class_<CollectiveComm, std::shared_ptr<CollectiveComm>, OpDef>(m, "CollectiveComm")
  54. .def(py::init<>())
  55. .def_readwrite("key", &CollectiveComm::key)
  56. .def_readwrite("nr_devices", &CollectiveComm::nr_devices)
  57. .def_readwrite("rank", &CollectiveComm::rank)
  58. .def_readwrite("is_root", &CollectiveComm::is_root)
  59. .def_readwrite("local_grad", &CollectiveComm::local_grad)
  60. .def_readwrite("addr", &CollectiveComm::addr)
  61. .def_readwrite("port", &CollectiveComm::port)
  62. .def_readwrite("mode", &CollectiveComm::mode)
  63. .def_readwrite("dtype", &CollectiveComm::dtype)
  64. .def_readwrite("backend", &CollectiveComm::backend)
  65. .def_readwrite("comp_node", &CollectiveComm::comp_node);
  66. py::class_<RemoteSend, std::shared_ptr<RemoteSend>, OpDef>(m, "RemoteSend")
  67. .def(py::init<>())
  68. .def_readwrite("key", &RemoteSend::key)
  69. .def_readwrite("addr", &RemoteSend::addr)
  70. .def_readwrite("port", &RemoteSend::port)
  71. .def_readwrite("rank_to", &RemoteSend::rank_to);
  72. py::class_<RemoteRecv, std::shared_ptr<RemoteRecv>, OpDef>(m, "RemoteRecv")
  73. .def(py::init<>())
  74. .def_readwrite("key", &RemoteRecv::key)
  75. .def_readwrite("addr", &RemoteRecv::addr)
  76. .def_readwrite("port", &RemoteRecv::port)
  77. .def_readwrite("rank_from", &RemoteRecv::rank_from)
  78. .def_readwrite("shape", &RemoteRecv::shape)
  79. .def_readwrite("cn", &RemoteRecv::cn)
  80. .def_readwrite("dtype", &RemoteRecv::dtype);
  81. py::class_<ParamPackSplit, std::shared_ptr<ParamPackSplit>, OpDef>(m, "ParamPackSplit")
  82. .def(py::init<>())
  83. .def_readwrite("offsets", &ParamPackSplit::offsets)
  84. .def_readwrite("shapes", &ParamPackSplit::shapes);
  85. py::class_<ParamPackConcat, std::shared_ptr<ParamPackConcat>, OpDef>(m, "ParamPackConcat")
  86. .def(py::init<>())
  87. .def_readwrite("offsets", &ParamPackConcat::offsets);
  88. py::class_<BackwardGraph, std::shared_ptr<BackwardGraph>, OpDef>(m, "BackwardGraph");
  89. py::class_<CondTake, std::shared_ptr<CondTake>, OpDef>(m, "CondTake")
  90. .def(py::init<>());
  91. py::class_<NMSKeep, std::shared_ptr<NMSKeep>, OpDef>(m, "NMSKeep")
  92. .def(py::init<float, uint32_t>())
  93. .def_readwrite("iou_thresh", &NMSKeep::iou_thresh)
  94. .def_readwrite("max_output", &NMSKeep::max_output);
  95. }

MegEngine 安装包中集成了使用 GPU 运行代码所需的 CUDA 环境,不用区分 CPU 和 GPU 版。 如果想要运行 GPU 程序,请确保机器本身配有 GPU 硬件设备并安装好驱动。 如果你想体验在云端 GPU 算力平台进行深度学习开发的感觉,欢迎访问 MegStudio 平台