mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-11-03 09:22:01 +00:00 
			
		
		
		
	ggml: add ops for WAN video model (cuda && cpu) (#15669)
* add conv3d support * add ggml_pad_ext for cpu & cuda backend * cuda/cpu: add im2col_3d support * cuda: make im2col a little faster * fix cuda pad/scale/im2col3d * make im2col_3d faster * gguf: support loading tensors which n_dims > GGML_MAX_DIMS * fix cuda get_rows * avoid ggml_conv_3d conflict * correct GGML_OP_COUNT assertion * avoid build failure * avoid build failure on MacOS * cuda: remove unnecessary MIN define * fix cpu im2col_3d * adjust the code style * cuda: use simpler loop in get_rows * add test_im2col_3d to test-backend-ops * test-backend-ops.cpp: remove trailing whitespace * cpu: im2col_3d support non continuous src Co-authored-by: Jeff Bolz <jbolz@nvidia.com> * fix test_im2col_3d * remove unused variables * cuda: get_rows: dfloat2 -> float2 * add test_pad_ext to test-backend-ops.cpp * add gguf_init_from_file_ext impl * Revert "gguf: support loading tensors which n_dims > GGML_MAX_DIMS" This reverts commitd8377a0a37. * Revert "add gguf_init_from_file_ext impl" This reverts commitd9f1d13208. * update ggml_backend_vk_device_supports_op * fix ggml_backend_vk_device_supports_op * update other backend supports op for ggml_pad_ext * metal/opencl/sycl/vulkan: fix GGML_OP_PAD check in supports_op --------- Co-authored-by: Jeff Bolz <jbolz@nvidia.com>
This commit is contained in:
		@@ -511,6 +511,7 @@ extern "C" {
 | 
			
		||||
        GGML_OP_CONV_TRANSPOSE_1D,
 | 
			
		||||
        GGML_OP_IM2COL,
 | 
			
		||||
        GGML_OP_IM2COL_BACK,
 | 
			
		||||
        GGML_OP_IM2COL_3D,
 | 
			
		||||
        GGML_OP_CONV_2D,
 | 
			
		||||
        GGML_OP_CONV_3D,
 | 
			
		||||
        GGML_OP_CONV_2D_DW,
 | 
			
		||||
@@ -1870,6 +1871,41 @@ extern "C" {
 | 
			
		||||
            int                   d0,  // dilation dimension 0
 | 
			
		||||
            int                   d1); // dilation dimension 1
 | 
			
		||||
 | 
			
		||||
    GGML_API struct ggml_tensor * ggml_im2col_3d(
 | 
			
		||||
            struct ggml_context * ctx,
 | 
			
		||||
            struct ggml_tensor  * a,
 | 
			
		||||
            struct ggml_tensor  * b,
 | 
			
		||||
            int64_t               IC,
 | 
			
		||||
            int                   s0, // stride width
 | 
			
		||||
            int                   s1, // stride height
 | 
			
		||||
            int                   s2, // stride depth
 | 
			
		||||
            int                   p0, // padding width
 | 
			
		||||
            int                   p1, // padding height
 | 
			
		||||
            int                   p2, // padding depth
 | 
			
		||||
            int                   d0, // dilation width
 | 
			
		||||
            int                   d1, // dilation height
 | 
			
		||||
            int                   d2, // dilation depth
 | 
			
		||||
            enum ggml_type        dst_type);
 | 
			
		||||
 | 
			
		||||
    // a: [OC*IC, KD, KH, KW]
 | 
			
		||||
    // b: [N*IC, ID, IH, IW]
 | 
			
		||||
    // result: [N*OC, OD, OH, OW]
 | 
			
		||||
    GGML_API struct ggml_tensor * ggml_conv_3d(
 | 
			
		||||
                struct ggml_context * ctx,
 | 
			
		||||
                struct ggml_tensor  * a,
 | 
			
		||||
                struct ggml_tensor  * b,
 | 
			
		||||
                int64_t               IC,
 | 
			
		||||
                int                   s0, // stride width
 | 
			
		||||
                int                   s1, // stride height
 | 
			
		||||
                int                   s2, // stride depth
 | 
			
		||||
                int                   p0, // padding width
 | 
			
		||||
                int                   p1, // padding height
 | 
			
		||||
                int                   p2, // padding depth
 | 
			
		||||
                int                   d0, // dilation width
 | 
			
		||||
                int                   d1, // dilation height
 | 
			
		||||
                int                   d2  // dilation depth
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
    // kernel size is a->ne[0] x a->ne[1]
 | 
			
		||||
    // stride is equal to kernel size
 | 
			
		||||
    // padding is zero
 | 
			
		||||
@@ -1941,7 +1977,7 @@ extern "C" {
 | 
			
		||||
            int                   d0,  // dilation dimension 0
 | 
			
		||||
            int                   d1); // dilation dimension 1
 | 
			
		||||
 | 
			
		||||
    GGML_API struct ggml_tensor * ggml_conv_3d(
 | 
			
		||||
    GGML_API struct ggml_tensor * ggml_conv_3d_direct(
 | 
			
		||||
            struct ggml_context * ctx,
 | 
			
		||||
            struct ggml_tensor  * a,   // kernel [KW, KH, KD, IC * OC]
 | 
			
		||||
            struct ggml_tensor  * b,   // input  [W, H, D, C * N]
 | 
			
		||||
@@ -2048,6 +2084,19 @@ extern "C" {
 | 
			
		||||
            int                  p2,
 | 
			
		||||
            int                  p3);
 | 
			
		||||
 | 
			
		||||
    GGML_API struct ggml_tensor * ggml_pad_ext(
 | 
			
		||||
            struct ggml_context * ctx,
 | 
			
		||||
            struct ggml_tensor  * a,
 | 
			
		||||
            int                  lp0,
 | 
			
		||||
            int                  rp0,
 | 
			
		||||
            int                  lp1,
 | 
			
		||||
            int                  rp1,
 | 
			
		||||
            int                  lp2,
 | 
			
		||||
            int                  rp2,
 | 
			
		||||
            int                  lp3,
 | 
			
		||||
            int                  rp3
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
    // pad each dimension with reflection: [a, b, c, d] -> [b, a, b, c, d, c]
 | 
			
		||||
    GGML_API struct ggml_tensor * ggml_pad_reflect_1d(
 | 
			
		||||
            struct ggml_context * ctx,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user