0012-use-dynamic-backend-loading-for-clip.patch 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: jmorganca <jmorganca@gmail.com>
  3. Date: Sat, 4 Jan 2025 22:52:48 -0800
  4. Subject: [PATCH] use dynamic backend loading for clip
  5. ---
  6. examples/llava/clip.cpp | 74 +++++++++++++++--------------------------
  7. 1 file changed, 27 insertions(+), 47 deletions(-)
  8. diff --git a/examples/llava/clip.cpp b/examples/llava/clip.cpp
  9. index 205af1eb..560021c7 100644
  10. --- a/examples/llava/clip.cpp
  11. +++ b/examples/llava/clip.cpp
  12. @@ -9,25 +9,25 @@
  13. #include "ggml-backend.h"
  14. #include "gguf.h"
  15. -//#ifdef GGML_USE_CUDA
  16. -//#include "ggml-cuda.h"
  17. -//#endif
  18. -//
  19. -//#ifdef GGML_USE_SYCL
  20. -//#include "ggml-sycl.h"
  21. -//#endif
  22. -//
  23. -//#ifdef GGML_USE_METAL
  24. -//#include "ggml-metal.h"
  25. -//#endif
  26. -//
  27. -//#ifdef GGML_USE_CANN
  28. -//#include "ggml-cann.h"
  29. -//#endif
  30. -//
  31. -//#ifdef GGML_USE_VULKAN
  32. -//#include "ggml-vulkan.h"
  33. -//#endif
  34. +#ifdef GGML_USE_CUDA
  35. +#include "ggml-cuda.h"
  36. +#endif
  37. +
  38. +#ifdef GGML_USE_SYCL
  39. +#include "ggml-sycl.h"
  40. +#endif
  41. +
  42. +#ifdef GGML_USE_METAL
  43. +#include "ggml-metal.h"
  44. +#endif
  45. +
  46. +#ifdef GGML_USE_CANN
  47. +#include "ggml-cann.h"
  48. +#endif
  49. +
  50. +#ifdef GGML_USE_VULKAN
  51. +#include "ggml-vulkan.h"
  52. +#endif
  53. #define STB_IMAGE_IMPLEMENTATION
  54. #include "stb_image.h"
  55. @@ -1309,35 +1309,15 @@ struct clip_ctx * clip_model_load(const char * fname, const int verbosity = 1) {
  56. }
  57. }
  58. -//#ifdef GGML_USE_CUDA
  59. -// new_clip->backend = ggml_backend_cuda_init(0);
  60. -// LOG_INF("%s: CLIP using CUDA backend\n", __func__);
  61. -//#endif
  62. -//
  63. -//#ifdef GGML_USE_METAL
  64. -// new_clip->backend = ggml_backend_metal_init();
  65. -// LOG_INF("%s: CLIP using Metal backend\n", __func__);
  66. -//#endif
  67. -//
  68. -//#ifdef GGML_USE_CANN
  69. -// new_clip->backend = ggml_backend_cann_init(0);
  70. -// LOG_INF("%s: CLIP using CANN backend\n", __func__);
  71. -//#endif
  72. -//
  73. -//#ifdef GGML_USE_VULKAN
  74. -// new_clip->backend = ggml_backend_vk_init(0);
  75. -// LOG_INF("%s: CLIP using Vulkan backend\n", __func__);
  76. -//#endif
  77. -//
  78. -//#ifdef GGML_USE_SYCL
  79. -// new_clip->backend = ggml_backend_sycl_init(0);
  80. -// LOG_INF("%s: CLIP using SYCL backend\n", __func__);
  81. -//#endif
  82. -
  83. - if (!new_clip->backend) {
  84. - new_clip->backend = ggml_backend_cpu_init();
  85. - LOG_INF("%s: CLIP using CPU backend\n", __func__);
  86. + ggml_backend_t backend = ggml_backend_init_best();
  87. + if (backend == nullptr) {
  88. + LOG_ERR("%s: failed to initialize backend\n", __func__);
  89. + clip_free(new_clip);
  90. + gguf_free(ctx);
  91. + return nullptr;
  92. }
  93. + LOG_INF("%s: using %s backend\n", __func__, ggml_backend_name(backend));
  94. + new_clip->backend = backend;
  95. // model size and capabilities
  96. {