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.

trt_loader.cc 2.4 kB

4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /**
  2. * Copyright 2021 Huawei Technologies Co., Ltd
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. #include "runtime/device/gpu/trt_loader.h"
  17. #include <dlfcn.h>
  18. #include <memory>
  19. #include <NvInferRuntimeCommon.h>
  20. #include "backend/kernel_compiler/gpu/trt/trt_utils.h"
  21. namespace mindspore {
  22. namespace device {
  23. namespace gpu {
  24. TrtLoader::TrtLoader()
  25. : nvinfer_loaded_(false), nvinfer_handle_(nullptr), create_infer_builder_(nullptr), create_infer_runtime_(nullptr) {
  26. nvinfer_handle_ = dlopen("libnvinfer.so.7", RTLD_NOW | RTLD_LOCAL);
  27. if (nvinfer_handle_ == nullptr) {
  28. MS_LOG(WARNING) << "Can not open libnvinfer.so.7 " << dlerror()
  29. << ". Install Tensor-RT and export LD_LIBRARY_PATH=${TENSORRT_HOME}/lib:$LD_LIBRARY_PATH.";
  30. return;
  31. }
  32. create_infer_builder_ = (CreateInferBuilder_t)dlsym(nvinfer_handle_, "createInferBuilder_INTERNAL");
  33. if (create_infer_builder_ == nullptr) {
  34. MS_LOG(WARNING) << "Failed to get createInferBuilder_INTERNAL symbol. " << dlerror();
  35. return;
  36. }
  37. create_infer_runtime_ = (CreateInferRuntime_t)dlsym(nvinfer_handle_, "createInferRuntime_INTERNAL");
  38. if (create_infer_runtime_ == nullptr) {
  39. MS_LOG(WARNING) << "Failed to get createInferRuntime_INTERNAL symbol. " << dlerror();
  40. return;
  41. }
  42. nvinfer_loaded_ = true;
  43. }
  44. TrtLoader::~TrtLoader() {
  45. if (nvinfer_handle_ != nullptr) {
  46. dlclose(nvinfer_handle_);
  47. }
  48. }
  49. std::shared_ptr<nvinfer1::IBuilder> TrtLoader::CreateInferBuilder(nvinfer1::ILogger *logger) {
  50. return TrtPtr<nvinfer1::IBuilder>(create_infer_builder_(*logger, NV_TENSORRT_VERSION));
  51. }
  52. std::shared_ptr<nvinfer1::IRuntime> TrtLoader::CreateInferRuntime(nvinfer1::ILogger *logger) {
  53. return TrtPtr<nvinfer1::IRuntime>(create_infer_runtime_(*logger, NV_TENSORRT_VERSION));
  54. }
  55. } // namespace gpu
  56. } // namespace device
  57. } // namespace mindspore