@@ -666,7 +666,7 @@ struct Flux2FlowDenoiser : public FluxFlowDenoiser {
666666typedef std::function<ggml_tensor*(ggml_tensor*, float , int )> denoise_cb_t ;
667667
668668// k diffusion reverse ODE: dx = (x - D(x;\sigma)) / \sigma dt; \sigma(t) = t
669- static void sample_k_diffusion (sample_method_t method,
669+ static bool sample_k_diffusion (sample_method_t method,
670670 denoise_cb_t model,
671671 ggml_context* work_ctx,
672672 ggml_tensor* x,
@@ -685,6 +685,9 @@ static void sample_k_diffusion(sample_method_t method,
685685
686686 // denoise
687687 ggml_tensor* denoised = model (x, sigma, i + 1 );
688+ if (denoised == nullptr ) {
689+ return false ;
690+ }
688691
689692 // d = (x - denoised) / sigma
690693 {
@@ -738,6 +741,9 @@ static void sample_k_diffusion(sample_method_t method,
738741
739742 // denoise
740743 ggml_tensor* denoised = model (x, sigma, i + 1 );
744+ if (denoised == nullptr ) {
745+ return false ;
746+ }
741747
742748 // d = (x - denoised) / sigma
743749 {
@@ -769,6 +775,9 @@ static void sample_k_diffusion(sample_method_t method,
769775 for (int i = 0 ; i < steps; i++) {
770776 // denoise
771777 ggml_tensor* denoised = model (x, sigmas[i], -(i + 1 ));
778+ if (denoised == nullptr ) {
779+ return false ;
780+ }
772781
773782 // d = (x - denoised) / sigma
774783 {
@@ -803,7 +812,10 @@ static void sample_k_diffusion(sample_method_t method,
803812 }
804813
805814 ggml_tensor* denoised = model (x2, sigmas[i + 1 ], i + 1 );
806- float * vec_denoised = (float *)denoised->data ;
815+ if (denoised == nullptr ) {
816+ return false ;
817+ }
818+ float * vec_denoised = (float *)denoised->data ;
807819 for (int j = 0 ; j < ggml_nelements (x); j++) {
808820 float d2 = (vec_x2[j] - vec_denoised[j]) / sigmas[i + 1 ];
809821 vec_d[j] = (vec_d[j] + d2) / 2 ;
@@ -819,6 +831,9 @@ static void sample_k_diffusion(sample_method_t method,
819831 for (int i = 0 ; i < steps; i++) {
820832 // denoise
821833 ggml_tensor* denoised = model (x, sigmas[i], i + 1 );
834+ if (denoised == nullptr ) {
835+ return false ;
836+ }
822837
823838 // d = (x - denoised) / sigma
824839 {
@@ -855,7 +870,10 @@ static void sample_k_diffusion(sample_method_t method,
855870 }
856871
857872 ggml_tensor* denoised = model (x2, sigma_mid, i + 1 );
858- float * vec_denoised = (float *)denoised->data ;
873+ if (denoised == nullptr ) {
874+ return false ;
875+ }
876+ float * vec_denoised = (float *)denoised->data ;
859877 for (int j = 0 ; j < ggml_nelements (x); j++) {
860878 float d2 = (vec_x2[j] - vec_denoised[j]) / sigma_mid;
861879 vec_x[j] = vec_x[j] + d2 * dt_2;
@@ -871,6 +889,9 @@ static void sample_k_diffusion(sample_method_t method,
871889 for (int i = 0 ; i < steps; i++) {
872890 // denoise
873891 ggml_tensor* denoised = model (x, sigmas[i], i + 1 );
892+ if (denoised == nullptr ) {
893+ return false ;
894+ }
874895
875896 // get_ancestral_step
876897 float sigma_up = std::min (sigmas[i + 1 ],
@@ -907,6 +928,9 @@ static void sample_k_diffusion(sample_method_t method,
907928 }
908929
909930 ggml_tensor* denoised = model (x2, sigmas[i + 1 ], i + 1 );
931+ if (denoised == nullptr ) {
932+ return false ;
933+ }
910934
911935 // Second half-step
912936 for (int j = 0 ; j < ggml_nelements (x); j++) {
@@ -937,6 +961,9 @@ static void sample_k_diffusion(sample_method_t method,
937961 for (int i = 0 ; i < steps; i++) {
938962 // denoise
939963 ggml_tensor* denoised = model (x, sigmas[i], i + 1 );
964+ if (denoised == nullptr ) {
965+ return false ;
966+ }
940967
941968 float t = t_fn (sigmas[i]);
942969 float t_next = t_fn (sigmas[i + 1 ]);
@@ -976,6 +1003,9 @@ static void sample_k_diffusion(sample_method_t method,
9761003 for (int i = 0 ; i < steps; i++) {
9771004 // denoise
9781005 ggml_tensor* denoised = model (x, sigmas[i], i + 1 );
1006+ if (denoised == nullptr ) {
1007+ return false ;
1008+ }
9791009
9801010 float t = t_fn (sigmas[i]);
9811011 float t_next = t_fn (sigmas[i + 1 ]);
@@ -1026,7 +1056,10 @@ static void sample_k_diffusion(sample_method_t method,
10261056
10271057 // Denoising step
10281058 ggml_tensor* denoised = model (x_cur, sigma, i + 1 );
1029- float * vec_denoised = (float *)denoised->data ;
1059+ if (denoised == nullptr ) {
1060+ return false ;
1061+ }
1062+ float * vec_denoised = (float *)denoised->data ;
10301063 // d_cur = (x_cur - denoised) / sigma
10311064 struct ggml_tensor * d_cur = ggml_dup_tensor (work_ctx, x_cur);
10321065 float * vec_d_cur = (float *)d_cur->data ;
@@ -1169,6 +1202,9 @@ static void sample_k_diffusion(sample_method_t method,
11691202
11701203 // denoise
11711204 ggml_tensor* denoised = model (x, sigma, i + 1 );
1205+ if (denoised == nullptr ) {
1206+ return false ;
1207+ }
11721208
11731209 // x = denoised
11741210 {
@@ -1561,8 +1597,9 @@ static void sample_k_diffusion(sample_method_t method,
15611597
15621598 default :
15631599 LOG_ERROR (" Attempting to sample with nonexisting sample method %i" , method);
1564- abort () ;
1600+ return false ;
15651601 }
1602+ return true ;
15661603}
15671604
15681605#endif // __DENOISER_HPP__
0 commit comments