MKL.NET icon indicating copy to clipboard operation
MKL.NET copied to clipboard

MKL.NET.Matrix Nuget package in docker container

Open RobWomack98 opened this issue 1 year ago • 3 comments

Encountering errors with matrix multiplication using MKL.NET.Matrix Nuget package in a docker container

Dockerfile

FROM mcr.microsoft.com/dotnet/sdk:6.0-windowsservercore-ltsc2022
WORKDIR c:/test/
COPY test.csproj test.cs ./
RUN dotnet build
RUN dotnet test

test.csproj file

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>net6.0</TargetFrameworks>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="MKL.NET.Matrix" Version="1.1.1"/>
    <PackageReference Include="MKL.NET.win-x64" Version="2022.0.0.115" />
    <PackageReference Include="MSTest" Version="3.6.2"/>
  </ItemGroup>  
</Project>

test.cs file:

using System;
using System.Reflection;
using System.Runtime.InteropServices;
using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class matrix_test {
    [TestMethod]
    public void matrix_multiply_test(){
        MKLNET.matrix matrixA = new MKLNET.matrix(6, 6);
        for (int i = 0; i < matrixA.Cols; ++i) {
            for (int j = 0; j < matrixA.Rows; ++j) {
                    matrixA[i, j] = (i + 1) * (j + 1);
            }
        }
        try { MKLNET.matrix result = matrixA * matrixA;
        } catch (ExternalException e) {
            Console.WriteLine(e.ErrorCode);
            Console.WriteLine(e.Source);
            Assert.Fail();
        }
        Assert.IsTrue(true);
    }
}

output (catching the exception)

Error Message:
Assert.Fail failed.
Stack Trace:
at matrix_test.matrix_multiply_test() in C:\test\test.cs:line 20

Standard Output Messages:
-2147467259 (translates to 0x80004005, an Unspecified Error)
MKL.NET

output (not catching the exception)

System.Runtime.InteropServices.SEHException: External component has thrown an exception.
Stack Trace:
at MKLNET.Blas.Unsafe.gemm(Layout Layout, Trans TransA, Trans TransB, Int32 M, Int32 N, Int32 K, Double alpha, Double* A, Int32 lda, Double* B, Int32 ldb, Double beta, Double* C, Int32 ldc)
at MKLNET.Expression.MatrixMultiply.Evaluate()
at MKLNET.Expression.MatrixExpression.op_Implicit(MatrixExpression a)
at matrix_test.matrix_multiply_test() in C:\test\test.cs:line 16

Some scenarios where this error doesn't exist (that could help isolate the issue):

  1. when using mcr.microsoft.com/dotnet/sdk:6.0-jammy image (I change the runtime package to MKL.NET.linux-x64 and change dockerfile test path to /test/)
  2. executing the unit test outside of a docker image (i.e. normal windows 11)

Insight on why this error could be happening or how to get more information out of the external failure would be greatly helpful. Thanks

RobWomack98 avatar Nov 11 '24 15:11 RobWomack98