Skip to content

Commit 58a288f

Browse files
committed
init out_skip once
1 parent 4544c13 commit 58a288f

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

stable-diffusion.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -787,13 +787,20 @@ class StableDiffusionGGML {
787787
struct ggml_tensor* noised_input = ggml_dup_tensor(work_ctx, noise);
788788

789789
bool has_unconditioned = cfg_scale != 1.0 && uncond.c_crossattn != NULL;
790+
bool has_skiplayer = slg_scale != 0.0 && skip_layers.size() > 0;
791+
790792

791793
// denoise wrapper
792794
struct ggml_tensor* out_cond = ggml_dup_tensor(work_ctx, x);
793795
struct ggml_tensor* out_uncond = NULL;
796+
struct ggml_tensor* out_skip = NULL;
797+
794798
if (has_unconditioned) {
795799
out_uncond = ggml_dup_tensor(work_ctx, x);
796800
}
801+
if (has_skiplayer) {
802+
out_skip = ggml_dup_tensor(work_ctx, x);
803+
}
797804
struct ggml_tensor* denoised = ggml_dup_tensor(work_ctx, x);
798805

799806
auto denoise = [&](ggml_tensor* input, float sigma, int step) -> ggml_tensor* {
@@ -875,13 +882,11 @@ class StableDiffusionGGML {
875882
negative_data = (float*)out_uncond->data;
876883
}
877884

878-
bool has_skiplayer = skip_layers.size() > 0 && slg_scale != 0.0;
879885
int stepCount = sigmas.size();
880-
has_skiplayer = has_skiplayer && step > (int)(skip_layer_start * stepCount) && step < (int)(skip_layer_end * stepCount);
886+
bool is_skiplayer_step = has_skiplayer && step > (int)(skip_layer_start * stepCount) && step < (int)(skip_layer_end * stepCount);
881887
float* skip_layer_data = NULL;
882-
if (has_skiplayer) {
888+
if (is_skiplayer_step) {
883889
LOG_DEBUG("Skipping layers at step %d\n", step);
884-
ggml_tensor* out_skip = ggml_dup_tensor(work_ctx, x);
885890
// skip layer (same as conditionned)
886891
diffusion_model->compute(n_threads,
887892
noised_input,
@@ -914,7 +919,7 @@ class StableDiffusionGGML {
914919
latent_result = negative_data[i] + cfg_scale * (positive_data[i] - negative_data[i]);
915920
}
916921
}
917-
if (has_skiplayer) {
922+
if (is_skiplayer_step) {
918923
latent_result = latent_result + (positive_data[i] - skip_layer_data[i]) * slg_scale;
919924
}
920925
// v = latent_result, eps = latent_result

0 commit comments

Comments
 (0)