Skip to content

Commit 1555308

Browse files
committed
wip
1 parent 9c51d87 commit 1555308

File tree

6 files changed

+26
-3
lines changed

6 files changed

+26
-3
lines changed

CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ option(SD_BUILD_EXAMPLES "sd: build examples" ${SD_STANDALONE})
2727
option(SD_CUBLAS "sd: cuda backend" OFF)
2828
option(SD_HIPBLAS "sd: rocm backend" OFF)
2929
option(SD_METAL "sd: metal backend" OFF)
30+
option(SD_VULKAN "sd: vulkan backend" OFF)
3031
option(SD_FLASH_ATTN "sd: use flash attention for x4 less memory usage" OFF)
3132
option(SD_FAST_SOFTMAX "sd: x1.5 faster softmax, indeterministic (sometimes, same seed don't generate same image), cuda only" OFF)
3233
option(SD_BUILD_SHARED_LIBS "sd: build shared libs" OFF)
@@ -44,6 +45,12 @@ if(SD_METAL)
4445
add_definitions(-DSD_USE_METAL)
4546
endif()
4647

48+
if (SD_VULKAN)
49+
message("Use Vulkan as backend stable-diffusion")
50+
set(GGML_VULKAN ON)
51+
add_definitions(-DSD_USE_VULKAN)
52+
endif ()
53+
4754
if (SD_HIPBLAS)
4855
message("Use HIPBLAS as backend stable-diffusion")
4956
set(GGML_HIPBLAS ON)

ggml

Submodule ggml updated from 9d562d7 to 5653a19

ggml_extend.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@
3232
#include "ggml-metal.h"
3333
#endif
3434

35+
#ifdef SD_USE_VULKAN
36+
#include "ggml-vulkan.h"
37+
#endif
38+
3539
#include "rng.hpp"
3640
#include "util.h"
3741

@@ -588,7 +592,7 @@ __STATIC_INLINE__ struct ggml_tensor* ggml_nn_attention(struct ggml_context* ctx
588592
struct ggml_tensor* k,
589593
struct ggml_tensor* v,
590594
bool mask = false) {
591-
#if defined(SD_USE_FLASH_ATTENTION) && !defined(SD_USE_CUBLAS) && !defined(SD_USE_METAL)
595+
#if defined(SD_USE_FLASH_ATTENTION) && !defined(SD_USE_CUBLAS) && !defined(SD_USE_METAL) && !defined(SD_USE_VULKAN)
592596
struct ggml_tensor* kqv = ggml_flash_attn(ctx, q, k, v, false); // [N * n_head, n_token, d_head]
593597
#else
594598
float d_head = (float)q->ne[0];

model.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@
2121
#include "ggml-metal.h"
2222
#endif
2323

24+
#ifdef SD_USE_VULKAN
25+
#include "ggml-vulkan.h"
26+
#endif
27+
2428
#define ST_HEADER_SIZE_LEN 8
2529

2630
uint64_t read_u64(uint8_t* buffer) {

stable-diffusion.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,13 +154,17 @@ class StableDiffusionGGML {
154154
ggml_backend_metal_log_set_callback(ggml_log_callback_default, nullptr);
155155
backend = ggml_backend_metal_init();
156156
#endif
157+
#ifdef SD_USE_VULKAN
158+
LOG_DEBUG("Using Vulkan backend");
159+
backend = ggml_backend_vk_init();
160+
#endif
157161

158162
if (!backend) {
159163
LOG_DEBUG("Using CPU backend");
160164
backend = ggml_backend_cpu_init();
161165
}
162166
#ifdef SD_USE_FLASH_ATTENTION
163-
#if defined(SD_USE_CUBLAS) || defined(SD_USE_METAL)
167+
#if defined(SD_USE_CUBLAS) || defined(SD_USE_METAL) || defined(SD_USE_VULKAN)
164168
LOG_WARN("Flash Attention not supported with GPU Backend");
165169
#else
166170
LOG_INFO("Flash Attention enabled");

upscaler.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ struct UpscalerGGML {
2424
ggml_backend_metal_log_set_callback(ggml_log_callback_default, nullptr);
2525
backend = ggml_backend_metal_init();
2626
#endif
27+
#ifdef SD_USE_VULKAN
28+
LOG_DEBUG("Using Vulkan backend");
29+
backend = ggml_backend_vk_init(0);
30+
#endif
2731

2832
if (!backend) {
2933
LOG_DEBUG("Using CPU backend");

0 commit comments

Comments
 (0)