@@ -977,7 +977,18 @@ class StableDiffusionGGML {
977
977
978
978
float * deltas = vec_denoised;
979
979
980
- // https://arxiv.org/pdf/2410.02416
980
+ // APG: https://arxiv.org/pdf/2410.02416
981
+
982
+ bool log_cfg_norm = false ;
983
+ const char * SD_LOG_CFG_DELTA_NORM = getenv (" SD_LOG_CFG_DELTA_NORM" );
984
+ if (SD_LOG_CFG_DELTA_NORM != nullptr ) {
985
+ std::string sd_log_cfg_norm_str = SD_LOG_CFG_DELTA_NORM;
986
+ if (sd_log_cfg_norm_str == " ON" || sd_log_cfg_norm_str == " TRUE" ) {
987
+ log_cfg_norm = true ;
988
+ } else if (sd_log_cfg_norm_str != " OFF" && sd_log_cfg_norm_str != " FALSE" ) {
989
+ LOG_WARN (" SD_LOG_CFG_DELTA_NORM environment variable has unexpected value. Assuming default (\" OFF\" ). (Expected \" ON\" /\" TRUE\" or\" OFF\" /\" FALSE\" , got \" %s\" )" , SD_LOG_CFG_DELTA_NORM);
990
+ }
991
+ }
981
992
float apg_scale_factor = 1 .;
982
993
float diff_norm = 0 ;
983
994
float cond_norm_sq = 0 ;
@@ -989,7 +1000,7 @@ class StableDiffusionGGML {
989
1000
delta += apg_params.momentum * apg_momentum_buffer[i];
990
1001
apg_momentum_buffer[i] = delta;
991
1002
}
992
- if (apg_params.norm_treshold > 0 ) {
1003
+ if (apg_params.norm_treshold > 0 || log_cfg_norm ) {
993
1004
diff_norm += delta * delta;
994
1005
}
995
1006
if (apg_params.eta != 1 .0f ) {
@@ -998,6 +1009,9 @@ class StableDiffusionGGML {
998
1009
}
999
1010
deltas[i] = delta;
1000
1011
}
1012
+ if (log_cfg_norm){
1013
+ LOG_INFO (" CFG Delta norm: %.2f" , sqrtf (diff_norm));
1014
+ }
1001
1015
if (apg_params.norm_treshold > 0 ) {
1002
1016
diff_norm = sqrtf (diff_norm);
1003
1017
if (apg_params.norm_treshold_smoothing <= 0 ) {
0 commit comments