djl icon indicating copy to clipboard operation
djl copied to clipboard

DJL segfaults

Open Martmists-GH opened this issue 6 months ago • 0 comments
trafficstars

Description

After a few times creating a DJL NDArray (~100 times), it segfaults.

Expected Behavior

Creating an NDArray doesn't segfault.

Error Message

Stack: [0x00006b3f802fc000,0x00006b3f803fc000],  sp=0x00006b3f803f8be0,  free space=1010k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [libmxnet.so+0x15c97a8]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J 3454  com.sun.jna.Native.invokeInt(Lcom/sun/jna/Function;JI[Ljava/lang/Object;)I (0 bytes) @ 0x0000734de0307da1 [0x0000734de0307d20+0x0000000000000081]
J 10736 c2 com.sun.jna.Function.invoke([Ljava/lang/Object;Ljava/lang/Class;ZI)Ljava/lang/Object; (771 bytes) @ 0x0000734de0877114 [0x0000734de0876fe0+0x0000000000000134]
J 3616 c2 com.sun.jna.Function.invoke(Ljava/lang/reflect/Method;[Ljava/lang/Class;Ljava/lang/Class;[Ljava/lang/Object;Ljava/util/Map;)Ljava/lang/Object; (548 bytes) @ 0x0000734de0333104 [0x0000734de03326e0+0x0000000000000a24]
J 10738 c2 com.sun.jna.Library$Handler.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object; (394 bytes) @ 0x0000734de08785d0 [0x0000734de0877fc0+0x0000000000000610]
J 11005 c1 jdk.proxy2.$Proxy3.MXNDArraySyncCopyFromCPU(Lcom/sun/jna/Pointer;Lcom/sun/jna/Pointer;Lai/djl/mxnet/jna/NativeSize;)I jdk.proxy2 (47 bytes) @ 0x0000734dd9e70b2c [0x0000734dd9e705a0+0x000000000000058c]
J 11004 c1 ai.djl.mxnet.jna.JnaUtils.syncCopyFromCPU(Lcom/sun/jna/Pointer;Ljava/nio/Buffer;I)V (32 bytes) @ 0x0000734dd9e716b4 [0x0000734dd9e71520+0x0000000000000194]
J 11024 c1 ai.djl.mxnet.engine.MxNDArray.set(Ljava/nio/Buffer;)V (74 bytes) @ 0x0000734dd9e7dd34 [0x0000734dd9e7cfa0+0x0000000000000d94]
J 11443 c1 ai.djl.ndarray.NDManager.create(Ljava/nio/Buffer;Lai/djl/ndarray/types/Shape;)Lai/djl/ndarray/NDArray; (15 bytes) @ 0x0000734dd9f9977c [0x0000734dd9f994e0+0x000000000000029c]
J 11284 c1 com.martmists.ndarray.simd.compat.DjlKt.toDJL(Lcom/martmists/ndarray/simd/F64Array;Lai/djl/ndarray/NDManager;)Lai/djl/ndarray/NDArray; (150 bytes) @ 0x0000734dd9f18314 [0x0000734dd9f174e0+0x0000000000000e34]

How to Reproduce?

https://github.com/Martmists-GH/ndarray.simd/blob/master/src/jvmMain/kotlin/com/martmists/ndarray/simd/compat/djl.kt#L26 Call this function 100 times.

In my case, this is the calling code:

    private fun embed(image: F64ImageArray): FloatArray {
        // Drop alpha channel and convert to DJL NDArray
        val djl = image.slice(0, 3, axis=2).copy().toDJL()
        // Get embeddings
        return embedder.predict(factory.fromNDArray(djl))  // ResNet50 Image->FloatArray predictor
    }

Martmists-GH avatar May 15 '25 11:05 Martmists-GH