@@ -977,7 +977,18 @@ class StableDiffusionGGML {
977977
978978 float * deltas = vec_denoised;
979979
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+ }
981992 float apg_scale_factor = 1 .;
982993 float diff_norm = 0 ;
983994 float cond_norm_sq = 0 ;
@@ -989,7 +1000,7 @@ class StableDiffusionGGML {
9891000 delta += apg_params.momentum * apg_momentum_buffer[i];
9901001 apg_momentum_buffer[i] = delta;
9911002 }
992- if (apg_params.norm_treshold > 0 ) {
1003+ if (apg_params.norm_treshold > 0 || log_cfg_norm ) {
9931004 diff_norm += delta * delta;
9941005 }
9951006 if (apg_params.eta != 1 .0f ) {
@@ -998,6 +1009,9 @@ class StableDiffusionGGML {
9981009 }
9991010 deltas[i] = delta;
10001011 }
1012+ if (log_cfg_norm){
1013+ LOG_INFO (" CFG Delta norm: %.2f" , sqrtf (diff_norm));
1014+ }
10011015 if (apg_params.norm_treshold > 0 ) {
10021016 diff_norm = sqrtf (diff_norm);
10031017 if (apg_params.norm_treshold_smoothing <= 0 ) {
0 commit comments